From 240bfdd1421834c319ee9e5ef7e8668cc9c56d3d Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Wed, 26 Jan 2011 19:12:35 +0100 Subject: finish the move to Eigen3 in BTL, and let's use our own FindEigen3.cmake script --- bench/btl/CMakeLists.txt | 2 +- bench/btl/cmake/FindEigen.cmake | 30 --- bench/btl/cmake/FindEigen2.cmake | 32 --- bench/btl/cmake/FindEigen3.cmake | 81 +++++++ bench/btl/libs/eigen2/CMakeLists.txt | 57 ----- bench/btl/libs/eigen2/btl_tiny_eigen2.cpp | 46 ---- bench/btl/libs/eigen2/eigen2_LU_solve_interface.hh | 192 ----------------- bench/btl/libs/eigen2/eigen2_interface.hh | 239 --------------------- bench/btl/libs/eigen2/main_adv.cpp | 44 ---- bench/btl/libs/eigen2/main_linear.cpp | 35 --- bench/btl/libs/eigen2/main_matmat.cpp | 35 --- bench/btl/libs/eigen2/main_vecmat.cpp | 36 ---- bench/btl/libs/eigen3/CMakeLists.txt | 57 +++++ bench/btl/libs/eigen3/btl_tiny_eigen3.cpp | 46 ++++ bench/btl/libs/eigen3/eigen3_interface.hh | 239 +++++++++++++++++++++ bench/btl/libs/eigen3/main_adv.cpp | 44 ++++ bench/btl/libs/eigen3/main_linear.cpp | 35 +++ bench/btl/libs/eigen3/main_matmat.cpp | 35 +++ bench/btl/libs/eigen3/main_vecmat.cpp | 36 ++++ 19 files changed, 574 insertions(+), 747 deletions(-) delete mode 100644 bench/btl/cmake/FindEigen.cmake delete mode 100644 bench/btl/cmake/FindEigen2.cmake create mode 100644 bench/btl/cmake/FindEigen3.cmake delete mode 100644 bench/btl/libs/eigen2/CMakeLists.txt delete mode 100644 bench/btl/libs/eigen2/btl_tiny_eigen2.cpp delete mode 100644 bench/btl/libs/eigen2/eigen2_LU_solve_interface.hh delete mode 100644 bench/btl/libs/eigen2/eigen2_interface.hh delete mode 100644 bench/btl/libs/eigen2/main_adv.cpp delete mode 100644 bench/btl/libs/eigen2/main_linear.cpp delete mode 100644 bench/btl/libs/eigen2/main_matmat.cpp delete mode 100644 bench/btl/libs/eigen2/main_vecmat.cpp create mode 100644 bench/btl/libs/eigen3/CMakeLists.txt create mode 100644 bench/btl/libs/eigen3/btl_tiny_eigen3.cpp create mode 100644 bench/btl/libs/eigen3/eigen3_interface.hh create mode 100644 bench/btl/libs/eigen3/main_adv.cpp create mode 100644 bench/btl/libs/eigen3/main_linear.cpp create mode 100644 bench/btl/libs/eigen3/main_matmat.cpp create mode 100644 bench/btl/libs/eigen3/main_vecmat.cpp (limited to 'bench/btl') diff --git a/bench/btl/CMakeLists.txt b/bench/btl/CMakeLists.txt index 5855c0d9e..b7b2df37c 100644 --- a/bench/btl/CMakeLists.txt +++ b/bench/btl/CMakeLists.txt @@ -89,7 +89,7 @@ endmacro(btl_add_target_property) ENABLE_TESTING() -add_subdirectory(libs/eigen2) +add_subdirectory(libs/eigen3) add_subdirectory(libs/hand_vec) add_subdirectory(libs/gmm) add_subdirectory(libs/mtl4) diff --git a/bench/btl/cmake/FindEigen.cmake b/bench/btl/cmake/FindEigen.cmake deleted file mode 100644 index 1a5fe34fd..000000000 --- a/bench/btl/cmake/FindEigen.cmake +++ /dev/null @@ -1,30 +0,0 @@ -# - Try to find eigen lib -# Once done this will define -# -# EIGEN_FOUND - system has eigen lib -# EIGEN_INCLUDE_DIR - the eigen include directory - -# Copyright (c) 2006, 2007 Montel Laurent, -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. - -if (EIGEN_INCLUDE_DIR) - - # in cache already - set(EIGEN_FOUND TRUE) - -else (EIGEN_INCLUDE_DIR) - -find_path(EIGEN_INCLUDE_DIR NAMES eigen/matrix.h - PATHS - ${INCLUDE_INSTALL_DIR} - ) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Eigen DEFAULT_MSG EIGEN_INCLUDE_DIR ) - - -mark_as_advanced(EIGEN_INCLUDE_DIR) - -endif(EIGEN_INCLUDE_DIR) - diff --git a/bench/btl/cmake/FindEigen2.cmake b/bench/btl/cmake/FindEigen2.cmake deleted file mode 100644 index 5feddf3e1..000000000 --- a/bench/btl/cmake/FindEigen2.cmake +++ /dev/null @@ -1,32 +0,0 @@ -# - Try to find Eigen2 lib -# Once done this will define -# -# EIGEN2_FOUND - system has eigen lib -# EIGEN2_INCLUDE_DIR - the eigen include directory - -# Copyright (c) 2006, 2007 Montel Laurent, -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. - -if (EIGEN2_INCLUDE_DIR) - - # in cache already - set(EIGEN2_FOUND TRUE) - -else (EIGEN2_INCLUDE_DIR) - -find_path(EIGEN2_INCLUDE_DIR NAMES Eigen/Core - PATH_SUFFIXES eigen2 - HINTS - ${INCLUDE_INSTALL_DIR} - ${KDE4_INCLUDE_DIR} - ) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Eigen2 DEFAULT_MSG EIGEN2_INCLUDE_DIR ) - - -mark_as_advanced(EIGEN2_INCLUDE_DIR) - -endif(EIGEN2_INCLUDE_DIR) - diff --git a/bench/btl/cmake/FindEigen3.cmake b/bench/btl/cmake/FindEigen3.cmake new file mode 100644 index 000000000..9c546a05d --- /dev/null +++ b/bench/btl/cmake/FindEigen3.cmake @@ -0,0 +1,81 @@ +# - Try to find Eigen3 lib +# +# This module supports requiring a minimum version, e.g. you can do +# find_package(Eigen3 3.1.2) +# to require version 3.1.2 or newer of Eigen3. +# +# Once done this will define +# +# EIGEN3_FOUND - system has eigen lib with correct version +# EIGEN3_INCLUDE_DIR - the eigen include directory +# EIGEN3_VERSION - eigen version + +# Copyright (c) 2006, 2007 Montel Laurent, +# Copyright (c) 2008, 2009 Gael Guennebaud, +# Copyright (c) 2009 Benoit Jacob +# Redistribution and use is allowed according to the terms of the 2-clause BSD license. + +if(NOT Eigen3_FIND_VERSION) + if(NOT Eigen3_FIND_VERSION_MAJOR) + set(Eigen3_FIND_VERSION_MAJOR 2) + endif(NOT Eigen3_FIND_VERSION_MAJOR) + if(NOT Eigen3_FIND_VERSION_MINOR) + set(Eigen3_FIND_VERSION_MINOR 91) + endif(NOT Eigen3_FIND_VERSION_MINOR) + if(NOT Eigen3_FIND_VERSION_PATCH) + set(Eigen3_FIND_VERSION_PATCH 0) + endif(NOT Eigen3_FIND_VERSION_PATCH) + + set(Eigen3_FIND_VERSION "${Eigen3_FIND_VERSION_MAJOR}.${Eigen3_FIND_VERSION_MINOR}.${Eigen3_FIND_VERSION_PATCH}") +endif(NOT Eigen3_FIND_VERSION) + +macro(_eigen3_check_version) + file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen3_version_header) + + string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen3_world_version_match "${_eigen3_version_header}") + set(EIGEN3_WORLD_VERSION "${CMAKE_MATCH_1}") + string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen3_major_version_match "${_eigen3_version_header}") + set(EIGEN3_MAJOR_VERSION "${CMAKE_MATCH_1}") + string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen3_minor_version_match "${_eigen3_version_header}") + set(EIGEN3_MINOR_VERSION "${CMAKE_MATCH_1}") + + set(EIGEN3_VERSION ${EIGEN3_WORLD_VERSION}.${EIGEN3_MAJOR_VERSION}.${EIGEN3_MINOR_VERSION}) + if(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) + set(EIGEN3_VERSION_OK FALSE) + else(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) + set(EIGEN3_VERSION_OK TRUE) + endif(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) + + if(NOT EIGEN3_VERSION_OK) + + message(STATUS "Eigen3 version ${EIGEN3_VERSION} found in ${EIGEN3_INCLUDE_DIR}, " + "but at least version ${Eigen3_FIND_VERSION} is required") + endif(NOT EIGEN3_VERSION_OK) +endmacro(_eigen3_check_version) + +if (EIGEN3_INCLUDE_DIR) + + # in cache already + _eigen3_check_version() + set(EIGEN3_FOUND ${EIGEN3_VERSION_OK}) + +else (EIGEN3_INCLUDE_DIR) + + find_path(EIGEN3_INCLUDE_DIR NAMES signature_of_eigen3_matrix_library + PATHS + ${CMAKE_INSTALL_PREFIX}/include + ${KDE4_INCLUDE_DIR} + PATH_SUFFIXES eigen3 eigen + ) + + if(EIGEN3_INCLUDE_DIR) + _eigen3_check_version() + endif(EIGEN3_INCLUDE_DIR) + + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(Eigen3 DEFAULT_MSG EIGEN3_INCLUDE_DIR EIGEN3_VERSION_OK) + + mark_as_advanced(EIGEN3_INCLUDE_DIR) + +endif(EIGEN3_INCLUDE_DIR) + diff --git a/bench/btl/libs/eigen2/CMakeLists.txt b/bench/btl/libs/eigen2/CMakeLists.txt deleted file mode 100644 index eb1659be9..000000000 --- a/bench/btl/libs/eigen2/CMakeLists.txt +++ /dev/null @@ -1,57 +0,0 @@ - -find_package(Eigen) -if (EIGEN_FOUND) - - include_directories(${EIGEN_INCLUDE_DIR}) - btl_add_bench(btl_eigen3_linear main_linear.cpp) - btl_add_bench(btl_eigen3_vecmat main_vecmat.cpp) - btl_add_bench(btl_eigen3_matmat main_matmat.cpp) - btl_add_bench(btl_eigen3_adv main_adv.cpp ) - - btl_add_target_property(btl_eigen3_linear COMPILE_FLAGS "-fno-exceptions -DBTL_PREFIX=eigen3") - btl_add_target_property(btl_eigen3_vecmat COMPILE_FLAGS "-fno-exceptions -DBTL_PREFIX=eigen3") - btl_add_target_property(btl_eigen3_matmat COMPILE_FLAGS "-fno-exceptions -DBTL_PREFIX=eigen3") - btl_add_target_property(btl_eigen3_adv COMPILE_FLAGS "-fno-exceptions -DBTL_PREFIX=eigen3") - - 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_eigen3_nogccvec_linear main_linear.cpp) - btl_add_bench(btl_eigen3_nogccvec_vecmat main_vecmat.cpp) - btl_add_bench(btl_eigen3_nogccvec_matmat main_matmat.cpp) - btl_add_bench(btl_eigen3_nogccvec_adv main_adv.cpp ) - - btl_add_target_property(btl_eigen3_nogccvec_linear COMPILE_FLAGS "-fno-exceptions -fno-tree-vectorize -DBTL_PREFIX=eigen3_nogccvec") - btl_add_target_property(btl_eigen3_nogccvec_vecmat COMPILE_FLAGS "-fno-exceptions -fno-tree-vectorize -DBTL_PREFIX=eigen3_nogccvec") - btl_add_target_property(btl_eigen3_nogccvec_matmat COMPILE_FLAGS "-fno-exceptions -fno-tree-vectorize -DBTL_PREFIX=eigen3_nogccvec") - btl_add_target_property(btl_eigen3_nogccvec_adv COMPILE_FLAGS "-fno-exceptions -fno-tree-vectorize -DBTL_PREFIX=eigen3_nogccvec") - endif() - - - if(NOT BTL_NOVEC) - btl_add_bench(btl_eigen3_novec_linear main_linear.cpp) - btl_add_bench(btl_eigen3_novec_vecmat main_vecmat.cpp) - btl_add_bench(btl_eigen3_novec_matmat main_matmat.cpp) - btl_add_bench(btl_eigen3_novec_adv main_adv.cpp ) - btl_add_target_property(btl_eigen3_novec_linear COMPILE_FLAGS "-fno-exceptions -DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=eigen3_novec") - btl_add_target_property(btl_eigen3_novec_vecmat COMPILE_FLAGS "-fno-exceptions -DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=eigen3_novec") - btl_add_target_property(btl_eigen3_novec_matmat COMPILE_FLAGS "-fno-exceptions -DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=eigen3_novec") - btl_add_target_property(btl_eigen3_novec_adv COMPILE_FLAGS "-fno-exceptions -DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=eigen3_novec") - -# if(BUILD_btl_eigen3_adv) -# target_link_libraries(btl_eigen3_adv ${MKL_LIBRARIES}) -# endif(BUILD_btl_eigen3_adv) - - endif(NOT BTL_NOVEC) - - btl_add_bench(btl_tiny_eigen3 btl_tiny_eigen3.cpp OFF) - - if(NOT BTL_NOVEC) - btl_add_bench(btl_tiny_eigen3_novec btl_tiny_eigen3.cpp OFF) - btl_add_target_property(btl_tiny_eigen3_novec COMPILE_FLAGS "-DBTL_PREFIX=eigen3_tiny") - - if(BUILD_btl_tiny_eigen3_novec) - btl_add_target_property(btl_tiny_eigen3_novec COMPILE_FLAGS "-DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=eigen3_tiny_novec") - endif(BUILD_btl_tiny_eigen3_novec) - endif(NOT BTL_NOVEC) - -endif (EIGEN_FOUND) diff --git a/bench/btl/libs/eigen2/btl_tiny_eigen2.cpp b/bench/btl/libs/eigen2/btl_tiny_eigen2.cpp deleted file mode 100644 index 0e2c32ff9..000000000 --- a/bench/btl/libs/eigen2/btl_tiny_eigen2.cpp +++ /dev/null @@ -1,46 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "eigen2_interface.hh" -#include "static/bench_static.hh" -#include "action_matrix_vector_product.hh" -#include "action_matrix_matrix_product.hh" -#include "action_axpy.hh" -#include "action_lu_solve.hh" -#include "action_ata_product.hh" -#include "action_aat_product.hh" -#include "action_atv_product.hh" -#include "action_cholesky.hh" -#include "action_trisolve.hh" - -BTL_MAIN; - -int main() -{ - - bench_static(); - bench_static(); - bench_static(); - bench_static(); - bench_static(); - bench_static(); - - return 0; -} - - diff --git a/bench/btl/libs/eigen2/eigen2_LU_solve_interface.hh b/bench/btl/libs/eigen2/eigen2_LU_solve_interface.hh deleted file mode 100644 index dcb9f567f..000000000 --- a/bench/btl/libs/eigen2/eigen2_LU_solve_interface.hh +++ /dev/null @@ -1,192 +0,0 @@ -//===================================================== -// File : blitz_LU_solve_interface.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:31 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef BLITZ_LU_SOLVE_INTERFACE_HH -#define BLITZ_LU_SOLVE_INTERFACE_HH - -#include "blitz/array.h" -#include - -BZ_USING_NAMESPACE(blitz) - -template -class blitz_LU_solve_interface : public blitz_interface -{ - -public : - - typedef typename blitz_interface::gene_matrix gene_matrix; - typedef typename blitz_interface::gene_vector gene_vector; - - typedef blitz::Array Pivot_Vector; - - inline static void new_Pivot_Vector(Pivot_Vector & pivot,int N) - { - - pivot.resize(N); - - } - - inline static void free_Pivot_Vector(Pivot_Vector & pivot) - { - - return; - - } - - - static inline real matrix_vector_product_sliced(const gene_matrix & A, gene_vector B, int row, int col_start, int col_end) - { - - real somme=0.; - - for (int j=col_start ; j=big ) big = abs( LU( i, j ) ) ; - } - if( big==0. ) { - INFOS( "blitz_LU_factor::Singular matrix" ) ; - exit( 0 ) ; - } - ImplicitScaling( i ) = 1./big ; - } - // Loop over columns of Crout's method : - for( int j=0; j=big ) { - dum = ImplicitScaling( i )*abs( theSum ) ; - big = dum ; - index_max = i ; - } - } - // Interchanging rows and the scale factor : - if( j!=index_max ) { - for( int k=0; k=0; i-- ) { - theSum = X( i ) ; - // theSum = B( i ) ; - theSum -= matrix_vector_product_sliced(LU, X, i, i+1, N) ; - // theSum -= sum( LU( i, Range( i+1, toEnd ) )*X( Range( i+1, toEnd ) ) ) ; - // theSum -= sum( LU( i, Range( i+1, toEnd ) )*B( Range( i+1, toEnd ) ) ) ; - // Store a component of the solution vector : - X( i ) = theSum/LU( i, i ) ; - // B( i ) = theSum/LU( i, i ) ; - } - - } - -}; - -#endif diff --git a/bench/btl/libs/eigen2/eigen2_interface.hh b/bench/btl/libs/eigen2/eigen2_interface.hh deleted file mode 100644 index ae280008b..000000000 --- a/bench/btl/libs/eigen2/eigen2_interface.hh +++ /dev/null @@ -1,239 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef EIGEN2_INTERFACE_HH -#define EIGEN2_INTERFACE_HH - -#include -#include -#include "btl.hh" - -using namespace Eigen; - -template -class eigen2_interface -{ - -public : - - enum {IsFixedSize = (SIZE!=Dynamic)}; - - typedef real real_type; - - typedef std::vector stl_vector; - typedef std::vector stl_matrix; - - typedef Eigen::Matrix gene_matrix; - typedef Eigen::Matrix gene_vector; - - static inline std::string name( void ) - { - return EIGEN_MAKESTRING(BTL_PREFIX); - } - - static void free_matrix(gene_matrix & A, int N) {} - - static void free_vector(gene_vector & B) {} - - static BTL_DONT_INLINE void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){ - A.resize(A_stl[0].size(), A_stl.size()); - - for (int j=0; j() * B); -// internal::product_selfadjoint_vector(N,A.data(),N, B.data(), 1, X.data(), 1); - } - - template static void triassign(Dest& dst, const Src& src) - { - typedef typename Dest::Scalar Scalar; - typedef typename internal::packet_traits::type Packet; - const int PacketSize = sizeof(Packet)/sizeof(Scalar); - int size = dst.cols(); - for(int j=0; j(j, index, src); - else - dst.template copyPacket(index, j, src); - } - - // do the non-vectorizable part of the assignment - for (int index = alignedEnd; index(N,A.data(),N, X.data(), 1, Y.data(), 1, -1); - for(int j=0; j(c,s)); - } - - static inline void atv_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N){ - X.noalias() = (A.transpose()*B); - } - - static inline void axpy(real coef, const gene_vector & X, gene_vector & Y, int N){ - Y += coef * X; - } - - static inline void axpby(real a, const gene_vector & X, real b, gene_vector & Y, int N){ - Y = a*X + b*Y; - } - - static EIGEN_DONT_INLINE void copy_matrix(const gene_matrix & source, gene_matrix & cible, int N){ - cible = source; - } - - static EIGEN_DONT_INLINE void copy_vector(const gene_vector & source, gene_vector & cible, int N){ - cible = source; - } - - static inline void trisolve_lower(const gene_matrix & L, const gene_vector& B, gene_vector& X, int N){ - X = L.template triangularView().solve(B); - } - - static inline void trisolve_lower_matrix(const gene_matrix & L, const gene_matrix& B, gene_matrix& X, int N){ - X = L.template triangularView().solve(B); - } - - static inline void trmm(const gene_matrix & L, const gene_matrix& B, gene_matrix& X, int N){ - X = L.template triangularView() * B; - } - - static inline void cholesky(const gene_matrix & X, gene_matrix & C, int N){ - C = X; - internal::llt_inplace::blocked(C); - //C = X.llt().matrixL(); -// C = X; -// Cholesky::computeInPlace(C); -// Cholesky::computeInPlaceBlock(C); - } - - static inline void lu_decomp(const gene_matrix & X, gene_matrix & C, int N){ - C = X.fullPivLu().matrixLU(); - } - - static inline void partial_lu_decomp(const gene_matrix & X, gene_matrix & C, int N){ - Matrix piv(N); - DenseIndex nb; - C = X; - internal::partial_lu_inplace(C,piv,nb); -// C = X.partialPivLu().matrixLU(); - } - - static inline void tridiagonalization(const gene_matrix & X, gene_matrix & C, int N){ - typename Tridiagonalization::CoeffVectorType aux(N-1); - C = X; - internal::tridiagonalization_inplace(C, aux); - } - - static inline void hessenberg(const gene_matrix & X, gene_matrix & C, int N){ - C = HessenbergDecomposition(X).packedMatrix(); - } - - - -}; - -#endif diff --git a/bench/btl/libs/eigen2/main_adv.cpp b/bench/btl/libs/eigen2/main_adv.cpp deleted file mode 100644 index 1f429626d..000000000 --- a/bench/btl/libs/eigen2/main_adv.cpp +++ /dev/null @@ -1,44 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "eigen2_interface.hh" -#include "bench.hh" -#include "action_trisolve.hh" -#include "action_trisolve_matrix.hh" -#include "action_cholesky.hh" -#include "action_hessenberg.hh" -#include "action_lu_decomp.hh" -#include "action_partial_lu.hh" - -BTL_MAIN; - -int main() -{ - bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - - bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - - return 0; -} - - diff --git a/bench/btl/libs/eigen2/main_linear.cpp b/bench/btl/libs/eigen2/main_linear.cpp deleted file mode 100644 index 35dce7b5c..000000000 --- a/bench/btl/libs/eigen2/main_linear.cpp +++ /dev/null @@ -1,35 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "eigen2_interface.hh" -#include "bench.hh" -#include "basic_actions.hh" - -BTL_MAIN; - -int main() -{ - - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - - return 0; -} - - diff --git a/bench/btl/libs/eigen2/main_matmat.cpp b/bench/btl/libs/eigen2/main_matmat.cpp deleted file mode 100644 index ac3fe8d3e..000000000 --- a/bench/btl/libs/eigen2/main_matmat.cpp +++ /dev/null @@ -1,35 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "eigen2_interface.hh" -#include "bench.hh" -#include "basic_actions.hh" - -BTL_MAIN; - -int main() -{ - bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - - return 0; -} - - diff --git a/bench/btl/libs/eigen2/main_vecmat.cpp b/bench/btl/libs/eigen2/main_vecmat.cpp deleted file mode 100644 index 50c0669a0..000000000 --- a/bench/btl/libs/eigen2/main_vecmat.cpp +++ /dev/null @@ -1,36 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "eigen2_interface.hh" -#include "bench.hh" -#include "basic_actions.hh" - -BTL_MAIN; - -int main() -{ - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); - - return 0; -} - - diff --git a/bench/btl/libs/eigen3/CMakeLists.txt b/bench/btl/libs/eigen3/CMakeLists.txt new file mode 100644 index 000000000..334eb14a8 --- /dev/null +++ b/bench/btl/libs/eigen3/CMakeLists.txt @@ -0,0 +1,57 @@ + +find_package(Eigen3) +if (EIGEN3_FOUND) + + include_directories(${EIGEN3_INCLUDE_DIR}) + btl_add_bench(btl_eigen3_linear main_linear.cpp) + btl_add_bench(btl_eigen3_vecmat main_vecmat.cpp) + btl_add_bench(btl_eigen3_matmat main_matmat.cpp) + btl_add_bench(btl_eigen3_adv main_adv.cpp ) + + btl_add_target_property(btl_eigen3_linear COMPILE_FLAGS "-fno-exceptions -DBTL_PREFIX=eigen3") + btl_add_target_property(btl_eigen3_vecmat COMPILE_FLAGS "-fno-exceptions -DBTL_PREFIX=eigen3") + btl_add_target_property(btl_eigen3_matmat COMPILE_FLAGS "-fno-exceptions -DBTL_PREFIX=eigen3") + btl_add_target_property(btl_eigen3_adv COMPILE_FLAGS "-fno-exceptions -DBTL_PREFIX=eigen3") + + 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_eigen3_nogccvec_linear main_linear.cpp) + btl_add_bench(btl_eigen3_nogccvec_vecmat main_vecmat.cpp) + btl_add_bench(btl_eigen3_nogccvec_matmat main_matmat.cpp) + btl_add_bench(btl_eigen3_nogccvec_adv main_adv.cpp ) + + btl_add_target_property(btl_eigen3_nogccvec_linear COMPILE_FLAGS "-fno-exceptions -fno-tree-vectorize -DBTL_PREFIX=eigen3_nogccvec") + btl_add_target_property(btl_eigen3_nogccvec_vecmat COMPILE_FLAGS "-fno-exceptions -fno-tree-vectorize -DBTL_PREFIX=eigen3_nogccvec") + btl_add_target_property(btl_eigen3_nogccvec_matmat COMPILE_FLAGS "-fno-exceptions -fno-tree-vectorize -DBTL_PREFIX=eigen3_nogccvec") + btl_add_target_property(btl_eigen3_nogccvec_adv COMPILE_FLAGS "-fno-exceptions -fno-tree-vectorize -DBTL_PREFIX=eigen3_nogccvec") + endif() + + + if(NOT BTL_NOVEC) + btl_add_bench(btl_eigen3_novec_linear main_linear.cpp) + btl_add_bench(btl_eigen3_novec_vecmat main_vecmat.cpp) + btl_add_bench(btl_eigen3_novec_matmat main_matmat.cpp) + btl_add_bench(btl_eigen3_novec_adv main_adv.cpp ) + btl_add_target_property(btl_eigen3_novec_linear COMPILE_FLAGS "-fno-exceptions -DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=eigen3_novec") + btl_add_target_property(btl_eigen3_novec_vecmat COMPILE_FLAGS "-fno-exceptions -DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=eigen3_novec") + btl_add_target_property(btl_eigen3_novec_matmat COMPILE_FLAGS "-fno-exceptions -DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=eigen3_novec") + btl_add_target_property(btl_eigen3_novec_adv COMPILE_FLAGS "-fno-exceptions -DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=eigen3_novec") + +# if(BUILD_btl_eigen3_adv) +# target_link_libraries(btl_eigen3_adv ${MKL_LIBRARIES}) +# endif(BUILD_btl_eigen3_adv) + + endif(NOT BTL_NOVEC) + + btl_add_bench(btl_tiny_eigen3 btl_tiny_eigen3.cpp OFF) + + if(NOT BTL_NOVEC) + btl_add_bench(btl_tiny_eigen3_novec btl_tiny_eigen3.cpp OFF) + btl_add_target_property(btl_tiny_eigen3_novec COMPILE_FLAGS "-DBTL_PREFIX=eigen3_tiny") + + if(BUILD_btl_tiny_eigen3_novec) + btl_add_target_property(btl_tiny_eigen3_novec COMPILE_FLAGS "-DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=eigen3_tiny_novec") + endif(BUILD_btl_tiny_eigen3_novec) + endif(NOT BTL_NOVEC) + +endif (EIGEN3_FOUND) diff --git a/bench/btl/libs/eigen3/btl_tiny_eigen3.cpp b/bench/btl/libs/eigen3/btl_tiny_eigen3.cpp new file mode 100644 index 000000000..d1515be84 --- /dev/null +++ b/bench/btl/libs/eigen3/btl_tiny_eigen3.cpp @@ -0,0 +1,46 @@ +//===================================================== +// Copyright (C) 2008 Gael Guennebaud +//===================================================== +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +#include "utilities.h" +#include "eigen3_interface.hh" +#include "static/bench_static.hh" +#include "action_matrix_vector_product.hh" +#include "action_matrix_matrix_product.hh" +#include "action_axpy.hh" +#include "action_lu_solve.hh" +#include "action_ata_product.hh" +#include "action_aat_product.hh" +#include "action_atv_product.hh" +#include "action_cholesky.hh" +#include "action_trisolve.hh" + +BTL_MAIN; + +int main() +{ + + bench_static(); + bench_static(); + bench_static(); + bench_static(); + bench_static(); + bench_static(); + + return 0; +} + + diff --git a/bench/btl/libs/eigen3/eigen3_interface.hh b/bench/btl/libs/eigen3/eigen3_interface.hh new file mode 100644 index 000000000..bd5eb4b6b --- /dev/null +++ b/bench/btl/libs/eigen3/eigen3_interface.hh @@ -0,0 +1,239 @@ +//===================================================== +// Copyright (C) 2008 Gael Guennebaud +//===================================================== +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +#ifndef EIGEN3_INTERFACE_HH +#define EIGEN3_INTERFACE_HH + +#include +#include +#include "btl.hh" + +using namespace Eigen; + +template +class eigen3_interface +{ + +public : + + enum {IsFixedSize = (SIZE!=Dynamic)}; + + typedef real real_type; + + typedef std::vector stl_vector; + typedef std::vector stl_matrix; + + typedef Eigen::Matrix gene_matrix; + typedef Eigen::Matrix gene_vector; + + static inline std::string name( void ) + { + return EIGEN_MAKESTRING(BTL_PREFIX); + } + + static void free_matrix(gene_matrix & A, int N) {} + + static void free_vector(gene_vector & B) {} + + static BTL_DONT_INLINE void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){ + A.resize(A_stl[0].size(), A_stl.size()); + + for (int j=0; j() * B); +// internal::product_selfadjoint_vector(N,A.data(),N, B.data(), 1, X.data(), 1); + } + + template static void triassign(Dest& dst, const Src& src) + { + typedef typename Dest::Scalar Scalar; + typedef typename internal::packet_traits::type Packet; + const int PacketSize = sizeof(Packet)/sizeof(Scalar); + int size = dst.cols(); + for(int j=0; j(j, index, src); + else + dst.template copyPacket(index, j, src); + } + + // do the non-vectorizable part of the assignment + for (int index = alignedEnd; index(N,A.data(),N, X.data(), 1, Y.data(), 1, -1); + for(int j=0; j(c,s)); + } + + static inline void atv_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N){ + X.noalias() = (A.transpose()*B); + } + + static inline void axpy(real coef, const gene_vector & X, gene_vector & Y, int N){ + Y += coef * X; + } + + static inline void axpby(real a, const gene_vector & X, real b, gene_vector & Y, int N){ + Y = a*X + b*Y; + } + + static EIGEN_DONT_INLINE void copy_matrix(const gene_matrix & source, gene_matrix & cible, int N){ + cible = source; + } + + static EIGEN_DONT_INLINE void copy_vector(const gene_vector & source, gene_vector & cible, int N){ + cible = source; + } + + static inline void trisolve_lower(const gene_matrix & L, const gene_vector& B, gene_vector& X, int N){ + X = L.template triangularView().solve(B); + } + + static inline void trisolve_lower_matrix(const gene_matrix & L, const gene_matrix& B, gene_matrix& X, int N){ + X = L.template triangularView().solve(B); + } + + static inline void trmm(const gene_matrix & L, const gene_matrix& B, gene_matrix& X, int N){ + X = L.template triangularView() * B; + } + + static inline void cholesky(const gene_matrix & X, gene_matrix & C, int N){ + C = X; + internal::llt_inplace::blocked(C); + //C = X.llt().matrixL(); +// C = X; +// Cholesky::computeInPlace(C); +// Cholesky::computeInPlaceBlock(C); + } + + static inline void lu_decomp(const gene_matrix & X, gene_matrix & C, int N){ + C = X.fullPivLu().matrixLU(); + } + + static inline void partial_lu_decomp(const gene_matrix & X, gene_matrix & C, int N){ + Matrix piv(N); + DenseIndex nb; + C = X; + internal::partial_lu_inplace(C,piv,nb); +// C = X.partialPivLu().matrixLU(); + } + + static inline void tridiagonalization(const gene_matrix & X, gene_matrix & C, int N){ + typename Tridiagonalization::CoeffVectorType aux(N-1); + C = X; + internal::tridiagonalization_inplace(C, aux); + } + + static inline void hessenberg(const gene_matrix & X, gene_matrix & C, int N){ + C = HessenbergDecomposition(X).packedMatrix(); + } + + + +}; + +#endif diff --git a/bench/btl/libs/eigen3/main_adv.cpp b/bench/btl/libs/eigen3/main_adv.cpp new file mode 100644 index 000000000..efe5857e4 --- /dev/null +++ b/bench/btl/libs/eigen3/main_adv.cpp @@ -0,0 +1,44 @@ +//===================================================== +// Copyright (C) 2008 Gael Guennebaud +//===================================================== +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +#include "utilities.h" +#include "eigen3_interface.hh" +#include "bench.hh" +#include "action_trisolve.hh" +#include "action_trisolve_matrix.hh" +#include "action_cholesky.hh" +#include "action_hessenberg.hh" +#include "action_lu_decomp.hh" +#include "action_partial_lu.hh" + +BTL_MAIN; + +int main() +{ + bench > >(MIN_MM,MAX_MM,NB_POINT); + bench > >(MIN_MM,MAX_MM,NB_POINT); + bench > >(MIN_MM,MAX_MM,NB_POINT); + bench > >(MIN_MM,MAX_MM,NB_POINT); + bench > >(MIN_MM,MAX_MM,NB_POINT); + + bench > >(MIN_MM,MAX_MM,NB_POINT); + bench > >(MIN_MM,MAX_MM,NB_POINT); + + return 0; +} + + diff --git a/bench/btl/libs/eigen3/main_linear.cpp b/bench/btl/libs/eigen3/main_linear.cpp new file mode 100644 index 000000000..e8538b7d0 --- /dev/null +++ b/bench/btl/libs/eigen3/main_linear.cpp @@ -0,0 +1,35 @@ +//===================================================== +// Copyright (C) 2008 Gael Guennebaud +//===================================================== +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +#include "utilities.h" +#include "eigen3_interface.hh" +#include "bench.hh" +#include "basic_actions.hh" + +BTL_MAIN; + +int main() +{ + + bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); + bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); + bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); + + return 0; +} + + diff --git a/bench/btl/libs/eigen3/main_matmat.cpp b/bench/btl/libs/eigen3/main_matmat.cpp new file mode 100644 index 000000000..052810a16 --- /dev/null +++ b/bench/btl/libs/eigen3/main_matmat.cpp @@ -0,0 +1,35 @@ +//===================================================== +// Copyright (C) 2008 Gael Guennebaud +//===================================================== +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +#include "utilities.h" +#include "eigen3_interface.hh" +#include "bench.hh" +#include "basic_actions.hh" + +BTL_MAIN; + +int main() +{ + bench > >(MIN_MM,MAX_MM,NB_POINT); + bench > >(MIN_MM,MAX_MM,NB_POINT); + bench > >(MIN_MM,MAX_MM,NB_POINT); + bench > >(MIN_MM,MAX_MM,NB_POINT); + + return 0; +} + + diff --git a/bench/btl/libs/eigen3/main_vecmat.cpp b/bench/btl/libs/eigen3/main_vecmat.cpp new file mode 100644 index 000000000..0dda444cf --- /dev/null +++ b/bench/btl/libs/eigen3/main_vecmat.cpp @@ -0,0 +1,36 @@ +//===================================================== +// Copyright (C) 2008 Gael Guennebaud +//===================================================== +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +#include "utilities.h" +#include "eigen3_interface.hh" +#include "bench.hh" +#include "basic_actions.hh" + +BTL_MAIN; + +int main() +{ + bench > >(MIN_MV,MAX_MV,NB_POINT); + bench > >(MIN_MV,MAX_MV,NB_POINT); + bench > >(MIN_MV,MAX_MV,NB_POINT); + bench > >(MIN_MV,MAX_MV,NB_POINT); + bench > >(MIN_MV,MAX_MV,NB_POINT); + + return 0; +} + + -- cgit v1.2.3