void tst(void) { unsigned i; for (i = 0; i < 128; i++) /* This cast to char has to be preserved. */ blas ((char) i); for (i = 0; i < 127; i++) /* And this one does not. */ blas ((char) i); for (i = 0; i < 255; i++) /* This cast is not necessary. */ blau ((unsigned char) i); for (i = 0; i < 256; i++) blau ((unsigned char) i); /* This one is necessary. */ }
double do_time_sacado_fad_dot(unsigned int m, unsigned int ndot, unsigned int nloop, bool use_dynamic) { Sacado::Random<double> urand(0.0, 1.0); unsigned int sz = 2*m*(1+ndot); Teuchos::BLAS<int,FadType> blas(false,use_dynamic,sz); Sacado::Fad::Vector<unsigned int, FadType> X(m,ndot), Y(m,ndot); for (unsigned int i=0; i<m; i++) { X[i] = FadType(ndot, urand.number()); Y[i] = FadType(ndot, urand.number()); for (unsigned int k=0; k<ndot; k++) { X[i].fastAccessDx(k) = urand.number(); Y[i].fastAccessDx(k) = urand.number(); } } Teuchos::Time timer("Teuchos Fad DOT", false); timer.start(true); for (unsigned int j=0; j<nloop; j++) { FadType z = blas.DOT(m, &X[0], 1, &Y[0], 1); } timer.stop(); return timer.totalElapsedTime() / nloop; }
double do_time_sacado_fad_gemm(unsigned int m, unsigned int n, unsigned int k, unsigned int ndot, unsigned int nloop, bool use_dynamic) { Sacado::Random<double> urand(0.0, 1.0); unsigned int sz = (m*k+k*n+m*n)*(1+ndot); Teuchos::BLAS<int,FadType> blas(false,use_dynamic,sz); Sacado::Fad::Vector<unsigned int, FadType> A(m*k,ndot), B(k*n,ndot), C (m*n,ndot); for (unsigned int j=0; j<k; j++) { for (unsigned int i=0; i<m; i++) { A[i+j*m] = FadType(ndot, urand.number()); for (unsigned int l=0; l<ndot; l++) A[i+j*m].fastAccessDx(l) = urand.number(); } } for (unsigned int j=0; j<n; j++) { for (unsigned int i=0; i<k; i++) { B[i+j*k] = FadType(ndot, urand.number()); for (unsigned int l=0; l<ndot; l++) B[i+j*k].fastAccessDx(l) = urand.number(); } } for (unsigned int j=0; j<n; j++) { for (unsigned int i=0; i<m; i++) { C[i+j*m] = FadType(ndot, urand.number()); for (unsigned int l=0; l<ndot; l++) C[i+j*m].fastAccessDx(l) = urand.number(); } } FadType alpha(ndot, urand.number()); FadType beta(ndot, urand.number()); for (unsigned int l=0; l<ndot; l++) { alpha.fastAccessDx(l) = urand.number(); beta.fastAccessDx(l) = urand.number(); } Teuchos::Time timer("Teuchos Fad GEMM", false); timer.start(true); for (unsigned int j=0; j<nloop; j++) { blas.GEMM(Teuchos::NO_TRANS, Teuchos::NO_TRANS, m, n, k, alpha, &A[0], m, &B[0], k, beta, &C[0], m); } timer.stop(); return timer.totalElapsedTime() / nloop; }
double do_time_sacado_fad_gemv(unsigned int m, unsigned int n, unsigned int ndot, unsigned int nloop, bool use_dynamic) { Sacado::Random<double> urand(0.0, 1.0); unsigned int sz = m*n*(1+ndot) + 2*n*(1+ndot); Teuchos::BLAS<int,FadType> blas(false,use_dynamic,sz); Sacado::Fad::Vector<unsigned int, FadType> A(m*n,ndot), B(n,ndot), C(m,ndot); for (unsigned int j=0; j<n; j++) { for (unsigned int i=0; i<m; i++) { //A[i+j*m] = urand.number(); A[i+j*m] = FadType(ndot, urand.number()); for (unsigned int k=0; k<ndot; k++) A[i+j*m].fastAccessDx(k) = urand.number(); } B[j] = FadType(ndot, urand.number()); for (unsigned int k=0; k<ndot; k++) B[j].fastAccessDx(k) = urand.number(); } for (unsigned int i=0; i<m; i++) { C[i] = FadType(ndot, urand.number()); for (unsigned int k=0; k<ndot; k++) C[i].fastAccessDx(k) = urand.number(); } FadType alpha(ndot, urand.number()); FadType beta(ndot, urand.number()); for (unsigned int k=0; k<ndot; k++) { alpha.fastAccessDx(k) = urand.number(); beta.fastAccessDx(k) = urand.number(); } Teuchos::Time timer("Teuchos Fad GEMV", false); timer.start(true); for (unsigned int j=0; j<nloop; j++) { blas.GEMV(Teuchos::NO_TRANS, m, n, alpha, &A[0], m, &B[0], 1, beta, &C[0], 1); } timer.stop(); return timer.totalElapsedTime() / nloop; }