aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/btl/libs/C_BLAS
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2008-07-27 11:39:47 +0000
committerGravatar Gael Guennebaud <g.gael@free.fr>2008-07-27 11:39:47 +0000
commit93115619c23bb41fd24b0090cb6adec501edaced (patch)
tree60ae0887b0705b8a994f8ef9baa5324c87883861 /bench/btl/libs/C_BLAS
parente9e5261664cc77049f8b77a2c36c535fbd44889c (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.txt20
-rw-r--r--bench/btl/libs/C_BLAS/C_BLAS_interface.hh74
-rw-r--r--bench/btl/libs/C_BLAS/main.cpp22
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;