diff options
author | Gael Guennebaud <g.gael@free.fr> | 2008-07-27 11:39:47 +0000 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2008-07-27 11:39:47 +0000 |
commit | 93115619c23bb41fd24b0090cb6adec501edaced (patch) | |
tree | 60ae0887b0705b8a994f8ef9baa5324c87883861 /bench/btl/libs/C_BLAS | |
parent | e9e5261664cc77049f8b77a2c36c535fbd44889c (diff) |
* updated benchmark files according to recent renamings
* various improvements in BTL including trisolver and cholesky bench
Diffstat (limited to 'bench/btl/libs/C_BLAS')
-rw-r--r-- | bench/btl/libs/C_BLAS/CMakeLists.txt | 20 | ||||
-rw-r--r-- | bench/btl/libs/C_BLAS/C_BLAS_interface.hh | 74 | ||||
-rw-r--r-- | bench/btl/libs/C_BLAS/main.cpp | 22 |
3 files changed, 72 insertions, 44 deletions
diff --git a/bench/btl/libs/C_BLAS/CMakeLists.txt b/bench/btl/libs/C_BLAS/CMakeLists.txt index 73e5cc46b..f72e9caea 100644 --- a/bench/btl/libs/C_BLAS/CMakeLists.txt +++ b/bench/btl/libs/C_BLAS/CMakeLists.txt @@ -1,13 +1,13 @@ -find_package(CBLAS) -if (CBLAS_FOUND) - include_directories(${CBLAS_INCLUDES} ${PROJECT_SOURCE_DIR}/libs/f77) - btl_add_bench(btl_cblas main.cpp) - if(BUILD_btl_cblas) - target_link_libraries(btl_cblas ${CBLAS_LIBRARIES}) - set_target_properties(btl_cblas PROPERTIES COMPILE_FLAGS "-DCBLASNAME=ATLAS") - endif(BUILD_btl_cblas) -endif (CBLAS_FOUND) +find_package(ATLAS) +if (ATLAS_FOUND) + include_directories(${ATLAS_INCLUDES} ${PROJECT_SOURCE_DIR}/libs/f77) + btl_add_bench(btl_atlas main.cpp) + if(BUILD_btl_atlas) + target_link_libraries(btl_atlas ${ATLAS_LIBRARIES}) + set_target_properties(btl_atlas PROPERTIES COMPILE_FLAGS "-DCBLASNAME=ATLAS -DHAS_LAPACK=1") + endif(BUILD_btl_atlas) +endif (ATLAS_FOUND) find_package(MKL) if (MKL_FOUND) @@ -15,6 +15,6 @@ if (MKL_FOUND) btl_add_bench(btl_mkl main.cpp) if(BUILD_btl_mkl) target_link_libraries(btl_mkl ${MKL_LIBRARIES}) - set_target_properties(btl_mkl PROPERTIES COMPILE_FLAGS "-DCBLASNAME=INTEL_MKL") + set_target_properties(btl_mkl PROPERTIES COMPILE_FLAGS "-DCBLASNAME=INTEL_MKL -DHAS_LAPACK=1") endif(BUILD_btl_mkl) endif (MKL_FOUND) diff --git a/bench/btl/libs/C_BLAS/C_BLAS_interface.hh b/bench/btl/libs/C_BLAS/C_BLAS_interface.hh index eadbf0dd2..49ae90f3d 100644 --- a/bench/btl/libs/C_BLAS/C_BLAS_interface.hh +++ b/bench/btl/libs/C_BLAS/C_BLAS_interface.hh @@ -25,6 +25,11 @@ extern "C" { #include "cblas.h" +#ifdef HAS_LAPACK + // Cholesky Factorization + void spotrf_(const char* uplo, const int* n, float *a, const int* ld, int* info); + void dpotrf_(const char* uplo, const int* n, double *a, const int* ld, int* info); +#endif } #define MAKE_STRING2(S) #S @@ -53,31 +58,31 @@ public : cblas_dgemv(CblasColMajor,CblasTrans,N,N,1.0,A,N,B,1,0.0,X,1); } - static inline void matrix_matrix_product(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N) - { + static inline void matrix_matrix_product(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N){ cblas_dgemm(CblasColMajor,CblasNoTrans,CblasNoTrans,N,N,N,1.0,A,N,B,N,0.0,X,N); } - static inline void transposed_matrix_matrix_product(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N) - { + static inline void transposed_matrix_matrix_product(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N){ cblas_dgemm(CblasColMajor,CblasTrans,CblasTrans,N,N,N,1.0,A,N,B,N,0.0,X,N); } - static inline void ata_product(gene_matrix & A, gene_matrix & X, int N) - { + static inline void ata_product(gene_matrix & A, gene_matrix & X, int N){ cblas_dgemm(CblasColMajor,CblasTrans,CblasNoTrans,N,N,N,1.0,A,N,A,N,0.0,X,N); } - static inline void aat_product(gene_matrix & A, gene_matrix & X, int N) - { + static inline void aat_product(gene_matrix & A, gene_matrix & X, int N){ cblas_dgemm(CblasColMajor,CblasNoTrans,CblasTrans,N,N,N,1.0,A,N,A,N,0.0,X,N); } - static inline void axpy(real coef, const gene_vector & X, gene_vector & Y, int N) - { + static inline void axpy(real coef, const gene_vector & X, gene_vector & Y, int N){ cblas_daxpy(N,coef,X,1,Y,1); } + static inline void axpby(real a, const gene_vector & X, real b, gene_vector & Y, int N){ + cblas_dscal(N,b,Y,1); + cblas_daxpy(N,a,X,1,Y,1); + } + }; template<> @@ -90,41 +95,62 @@ public : return MAKE_STRING(CBLASNAME); } - static inline void matrix_vector_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N) - { + static inline void matrix_vector_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N){ cblas_sgemv(CblasColMajor,CblasNoTrans,N,N,1.0,A,N,B,1,0.0,X,1); } - static inline void atv_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N) - { + static inline void atv_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N){ cblas_sgemv(CblasColMajor,CblasTrans,N,N,1.0,A,N,B,1,0.0,X,1); } - static inline void matrix_matrix_product(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N) - { + static inline void matrix_matrix_product(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N){ cblas_sgemm(CblasColMajor,CblasNoTrans,CblasNoTrans,N,N,N,1.0,A,N,B,N,0.0,X,N); } - static inline void transposed_matrix_matrix_product(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N) - { + static inline void transposed_matrix_matrix_product(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N){ cblas_sgemm(CblasColMajor,CblasNoTrans,CblasNoTrans,N,N,N,1.0,A,N,B,N,0.0,X,N); } - static inline void ata_product(gene_matrix & A, gene_matrix & X, int N) - { + static inline void ata_product(gene_matrix & A, gene_matrix & X, int N){ cblas_sgemm(CblasColMajor,CblasTrans,CblasNoTrans,N,N,N,1.0,A,N,A,N,0.0,X,N); } - static inline void aat_product(gene_matrix & A, gene_matrix & X, int N) - { + static inline void aat_product(gene_matrix & A, gene_matrix & X, int N){ cblas_sgemm(CblasColMajor,CblasNoTrans,CblasTrans,N,N,N,1.0,A,N,A,N,0.0,X,N); } - static inline void axpy(float coef, const gene_vector & X, gene_vector & Y, int N) - { + static inline void axpy(float coef, const gene_vector & X, gene_vector & Y, int N){ cblas_saxpy(N,coef,X,1,Y,1); } + static inline void axpby(float a, const gene_vector & X, float b, gene_vector & Y, int N){ + cblas_sscal(N,b,Y,1); + cblas_saxpy(N,a,X,1,Y,1); + } + + #ifdef HAS_LAPACK + static inline void cholesky(const gene_vector & X, gene_vector & C, int N){ + cblas_scopy(N*N, X, 1, C, 1); + char uplo = 'L'; + int info = 0; + spotrf_(&uplo, &N, C, &N, &info); +// float tmp[N]; +// for (int j = 1; j < N; ++j) +// { +// int endSize = N-j-1; +// if (endSize>0) { + //cblas_sgemv(CblasColMajor, CblasNoTrans, N-j-1, j, ATL_rnone, A+j+1, lda, A+j, lda, ATL_rone, Ac+j+1, 1); +// cblas_sgemv(CblasColMajor, CblasNoTrans,endSize,j, 1.0, &(C[j+1]),N, &(C[j]),N, 0.0, &(C[j+1+N*j]),1); +// } +// } + } + #endif + + static inline void trisolve_lower(const gene_matrix & L, const gene_vector& B, gene_vector & X, int N){ + cblas_scopy(N, B, 1, X, 1); + cblas_strsv(CblasColMajor, CblasLower, CblasNoTrans, CblasNonUnit, N, L, N, X, 1); + } + }; diff --git a/bench/btl/libs/C_BLAS/main.cpp b/bench/btl/libs/C_BLAS/main.cpp index bef5d30be..3e38d6985 100644 --- a/bench/btl/libs/C_BLAS/main.cpp +++ b/bench/btl/libs/C_BLAS/main.cpp @@ -20,13 +20,11 @@ #include "utilities.h" #include "C_BLAS_interface.hh" #include "bench.hh" -#include "action_matrix_vector_product.hh" -#include "action_matrix_matrix_product.hh" -#include "action_atv_product.hh" -#include "action_axpy.hh" -#include "action_lu_solve.hh" -#include "action_ata_product.hh" -#include "action_aat_product.hh" +#include "basic_actions.hh" + +#ifdef HAS_LAPACK +#include "action_cholesky.hh" +#endif BTL_MAIN; @@ -34,17 +32,21 @@ int main() { bench<Action_axpy<C_BLAS_interface<REAL_TYPE> > >(MIN_AXPY,MAX_AXPY,NB_POINT); + bench<Action_axpby<C_BLAS_interface<REAL_TYPE> > >(MIN_AXPY,MAX_AXPY,NB_POINT); bench<Action_matrix_vector_product<C_BLAS_interface<REAL_TYPE> > >(MIN_MV,MAX_MV,NB_POINT); - bench<Action_atv_product<C_BLAS_interface<REAL_TYPE> > >(MIN_MV,MAX_MV,NB_POINT); bench<Action_matrix_matrix_product<C_BLAS_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT); - bench<Action_ata_product<C_BLAS_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT); - bench<Action_aat_product<C_BLAS_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT); + bench<Action_trisolve<C_BLAS_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT); + + #ifdef HAS_LAPACK + bench<Action_cholesky<C_BLAS_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT); + #endif + //bench<Action_lu_solve<C_BLAS_LU_solve_interface<REAL_TYPE> > >(MIN_LU,MAX_LU,NB_POINT); return 0; |