From 8a424efb11e8ff5ef59d50e308195af4dff27353 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Mon, 9 Mar 2009 14:16:05 +0000 Subject: add an option to bench eigen without GCC's auto vec (might conflict with Eigen's auto vec) --- bench/btl/libs/eigen2/CMakeLists.txt | 57 +++++++++++++++++++------------ bench/btl/libs/eigen2/eigen2_interface.hh | 20 ++++------- 2 files changed, 42 insertions(+), 35 deletions(-) (limited to 'bench') diff --git a/bench/btl/libs/eigen2/CMakeLists.txt b/bench/btl/libs/eigen2/CMakeLists.txt index beb37f79b..177247077 100644 --- a/bench/btl/libs/eigen2/CMakeLists.txt +++ b/bench/btl/libs/eigen2/CMakeLists.txt @@ -6,39 +6,52 @@ if (EIGEN2_FOUND) btl_add_bench(btl_eigen2_linear main_linear.cpp) btl_add_bench(btl_eigen2_vecmat main_vecmat.cpp) btl_add_bench(btl_eigen2_matmat main_matmat.cpp) - btl_add_bench(btl_eigen2_adv main_adv.cpp) - - IF(NOT BTL_NOVEC) + btl_add_bench(btl_eigen2_adv main_adv.cpp ) + + btl_add_target_property(btl_eigen2_linear COMPILE_FLAGS "-DBTL_PREFIX=eigen2") + btl_add_target_property(btl_eigen2_vecmat COMPILE_FLAGS "-DBTL_PREFIX=eigen2") + btl_add_target_property(btl_eigen2_matmat COMPILE_FLAGS "-DBTL_PREFIX=eigen2") + btl_add_target_property(btl_eigen2_adv COMPILE_FLAGS "-DBTL_PREFIX=eigen2") + + option(BTL_BENCH_NOGCCVEC "also bench Eigen explicit vec without GCC's auto vec" OFF) + if(CMAKE_COMPILER_IS_GNUCXX AND BTL_BENCH_NOGCCVEC) + btl_add_bench(btl_eigen2_nogccvec_linear main_linear.cpp) + btl_add_bench(btl_eigen2_nogccvec_vecmat main_vecmat.cpp) + btl_add_bench(btl_eigen2_nogccvec_matmat main_matmat.cpp) + btl_add_bench(btl_eigen2_nogccvec_adv main_adv.cpp ) + + btl_add_target_property(btl_eigen2_nogccvec_linear COMPILE_FLAGS "-fno-tree-vectorize -DBTL_PREFIX=eigen2_nogccvec") + btl_add_target_property(btl_eigen2_nogccvec_vecmat COMPILE_FLAGS "-fno-tree-vectorize -DBTL_PREFIX=eigen2_nogccvec") + btl_add_target_property(btl_eigen2_nogccvec_matmat COMPILE_FLAGS "-fno-tree-vectorize -DBTL_PREFIX=eigen2_nogccvec") + btl_add_target_property(btl_eigen2_nogccvec_adv COMPILE_FLAGS "-fno-tree-vectorize -DBTL_PREFIX=eigen2_nogccvec") + endif() + + + if(NOT BTL_NOVEC) btl_add_bench(btl_eigen2_novec_linear main_linear.cpp) btl_add_bench(btl_eigen2_novec_vecmat main_vecmat.cpp) btl_add_bench(btl_eigen2_novec_matmat main_matmat.cpp) - btl_add_bench(btl_eigen2_novec_adv main_adv.cpp) - if(BUILD_btl_eigen2_novec_linear) - set_target_properties(btl_eigen2_novec_linear PROPERTIES COMPILE_FLAGS "-DEIGEN_DONT_VECTORIZE") - endif(BUILD_btl_eigen2_novec_linear) - if(BUILD_btl_eigen2_novec_vecmat) - set_target_properties(btl_eigen2_novec_vecmat PROPERTIES COMPILE_FLAGS "-DEIGEN_DONT_VECTORIZE") - endif(BUILD_btl_eigen2_novec_vecmat) - if(BUILD_btl_eigen2_novec_matmat) - set_target_properties(btl_eigen2_novec_matmat PROPERTIES COMPILE_FLAGS "-DEIGEN_DONT_VECTORIZE") - endif(BUILD_btl_eigen2_novec_matmat) - if(BUILD_btl_eigen2_novec_adv) - set_target_properties(btl_eigen2_novec_adv PROPERTIES COMPILE_FLAGS "-DEIGEN_DONT_VECTORIZE") - endif(BUILD_btl_eigen2_novec_adv) + btl_add_bench(btl_eigen2_novec_adv main_adv.cpp ) + btl_add_target_property(btl_eigen2_novec_linear COMPILE_FLAGS "-DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=eigen2_novec") + btl_add_target_property(btl_eigen2_novec_vecmat COMPILE_FLAGS "-DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=eigen2_novec") + btl_add_target_property(btl_eigen2_novec_matmat COMPILE_FLAGS "-DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=eigen2_novec") + btl_add_target_property(btl_eigen2_novec_adv COMPILE_FLAGS "-DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=eigen2_novec") # if(BUILD_btl_eigen2_adv) # target_link_libraries(btl_eigen2_adv ${MKL_LIBRARIES}) # endif(BUILD_btl_eigen2_adv) - - ENDIF(NOT BTL_NOVEC) + + endif(NOT BTL_NOVEC) btl_add_bench(btl_tiny_eigen2 btl_tiny_eigen2.cpp OFF) - IF(NOT BTL_NOVEC) + if(NOT BTL_NOVEC) btl_add_bench(btl_tiny_eigen2_novec btl_tiny_eigen2.cpp OFF) + btl_add_target_property(btl_tiny_eigen2_novec COMPILE_FLAGS "-DBTL_PREFIX=eigen2_tiny") + if(BUILD_btl_tiny_eigen2_novec) - set_target_properties(btl_tiny_eigen2_novec PROPERTIES COMPILE_FLAGS "-DEIGEN_DONT_VECTORIZE") + btl_add_target_property(btl_tiny_eigen2_novec COMPILE_FLAGS "-DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=eigen2_tiny_novec") endif(BUILD_btl_tiny_eigen2_novec) - ENDIF(NOT BTL_NOVEC) - + endif(NOT BTL_NOVEC) + endif (EIGEN2_FOUND) diff --git a/bench/btl/libs/eigen2/eigen2_interface.hh b/bench/btl/libs/eigen2/eigen2_interface.hh index 92a5677d3..5d70279ca 100644 --- a/bench/btl/libs/eigen2/eigen2_interface.hh +++ b/bench/btl/libs/eigen2/eigen2_interface.hh @@ -45,15 +45,7 @@ public : static inline std::string name( void ) { - #if defined(EIGEN_USE_NEW_PRODUCT) - if (SIZE==Dynamic) return "eigen2_newprod"; else return "tiny_eigen2"; - #elif defined(EIGEN_VECTORIZE_SSE) - if (SIZE==Dynamic) return "eigen2"; else return "tiny_eigen2"; - #elif defined(EIGEN_VECTORIZE_ALTIVEC) - if (SIZE==Dynamic) return "eigen2"; else return "tiny_eigen2"; - #else - if (SIZE==Dynamic) return "eigen2_novec"; else return "tiny_eigen2_novec"; - #endif + return EIGEN_MAKESTRING(BTL_PREFIX); } static void free_matrix(gene_matrix & A, int N) {} @@ -119,7 +111,7 @@ public : //X = (A.template marked() * B)/*.lazy()*/; ei_product_selfadjoint_vector(N,A.data(),N, B.data(), X.data()); } - + template static void triassign(Dest& dst, const Src& src) { typedef typename Dest::Scalar Scalar; @@ -164,9 +156,11 @@ public : //dst.col(j).end(N-j) = src.col(j).end(N-j); } } - + static EIGEN_DONT_INLINE void syr2(gene_matrix & A, gene_vector & X, gene_vector & Y, int N){ // ei_product_selfadjoint_rank2_update(N,A.data(),N, X.data(), 1, Y.data(), 1, -1); + for(int j=0; j