aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/btl
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2008-07-10 18:28:50 +0000
committerGravatar Gael Guennebaud <g.gael@free.fr>2008-07-10 18:28:50 +0000
commit6f71ef8277405d268032f7c3bcaf316c7422c133 (patch)
tree419a7d46b9db1a64a6e94756ca70d1801196b061 /bench/btl
parent2b53fd4d53c87d41e26e4f178431f904ca2a42cd (diff)
resurrected tvmet, added mt4, intel's MKL and handcoded vectorized backends
in the benchmark suite
Diffstat (limited to 'bench/btl')
-rw-r--r--bench/btl/CMakeLists.txt83
-rw-r--r--bench/btl/cmake/FindMKL.cmake53
-rw-r--r--bench/btl/cmake/FindMTL4.cmake31
-rw-r--r--bench/btl/cmake/FindTvmet.cmake32
-rwxr-xr-xbench/btl/data/mk_new_gnuplot.sh22
-rw-r--r--bench/btl/generic_bench/btl.hh2
-rwxr-xr-xbench/btl/generic_bench/timers/portable_timer.hh52
-rw-r--r--bench/btl/libs/ATLAS/ATLAS_LU_solve_interface.hh118
-rw-r--r--bench/btl/libs/ATLAS/ATLAS_interface.hh120
-rw-r--r--bench/btl/libs/ATLAS/CMakeLists.txt4
-rw-r--r--bench/btl/libs/ATLAS/titi.txt33
-rwxr-xr-xbench/btl/libs/C/C_interface.hh23
-rw-r--r--bench/btl/libs/C/main.cpp2
-rw-r--r--bench/btl/libs/C_BLAS/CMakeLists.txt22
-rw-r--r--bench/btl/libs/C_BLAS/C_BLAS_interface.hh7
-rw-r--r--bench/btl/libs/C_BLAS/main.cpp3
-rw-r--r--bench/btl/libs/INTEL_BLAS/INTEL_BLAS_LU_solve_interface.hh127
-rw-r--r--bench/btl/libs/INTEL_BLAS/INTEL_BLAS_interface.hh95
-rwxr-xr-xbench/btl/libs/INTEL_BLAS/config.sh2
-rw-r--r--bench/btl/libs/blitz/CMakeLists.txt19
-rw-r--r--bench/btl/libs/blitz/btl_blitz.cpp (renamed from bench/btl/libs/blitz/main.cpp)0
-rw-r--r--bench/btl/libs/blitz/btl_tiny_blitz.cpp (renamed from bench/btl/libs/tiny_blitz/main.cpp)0
-rw-r--r--bench/btl/libs/blitz/tiny_blitz_interface.hh (renamed from bench/btl/libs/tiny_blitz/tiny_blitz_interface.hh)0
-rw-r--r--bench/btl/libs/eigen2/CMakeLists.txt28
-rw-r--r--bench/btl/libs/eigen2/btl_tiny_eigen2.cpp (renamed from bench/btl/libs/ATLAS/main.cpp)31
-rw-r--r--bench/btl/libs/eigen2/main.cpp2
-rw-r--r--bench/btl/libs/f77/f77_interface.hh34
-rw-r--r--bench/btl/libs/gmm/CMakeLists.txt7
-rw-r--r--bench/btl/libs/hand_vec/CMakeLists.txt12
-rwxr-xr-xbench/btl/libs/hand_vec/hand_vec_interface.hh238
-rw-r--r--bench/btl/libs/hand_vec/main.cpp (renamed from bench/btl/libs/INTEL_BLAS/main.cpp)35
-rw-r--r--bench/btl/libs/mtl4/CMakeLists.txt6
-rw-r--r--bench/btl/libs/mtl4/main.cpp4
-rw-r--r--bench/btl/libs/mtl4/mtl4_interface.hh4
-rw-r--r--bench/btl/libs/tiny_blitz/CMakeLists.txt4
-rw-r--r--bench/btl/libs/tvmet/CMakeLists.txt7
-rw-r--r--bench/btl/libs/ublas/CMakeLists.txt8
37 files changed, 599 insertions, 671 deletions
diff --git a/bench/btl/CMakeLists.txt b/bench/btl/CMakeLists.txt
index 636129b03..17931f988 100644
--- a/bench/btl/CMakeLists.txt
+++ b/bench/btl/CMakeLists.txt
@@ -28,56 +28,47 @@ include_directories(
MACRO(BTL_ADD_BENCH targetname)
- ADD_EXECUTABLE(${ARGV})
- ADD_TEST(${targetname} "${targetname}")
+
+ foreach(_current_var ${ARGN})
+ set(_last_var ${_current_var})
+ endforeach(_current_var)
+
+ set(_sources ${ARGN})
+ list(LENGTH _sources _argn_length)
+
+ list(REMOVE_ITEM _sources ON OFF TRUE FALSE)
+
+ list(LENGTH _sources _src_length)
+
+ if (${_argn_length} EQUAL ${_src_length})
+ set(_last_var ON)
+ endif (${_argn_length} EQUAL ${_src_length})
+
+ OPTION(BUILD_${targetname} "Build benchmark ${targetname}" ${_last_var})
+
+ message(STATUS ${targetname} " : " ${ARGN} " => " ${_sources} " => " ${_last_var})
+
+ IF(BUILD_${targetname})
+ ADD_EXECUTABLE(${targetname} ${_sources})
+ ADD_TEST(${targetname} "${targetname}")
+ ENDIF(BUILD_${targetname})
+
ENDMACRO(BTL_ADD_BENCH)
ENABLE_TESTING()
-# Eigen2
-find_package(Eigen2)
-if (EIGEN2_FOUND)
- macro_optional_add_subdirectory(libs/eigen2 ON)
- macro_optional_add_subdirectory(libs/tiny_eigen2 OFF)
-endif (EIGEN2_FOUND)
-
-# GMM++
-find_package(GMM)
-if (GMM_FOUND)
- macro_optional_add_subdirectory(libs/gmm ON)
-endif (GMM_FOUND)
-
-# Boost
-find_package(Boost)
-if (Boost_FOUND)
- include_directories(${Boost_INCLUDE_DIRS})
- macro_optional_add_subdirectory(libs/ublas ON)
-endif (Boost_FOUND)
-
-# blitz
-find_package(Blitz)
-if (BLITZ_FOUND)
- macro_optional_add_subdirectory(libs/blitz ON)
- macro_optional_add_subdirectory(libs/tiny_blitz OFF)
-endif (BLITZ_FOUND)
-
-# tvmet
-find_package(Tvmet)
-if (TVMET_FOUND)
- macro_optional_add_subdirectory(libs/tvmet OFF)
-endif (TVMET_FOUND)
-
-# cblas
-find_package(CBLAS)
-if (CBLAS_FOUND)
- macro_optional_add_subdirectory(libs/C_BLAS ON)
-endif (CBLAS_FOUND)
-
-
-macro_optional_add_subdirectory(libs/f77 ON)
-macro_optional_add_subdirectory(libs/C ON)
-macro_optional_add_subdirectory(libs/STL ON)
-macro_optional_add_subdirectory(libs/STL_algo ON)
+add_subdirectory(libs/eigen2)
+add_subdirectory(libs/hand_vec)
+add_subdirectory(libs/gmm)
+add_subdirectory(libs/mtl4)
+add_subdirectory(libs/ublas)
+add_subdirectory(libs/blitz)
+add_subdirectory(libs/tvmet)
+add_subdirectory(libs/C_BLAS)
+add_subdirectory(libs/f77)
+add_subdirectory(libs/C)
+add_subdirectory(libs/STL)
+add_subdirectory(libs/STL_algo)
add_subdirectory(data)
diff --git a/bench/btl/cmake/FindMKL.cmake b/bench/btl/cmake/FindMKL.cmake
new file mode 100644
index 000000000..60190eff0
--- /dev/null
+++ b/bench/btl/cmake/FindMKL.cmake
@@ -0,0 +1,53 @@
+
+if (MKL_INCLUDES AND MKL_LIBRARIES)
+ set(CBLAS_FIND_QUIETLY TRUE)
+endif (MKL_INCLUDES AND MKL_LIBRARIES)
+
+find_path(MKL_INCLUDES
+ NAMES
+ cblas.h
+ PATHS
+ $ENV{MKLDIR}/include
+ ${INCLUDE_INSTALL_DIR}
+)
+
+
+message(STATUS ${CMAKE_HOST_SYSTEM_PROCESSOR})
+
+if(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "x86_64")
+
+message(STATUS "64 bits")
+
+find_library(MKL_LIBRARIES
+ mkl_core
+ PATHS
+ $ENV{MKLLIB}
+ /opt/intel/mkl/*/lib/em64t
+ ${LIB_INSTALL_DIR}
+)
+
+if(MKL_LIBRARIES)
+set(MKL_LIBRARIES ${MKL_LIBRARIES} mkl_intel_lp64 mkl_sequential guide pthread)
+endif(MKL_LIBRARIES)
+
+message(STATUS ${MKL_LIBRARIES})
+
+else(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "x86_64")
+
+message(STATUS "32 bits")
+
+find_library(MKL_LIBRARIES
+ mkl_core mkl_intel mkl_sequential guide pthread
+ PATHS
+ $ENV{MKLLIB}
+ /opt/intel/mkl/*/lib/32
+ ${LIB_INSTALL_DIR}
+)
+
+endif(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "x86_64")
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(MKL DEFAULT_MSG
+ MKL_INCLUDES MKL_LIBRARIES)
+
+mark_as_advanced(MKL_INCLUDES MKL_LIBRARIES)
diff --git a/bench/btl/cmake/FindMTL4.cmake b/bench/btl/cmake/FindMTL4.cmake
new file mode 100644
index 000000000..83943fc2b
--- /dev/null
+++ b/bench/btl/cmake/FindMTL4.cmake
@@ -0,0 +1,31 @@
+# - Try to find eigen2 headers
+# Once done this will define
+#
+# MTL4_FOUND - system has eigen2 lib
+# MTL4_INCLUDE_DIR - the eigen2 include directory
+#
+# Copyright (C) 2008 Gael Guennebaud <g.gael@free.fr>
+# Adapted from FindEigen.cmake:
+# Copyright (c) 2006, 2007 Montel Laurent, <montel@kde.org>
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+
+if (MTL4_INCLUDE_DIR)
+
+ # in cache already
+ set(MTL4_FOUND TRUE)
+
+else (MTL4_INCLUDE_DIR)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(MTL4 DEFAULT_MSG MTL4_INCLUDE_DIR)
+
+find_path(MTL4_INCLUDE_DIR NAMES boost/numeric/mtl/mtl.hpp
+ PATHS
+ ${INCLUDE_INSTALL_DIR}
+ )
+
+mark_as_advanced(MTL4_INCLUDE_DIR)
+
+endif(MTL4_INCLUDE_DIR)
+
diff --git a/bench/btl/cmake/FindTvmet.cmake b/bench/btl/cmake/FindTvmet.cmake
new file mode 100644
index 000000000..d0704dbbe
--- /dev/null
+++ b/bench/btl/cmake/FindTvmet.cmake
@@ -0,0 +1,32 @@
+# - Try to find tvmet headers
+# Once done this will define
+#
+# TVMET_FOUND - system has tvmet lib
+# TVMET_INCLUDE_DIR - the tvmet include directory
+#
+# Copyright (C) 2008 Gael Guennebaud <g.gael@free.fr>
+# Adapted from FindEigen.cmake:
+# Copyright (c) 2006, 2007 Montel Laurent, <montel@kde.org>
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+
+if (TVMET_INCLUDE_DIR)
+
+ # in cache already
+ set(TVMET_FOUND TRUE)
+
+else (TVMET_INCLUDE_DIR)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Tvmet DEFAULT_MSG TVMET_INCLUDE_DIR)
+
+find_path(TVMET_INCLUDE_DIR NAMES tvmet/tvmet.h
+ PATHS
+ ${TVMETDIR}/
+ ${INCLUDE_INSTALL_DIR}
+ )
+
+mark_as_advanced(TVMET_INCLUDE_DIR)
+
+endif(TVMET_INCLUDE_DIR)
+
diff --git a/bench/btl/data/mk_new_gnuplot.sh b/bench/btl/data/mk_new_gnuplot.sh
index ba86b2884..5f8bd4e33 100755
--- a/bench/btl/data/mk_new_gnuplot.sh
+++ b/bench/btl/data/mk_new_gnuplot.sh
@@ -15,24 +15,26 @@ done
for FILE in $DATA_FILE
do
- if [ $FILE != $LAST ]
- then
- echo "'"$FILE"'" ",\\" >> $WHAT.gnuplot
- fi
+ if [ $FILE != $LAST ]
+ then
+ echo "'"$FILE"'" ",\\" >> $WHAT.gnuplot
+ fi
done
echo "'"$LAST"'" >> $WHAT.gnuplot
echo set term postscript color >> $WHAT.gnuplot
echo set output "'"../${DIR}/$WHAT.ps"'" >> $WHAT.gnuplot
-#echo set term pbm color >> $WHAT.gnuplot
-#echo set output "'"../${DIR}/$WHAT.ppm"'" >> $WHAT.gnuplot
+# echo set term pdf color >> $WHAT.gnuplot
+# echo set output "'"../${DIR}/$WHAT.pdf"'" >> $WHAT.gnuplot
+# echo set term png truecolor size 1024,768 >> $WHAT.gnuplot
+# echo set output "'"../${DIR}/$WHAT.png"'" >> $WHAT.gnuplot
echo plot \\ >> $WHAT.gnuplot
for FILE in $DATA_FILE
do
- if [ $FILE != $LAST ]
- then
- echo "'"$FILE"'" ",\\" >> $WHAT.gnuplot
- fi
+ if [ $FILE != $LAST ]
+ then
+ echo "'"$FILE"'" ",\\" >> $WHAT.gnuplot
+ fi
done
echo "'"$LAST"'" >> $WHAT.gnuplot
diff --git a/bench/btl/generic_bench/btl.hh b/bench/btl/generic_bench/btl.hh
index 97b0dec7c..5b561b676 100644
--- a/bench/btl/generic_bench/btl.hh
+++ b/bench/btl/generic_bench/btl.hh
@@ -18,8 +18,10 @@
//
#ifndef BTL_HH
#define BTL_HH
+
#include "bench_parameter.hh"
#include <iostream>
+#include <algorithm>
#include <vector>
#include <string>
#include "utilities.h"
diff --git a/bench/btl/generic_bench/timers/portable_timer.hh b/bench/btl/generic_bench/timers/portable_timer.hh
index 3b7c5266b..7d4059464 100755
--- a/bench/btl/generic_bench/timers/portable_timer.hh
+++ b/bench/btl/generic_bench/timers/portable_timer.hh
@@ -3,12 +3,12 @@
// Author : L. Plagne <laurent.plagne@edf.fr)> from boost lib
// Copyright (C) EDF R&D, lun sep 30 14:23:17 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
@@ -16,18 +16,22 @@
// 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.
-//
+//
// simple_time extracted from the boost library
-//
+//
#ifndef _PORTABLE_TIMER_HH
#define _PORTABLE_TIMER_HH
+#include <ctime>
+#include <cstdlib>
+
#include <time.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
#include <sys/times.h>
+
#define USEC_IN_SEC 1000000
@@ -45,37 +49,37 @@ class Portable_Timer
_utime_usec_stop(-1)
{
}
-
- void start()
- {
-
+
+ void start()
+ {
+
int status=getrusage(RUSAGE_SELF, &resourcesUsage) ;
-
- _start_time = std::clock();
+
+ _start_time = std::clock();
_utime_sec_start = resourcesUsage.ru_utime.tv_sec ;
_utime_usec_start = resourcesUsage.ru_utime.tv_usec ;
}
-
- void stop()
- {
-
+
+ void stop()
+ {
+
int status=getrusage(RUSAGE_SELF, &resourcesUsage) ;
-
- _stop_time = std::clock();
-
+
+ _stop_time = std::clock();
+
_utime_sec_stop = resourcesUsage.ru_utime.tv_sec ;
_utime_usec_stop = resourcesUsage.ru_utime.tv_usec ;
-
+
}
double elapsed()
{
- return double(_stop_time - _start_time) / CLOCKS_PER_SEC;
+ return double(_stop_time - _start_time) / CLOCKS_PER_SEC;
}
-
+
double user_time()
{
long tot_utime_sec=_utime_sec_stop-_utime_sec_start;
@@ -83,17 +87,17 @@ class Portable_Timer
return double(tot_utime_sec)+ double(tot_utime_usec)/double(USEC_IN_SEC) ;
}
-
+
private:
struct rusage resourcesUsage ;
-
+
long _utime_sec_start ;
long _utime_usec_start ;
-
+
long _utime_sec_stop ;
long _utime_usec_stop ;
-
+
std::clock_t _start_time;
std::clock_t _stop_time;
diff --git a/bench/btl/libs/ATLAS/ATLAS_LU_solve_interface.hh b/bench/btl/libs/ATLAS/ATLAS_LU_solve_interface.hh
deleted file mode 100644
index 83732b4a2..000000000
--- a/bench/btl/libs/ATLAS/ATLAS_LU_solve_interface.hh
+++ /dev/null
@@ -1,118 +0,0 @@
-//=====================================================
-// File : ATLAS_LU_solve_interface.hh
-// Author : L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D, lun sep 30 14:23:22 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 ATLAS_LU_solve_interface_HH
-#define ATLAS_LU_solve_interface_HH
-#include "ATLAS_interface.hh"
-extern "C"
-{
-#include <atlas_level1.h>
-#include <atlas_level2.h>
-#include <atlas_level3.h>
-#include "cblas.h"
-#include <atlas_lapack.h>
-
-}
-
-template<class real>
-class ATLAS_LU_solve_interface : public ATLAS_interface<real>
-{
-public :
-
- typedef typename ATLAS_interface<real>::gene_matrix gene_matrix;
- typedef typename ATLAS_interface<real>::gene_vector gene_vector;
-
- typedef int * Pivot_Vector;
-
- inline static void new_Pivot_Vector(Pivot_Vector & pivot, int N)
- {
-
- pivot = new int[N];
-
- }
-
- inline static void free_Pivot_Vector(Pivot_Vector & pivot)
- {
-
- delete pivot;
-
- }
-
-
- inline static void LU_factor(gene_matrix & LU, Pivot_Vector & pivot, int N)
- {
-
- int error=ATL_dgetrf(CblasColMajor,N,N,LU,N,pivot);
-
- }
-
- inline static void LU_solve(const gene_matrix & LU, const Pivot_Vector pivot, const gene_vector &B, gene_vector X, int N)
- {
-
- copy_vector(B,X,N);
- ATL_dgetrs(CblasColMajor,CblasNoTrans,N,1,LU,N,pivot,X,N);
-
- }
-
-};
-
-template<>
-class ATLAS_LU_solve_interface<float> : public ATLAS_interface<float>
-{
-public :
-
- typedef int * Pivot_Vector;
-
- inline static void new_Pivot_Vector(Pivot_Vector & pivot, int N)
- {
-
- pivot = new int[N];
-
- }
-
- inline static void free_Pivot_Vector(Pivot_Vector & pivot)
- {
-
- delete pivot;
-
- }
-
-
- inline static void LU_factor(gene_matrix & LU, Pivot_Vector & pivot, int N)
- {
-
- int error=ATL_sgetrf(CblasColMajor,N,N,LU,N,pivot);
-
- }
-
- inline static void LU_solve(const gene_matrix & LU, const Pivot_Vector pivot, const gene_vector &B, gene_vector X, int N)
- {
-
- copy_vector(B,X,N);
- ATL_sgetrs(CblasColMajor,CblasNoTrans,N,1,LU,N,pivot,X,N);
-
- }
-
-};
-
-
-#endif
-
-
-
diff --git a/bench/btl/libs/ATLAS/ATLAS_interface.hh b/bench/btl/libs/ATLAS/ATLAS_interface.hh
deleted file mode 100644
index a0e93854b..000000000
--- a/bench/btl/libs/ATLAS/ATLAS_interface.hh
+++ /dev/null
@@ -1,120 +0,0 @@
-//=====================================================
-// File : ATLAS_interface.hh
-// Author : L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D, lun sep 30 14:23:21 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 ATLAS_PRODUIT_MATRICE_VECTEUR_HH
-#define ATLAS_PRODUIT_MATRICE_VECTEUR_HH
-#include "f77_interface_base.hh"
-#include <string>
-extern "C"
-{
-#include <atlas_level1.h>
-#include <atlas_level2.h>
-#include <atlas_level3.h>
-#include "cblas.h"
-
-}
-
-template<class real>
-class ATLAS_interface : public f77_interface_base<real>
-{
-public :
-
- typedef typename f77_interface_base<real>::gene_matrix gene_matrix;
- typedef typename f77_interface_base<real>::gene_vector gene_vector;
-
- static inline std::string name( void )
- {
- return "ATLAS";
- }
-
- static inline void matrix_vector_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N)
- {
-
- ATL_dgemv(CblasNoTrans,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)
- {
- ATL_dgemm(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)
- {
- ATL_dgemm(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)
- {
- ATL_dgemm(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)
- {
- ATL_daxpy(N,coef,X,1,Y,1);
- }
-};
-
-template<>
-class ATLAS_interface<float> : public f77_interface_base<float>
-{
-public :
-
- static inline std::string name( void )
- {
- return "ATLAS";
- }
-
- static inline void matrix_vector_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N)
- {
-
- ATL_sgemv(CblasNoTrans,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)
- {
- ATL_sgemm(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)
- {
- ATL_sgemm(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)
- {
- ATL_sgemm(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)
- {
- ATL_saxpy(N,coef,X,1,Y,1);
- }
-};
-
-
-#endif
-
-
-
diff --git a/bench/btl/libs/ATLAS/CMakeLists.txt b/bench/btl/libs/ATLAS/CMakeLists.txt
deleted file mode 100644
index e047b4e08..000000000
--- a/bench/btl/libs/ATLAS/CMakeLists.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-
-include_directories(${BLITZ_INCLUDES})
-add_executable(btl_blitz main.cpp)
-target_link_libraries(btl_blitz ${BLITZ_LIBRARIES})
diff --git a/bench/btl/libs/ATLAS/titi.txt b/bench/btl/libs/ATLAS/titi.txt
deleted file mode 100644
index 470501f6f..000000000
--- a/bench/btl/libs/ATLAS/titi.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-Bonjour à tous,
-
-Une dizaine de candidats Neptune se sont déjà déclarés pour la formation C++
-(sur la base de 2 jours/semaine pendant 1 mois).
-
-Il faut faire une proposition de date pour la formation. Les vacances scolaires zone C (Paris)
-se terminent le 22 avril (au matin) nous pourrions commencer ce jour.
-
-A priori il me semble que deux jours consécutifs soient préférables. Je propose les mardi et mercredi
-de chaque semaine. Sachant qu'il y a 2 jeudi (1er et 8 mai) consécutifs qui sont fériés.
-
-Dans cette hypothèse les dates de formation seraient :
-
-Mardi 22 avril (Vincent/Marc)
-Mercredi 23 avril (Marc)
-
-Mardi 29 avril (Marc/Antoine)
-Mercredi 30 avril (Antoine)
-
-Mardi 6 mai (Antoine)
-Mercredi 7 mai (Antoine)
-
-Mardi 13 mai (Laurent)
-Mercredi 14 mai (Laurent)
-
-J'ai mis entre parenthèse les intervenants principaux (on doit choisir le deuxième formateur pour chaque session).
-
-Qu'en pensez-vous ?
-
-Je dois toujours présenter un programme, pouvez-vous me donner vos programmes respectifs...?
-
-
-Laurent
diff --git a/bench/btl/libs/C/C_interface.hh b/bench/btl/libs/C/C_interface.hh
index b688f18fa..d6092517d 100755
--- a/bench/btl/libs/C/C_interface.hh
+++ b/bench/btl/libs/C/C_interface.hh
@@ -34,11 +34,32 @@ public :
static inline void matrix_vector_product(const gene_matrix & A, const gene_vector & B, gene_vector & X, int N)
{
+// for (int i=0;i<N;i++)
+// {
+// real somme = 0.0;
+// for (int j=0;j<N;j++)
+// somme += A[j*N+i] * B[j];
+// X[i] = somme;
+// }
+ for (int i=0;i<N;i++)
+ X[i] = 0;
+ for (int i=0;i<N;i++)
+ {
+ real tmp = B[i];
+ int iN = i*N;
+ for (int j=0;j<N;j++)
+ X[j] += tmp * A[j+iN];
+ }
+ }
+
+ static inline void atv_product(const gene_matrix & A, const gene_vector & B, gene_vector & X, int N)
+ {
for (int i=0;i<N;i++)
{
+ int iN = i*N;
real somme = 0.0;
for (int j=0;j<N;j++)
- somme += A[j*N+i] * B[j];
+ somme += A[iN+j] * B[j];
X[i] = somme;
}
}
diff --git a/bench/btl/libs/C/main.cpp b/bench/btl/libs/C/main.cpp
index 60ff2b4d6..f0a0e5c65 100644
--- a/bench/btl/libs/C/main.cpp
+++ b/bench/btl/libs/C/main.cpp
@@ -21,6 +21,7 @@
#include "bench.hh"
#include "C_interface.hh"
#include "action_matrix_vector_product.hh"
+#include "action_atv_product.hh"
#include "action_matrix_matrix_product.hh"
#include "action_axpy.hh"
#include "action_ata_product.hh"
@@ -34,6 +35,7 @@ int main()
{
bench<Action_matrix_vector_product<C_interface<REAL_TYPE> > >(MIN_MV,MAX_MV,NB_POINT);
+ bench<Action_atv_product<C_interface<REAL_TYPE> > >(MIN_MV,MAX_MV,NB_POINT);
bench<Action_matrix_matrix_product<C_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
bench<Action_aat_product<C_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
bench<Action_ata_product<C_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
diff --git a/bench/btl/libs/C_BLAS/CMakeLists.txt b/bench/btl/libs/C_BLAS/CMakeLists.txt
index 9654bf8ad..73e5cc46b 100644
--- a/bench/btl/libs/C_BLAS/CMakeLists.txt
+++ b/bench/btl/libs/C_BLAS/CMakeLists.txt
@@ -1,4 +1,20 @@
-include_directories(${CBLAS_INCLUDES} ${PROJECT_SOURCE_DIR}/libs/f77)
-btl_add_bench(btl_cblas main.cpp)
-target_link_libraries(btl_cblas ${CBLAS_LIBRARIES})
+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(MKL)
+if (MKL_FOUND)
+ include_directories(${MKL_INCLUDES} ${PROJECT_SOURCE_DIR}/libs/f77)
+ 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")
+ 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 e637c0e5e..eadbf0dd2 100644
--- a/bench/btl/libs/C_BLAS/C_BLAS_interface.hh
+++ b/bench/btl/libs/C_BLAS/C_BLAS_interface.hh
@@ -27,6 +27,9 @@ extern "C"
#include "cblas.h"
}
+#define MAKE_STRING2(S) #S
+#define MAKE_STRING(S) MAKE_STRING2(S)
+
template<class real>
class C_BLAS_interface : public f77_interface_base<real>
{
@@ -37,7 +40,7 @@ public :
static inline std::string name( void )
{
- return "C_BLAS";
+ return MAKE_STRING(CBLASNAME);
}
static inline void matrix_vector_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N)
@@ -84,7 +87,7 @@ public :
static inline std::string name( void )
{
- return "C_BLAS";
+ return MAKE_STRING(CBLASNAME);
}
static inline void matrix_vector_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N)
diff --git a/bench/btl/libs/C_BLAS/main.cpp b/bench/btl/libs/C_BLAS/main.cpp
index 97a0c6ca1..bef5d30be 100644
--- a/bench/btl/libs/C_BLAS/main.cpp
+++ b/bench/btl/libs/C_BLAS/main.cpp
@@ -22,6 +22,7 @@
#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"
@@ -36,6 +37,8 @@ int main()
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);
diff --git a/bench/btl/libs/INTEL_BLAS/INTEL_BLAS_LU_solve_interface.hh b/bench/btl/libs/INTEL_BLAS/INTEL_BLAS_LU_solve_interface.hh
deleted file mode 100644
index 616ab4720..000000000
--- a/bench/btl/libs/INTEL_BLAS/INTEL_BLAS_LU_solve_interface.hh
+++ /dev/null
@@ -1,127 +0,0 @@
-//=====================================================
-// File : INTEL_BLAS_LU_solve_interface.hh
-// Author : L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D, lun sep 30 14:23:29 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 INTEL_BLAS_LU_solve_interface_HH
-#define INTEL_BLAS_LU_solve_interface_HH
-#include "INTEL_BLAS_interface.hh"
-extern "C"
-{
-// void dgetrf_(int *M, int *N, double *A, int *LDA, int *IPIV, int *INFO);
-// void dgetrs_(char *TRANS, int *N, int *NRHS, double *A, int *LDA, int *IPIV, double *B, int *LDB, int *INFO);
-// void sgetrf_(int *M, int *N, float *A, int *LDA, int *IPIV, int *INFO);
-// void sgetrs_(char *TRANS, int *N, int *NRHS, float *A, int *LDA, int *IPIV, double *B, int *LDB, int *INFO);
-#include "mkl_lapack.h"
-
-}
-
-template<class real>
-class INTEL_BLAS_LU_solve_interface : public INTEL_BLAS_interface<real>
-{
-public :
-
- typedef typename INTEL_BLAS_interface<real>::gene_matrix gene_matrix;
- typedef typename INTEL_BLAS_interface<real>::gene_vector gene_vector;
-
- typedef int * Pivot_Vector;
-
- inline static void new_Pivot_Vector(Pivot_Vector & pivot, int N)
- {
-
- pivot = new int[N];
-
- }
-
- inline static void free_Pivot_Vector(Pivot_Vector & pivot)
- {
-
- delete pivot;
-
- }
-
-
- inline static void LU_factor(gene_matrix & LU, Pivot_Vector & pivot, int N)
- {
-
- int info;
- DGETRF(&N,&N,LU,&N,pivot,&info);
-
- }
-
- inline static void LU_solve(const gene_matrix & LU, const Pivot_Vector pivot, const gene_vector &B, gene_vector X, int N)
- {
- int info;
- int one=1;
-
- char * transpose="N";
-
- copy_vector(B,X,N);
- DGETRS(transpose,&N,&one,LU,&N,pivot,X,&N,&info);
-
- }
-
-};
-
-template<>
-class INTEL_BLAS_LU_solve_interface<float> : public INTEL_BLAS_interface<float>
-{
-public :
-
- typedef int * Pivot_Vector;
-
- inline static void new_Pivot_Vector(Pivot_Vector & pivot, int N)
- {
-
- pivot = new int[N];
-
- }
-
- inline static void free_Pivot_Vector(Pivot_Vector & pivot)
- {
-
- delete pivot;
-
- }
-
-
- inline static void LU_factor(gene_matrix & LU, Pivot_Vector & pivot, int N)
- {
-
- int info;
- SGETRF(&N,&N,LU,&N,pivot,&info);
-
- }
-
- inline static void LU_solve(const gene_matrix & LU, const Pivot_Vector pivot, const gene_vector &B, gene_vector X, int N)
- {
-
- char * transpose="N";
- int info;
- int one=1;
- copy_vector(B,X,N);
- SGETRS(transpose,&N,&one,LU,&N,pivot,X,&N,&info);
-
- }
-
-};
-
-
-#endif
-
-
-
diff --git a/bench/btl/libs/INTEL_BLAS/INTEL_BLAS_interface.hh b/bench/btl/libs/INTEL_BLAS/INTEL_BLAS_interface.hh
deleted file mode 100644
index 778aaf8b1..000000000
--- a/bench/btl/libs/INTEL_BLAS/INTEL_BLAS_interface.hh
+++ /dev/null
@@ -1,95 +0,0 @@
-//=====================================================
-// File : INTEL_BLAS_interface.hh
-// Author : L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D, lun sep 30 14:23:29 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 INTEL_BLAS_PRODUIT_MATRICE_VECTEUR_HH
-#define INTEL_BLAS_PRODUIT_MATRICE_VECTEUR_HH
-#include "f77_interface.hh"
-extern "C"
-{
-#include "mkl_cblas.h"
-}
-
-template<class real>
-class INTEL_BLAS_interface : public f77_interface_base<real>
-{
-public :
-
- typedef typename f77_interface_base<real>::gene_matrix gene_matrix;
- typedef typename f77_interface_base<real>::gene_vector gene_vector;
-
- static inline std::string name( void ) { return "INTEL_BLAS"; }
-
- static inline void matrix_vector_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N) {
- cblas_dgemv(CblasColMajor,CblasNoTrans,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) {
- cblas_dgemm(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) {
- 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) {
- 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) {
- cblas_daxpy(N,coef,X,1,Y,1);
- }
-
-};
-
-template<>
-class INTEL_BLAS_interface<float> : public f77_interface_base<float>
-{
-public :
-
- static inline std::string name() { return "INTEL_BLAS"; }
-
- static inline void matrix_vector_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N) {
- // cblas_sgemv(CblasNoTrans,N,N,1.0,A,N,B,1,0.0,X,1);
- cblas_sgemv(CblasColMajor,CblasNoTrans,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) {
- 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) {
- 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) {
- 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) {
- cblas_saxpy(N,coef,X,1,Y,1);
- }
-
-};
-
-
-#endif
-
-
-
diff --git a/bench/btl/libs/INTEL_BLAS/config.sh b/bench/btl/libs/INTEL_BLAS/config.sh
deleted file mode 100755
index 0ba48fe90..000000000
--- a/bench/btl/libs/INTEL_BLAS/config.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#! /bin/bash
-export LD_LIBRARY_PATH=/opt/intel/mkl/lib/32:${LD_LIBRARY_PATH}
diff --git a/bench/btl/libs/blitz/CMakeLists.txt b/bench/btl/libs/blitz/CMakeLists.txt
index 1cb71c36d..880ab7338 100644
--- a/bench/btl/libs/blitz/CMakeLists.txt
+++ b/bench/btl/libs/blitz/CMakeLists.txt
@@ -1,4 +1,17 @@
-include_directories(${BLITZ_INCLUDES})
-btl_add_bench(btl_blitz main.cpp)
-target_link_libraries(btl_blitz ${BLITZ_LIBRARIES})
+find_package(Blitz)
+
+if (BLITZ_FOUND)
+ include_directories(${BLITZ_INCLUDES})
+
+ btl_add_bench(btl_blitz btl_blitz.cpp)
+ if (BUILD_btl_blitz)
+ target_link_libraries(btl_blitz ${BLITZ_LIBRARIES})
+ endif (BUILD_btl_blitz)
+
+ btl_add_bench(btl_tiny_blitz btl_tiny_blitz.cpp OFF)
+ if (BUILD_btl_tiny_blitz)
+ target_link_libraries(btl_tiny_blitz ${BLITZ_LIBRARIES})
+ endif (BUILD_btl_tiny_blitz)
+
+endif (BLITZ_FOUND)
diff --git a/bench/btl/libs/blitz/main.cpp b/bench/btl/libs/blitz/btl_blitz.cpp
index 16d2b5951..16d2b5951 100644
--- a/bench/btl/libs/blitz/main.cpp
+++ b/bench/btl/libs/blitz/btl_blitz.cpp
diff --git a/bench/btl/libs/tiny_blitz/main.cpp b/bench/btl/libs/blitz/btl_tiny_blitz.cpp
index eff3c1881..eff3c1881 100644
--- a/bench/btl/libs/tiny_blitz/main.cpp
+++ b/bench/btl/libs/blitz/btl_tiny_blitz.cpp
diff --git a/bench/btl/libs/tiny_blitz/tiny_blitz_interface.hh b/bench/btl/libs/blitz/tiny_blitz_interface.hh
index 6b26db72d..6b26db72d 100644
--- a/bench/btl/libs/tiny_blitz/tiny_blitz_interface.hh
+++ b/bench/btl/libs/blitz/tiny_blitz_interface.hh
diff --git a/bench/btl/libs/eigen2/CMakeLists.txt b/bench/btl/libs/eigen2/CMakeLists.txt
index 6ac0ab24a..ba55ef5f0 100644
--- a/bench/btl/libs/eigen2/CMakeLists.txt
+++ b/bench/btl/libs/eigen2/CMakeLists.txt
@@ -1,8 +1,24 @@
-include_directories(${EIGEN2_INCLUDE_DIR})
-btl_add_bench(btl_eigen2 main.cpp)
+find_package(Eigen2)
+if (EIGEN2_FOUND)
-IF(NOT BTL_NOVEC)
- btl_add_bench(btl_eigen2_novec main.cpp)
- set_target_properties(btl_eigen2_novec PROPERTIES COMPILE_FLAGS "-DEIGEN_DONT_VECTORIZE")
-ENDIF(NOT BTL_NOVEC)
+ include_directories(${EIGEN2_INCLUDE_DIR})
+ btl_add_bench(btl_eigen2 main.cpp)
+
+ IF(NOT BTL_NOVEC)
+ btl_add_bench(btl_eigen2_novec main.cpp)
+ if(BUILD_btl_eigen2_novec)
+ set_target_properties(btl_eigen2_novec PROPERTIES COMPILE_FLAGS "-DEIGEN_DONT_VECTORIZE")
+ endif(BUILD_btl_eigen2_novec)
+ ENDIF(NOT BTL_NOVEC)
+
+ btl_add_bench(btl_tiny_eigen2 btl_tiny_eigen2.cpp OFF)
+
+ IF(NOT BTL_NOVEC)
+ btl_add_bench(btl_tiny_eigen2_novec btl_tiny_eigen2.cpp OFF)
+ if(BUILD_btl_tiny_eigen2_novec)
+ set_target_properties(btl_tiny_eigen2_novec PROPERTIES COMPILE_FLAGS "-DEIGEN_DONT_VECTORIZE")
+ endif(BUILD_btl_tiny_eigen2_novec)
+ ENDIF(NOT BTL_NOVEC)
+
+endif (EIGEN2_FOUND)
diff --git a/bench/btl/libs/ATLAS/main.cpp b/bench/btl/libs/eigen2/btl_tiny_eigen2.cpp
index 2383a7367..26c448df0 100644
--- a/bench/btl/libs/ATLAS/main.cpp
+++ b/bench/btl/libs/eigen2/btl_tiny_eigen2.cpp
@@ -1,14 +1,12 @@
//=====================================================
-// File : main.cpp
-// Author : L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D, lun sep 30 14:23:21 CEST 2002
+// Copyright (C) 2008 Gael Guennebaud <g.gael@free.fr>
//=====================================================
-//
+//
// 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
@@ -16,32 +14,27 @@
// 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 "ATLAS_interface.hh"
-#include "ATLAS_LU_solve_interface.hh"
-#include "bench.hh"
+#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"
+BTL_MAIN;
int main()
{
- bench<Action_axpy<ATLAS_interface<REAL_TYPE> > >(MIN_AXPY,MAX_AXPY,NB_POINT);
- bench<Action_matrix_vector_product<ATLAS_interface<REAL_TYPE> > >(MIN_MV,MAX_MV,NB_POINT);
-
- bench<Action_matrix_matrix_product<ATLAS_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
-
- bench<Action_ata_product<ATLAS_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
-
- bench<Action_aat_product<ATLAS_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
-
- // bench<Action_lu_solve<ATLAS_LU_solve_interface<REAL_TYPE> > >(MIN_LU,MAX_LU,NB_POINT);
+ bench_static<Action_axpy,eigen2_interface>();
+ bench_static<Action_matrix_matrix_product,eigen2_interface>();
+ bench_static<Action_matrix_vector_product,eigen2_interface>();
+ bench_static<Action_atv_product,eigen2_interface>();
return 0;
}
diff --git a/bench/btl/libs/eigen2/main.cpp b/bench/btl/libs/eigen2/main.cpp
index dbd6a1764..7f96c8476 100644
--- a/bench/btl/libs/eigen2/main.cpp
+++ b/bench/btl/libs/eigen2/main.cpp
@@ -33,7 +33,7 @@ int main()
bench<Action_matrix_vector_product<eigen2_interface<REAL_TYPE> > >(MIN_MV,MAX_MV,NB_POINT);
bench<Action_atv_product<eigen2_interface<REAL_TYPE> > >(MIN_MV,MAX_MV,NB_POINT);
-// bench<Action_axpy<eigen2_interface<REAL_TYPE> > >(MIN_AXPY,MAX_AXPY,NB_POINT);
+ bench<Action_axpy<eigen2_interface<REAL_TYPE> > >(MIN_AXPY,MAX_AXPY,NB_POINT);
// bench<Action_matrix_matrix_product<eigen2_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
// bench<Action_ata_product<eigen2_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
// bench<Action_aat_product<eigen2_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
diff --git a/bench/btl/libs/f77/f77_interface.hh b/bench/btl/libs/f77/f77_interface.hh
index 0208b42c2..c8c8ee3a1 100644
--- a/bench/btl/libs/f77/f77_interface.hh
+++ b/bench/btl/libs/f77/f77_interface.hh
@@ -1,14 +1,14 @@
//=====================================================
// File : f77_interface.hh
-// Author : L. Plagne <laurent.plagne@edf.fr)>
+// Author : L. Plagne <laurent.plagne@edf.fr)>
// Copyright (C) EDF R&D, lun sep 30 14:23:24 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
@@ -16,7 +16,7 @@
// 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 F77_INTERFACE_HH
#define F77_INTERFACE_HH
#include "f77_interface_base.hh"
@@ -55,39 +55,31 @@ public :
static inline void matrix_vector_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N)
{
-
dmxv_(A,&N,B,&N,X);
-
}
static inline void matrix_matrix_product(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N)
{
-
dmxm_(A,&N,B,&N,X,&N);
-
}
static inline void ata_product(gene_matrix & A, gene_matrix & X, int N)
{
-
data_(A,X,&N);
-
}
static inline void aat_product(gene_matrix & A, gene_matrix & X, int N)
{
-
daat_(A,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)
{
int one=1;
daxpy_(&N,&coef,X,Y);
}
-
+
};
@@ -104,34 +96,26 @@ public :
static inline void matrix_vector_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N)
{
-
smxv_(A,&N,B,&N,X);
-
}
static inline void matrix_matrix_product(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N)
{
-
smxm_(A,&N,B,&N,X,&N);
-
}
static inline void ata_product(gene_matrix & A, gene_matrix & X, int N)
{
-
sata_(A,X,&N);
-
}
static inline void aat_product(gene_matrix & A, gene_matrix & X, int N)
{
-
saat_(A,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)
{
saxpy_(&N,&coef,X,Y);
}
diff --git a/bench/btl/libs/gmm/CMakeLists.txt b/bench/btl/libs/gmm/CMakeLists.txt
index 98759e8b6..bc2586243 100644
--- a/bench/btl/libs/gmm/CMakeLists.txt
+++ b/bench/btl/libs/gmm/CMakeLists.txt
@@ -1,3 +1,6 @@
-include_directories(${GMM_INCLUDES})
-btl_add_bench(btl_gmm main.cpp)
+find_package(GMM)
+if (GMM_FOUND)
+ include_directories(${GMM_INCLUDES})
+ btl_add_bench(btl_gmm main.cpp)
+endif (GMM_FOUND)
diff --git a/bench/btl/libs/hand_vec/CMakeLists.txt b/bench/btl/libs/hand_vec/CMakeLists.txt
new file mode 100644
index 000000000..afab9140e
--- /dev/null
+++ b/bench/btl/libs/hand_vec/CMakeLists.txt
@@ -0,0 +1,12 @@
+find_package(Eigen2)
+if (EIGEN2_FOUND)
+
+ include_directories(${EIGEN2_INCLUDE_DIR} ${PROJECT_SOURCE_DIR}/libs/f77)
+ btl_add_bench(btl_hand_vec main.cpp)
+
+ btl_add_bench(btl_hand_peeling main.cpp)
+ if (BUILD_btl_hand_peeling)
+ set_target_properties(btl_hand_peeling PROPERTIES COMPILE_FLAGS "-DPEELING")
+ endif (BUILD_btl_hand_peeling)
+
+endif (EIGEN2_FOUND) \ No newline at end of file
diff --git a/bench/btl/libs/hand_vec/hand_vec_interface.hh b/bench/btl/libs/hand_vec/hand_vec_interface.hh
new file mode 100755
index 000000000..5291aac55
--- /dev/null
+++ b/bench/btl/libs/hand_vec/hand_vec_interface.hh
@@ -0,0 +1,238 @@
+//=====================================================
+// File : hand_vec_interface.hh
+// Copyright (C) 2008 Gael Guennebaud <g.gael@free.fr>
+//=====================================================
+//
+// 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 HAND_VEC_INTERFACE_HH
+#define HAND_VEC_INTERFACE_HH
+
+#include <Eigen/Core>
+#include "f77_interface.hh"
+
+using namespace Eigen;
+
+template<class real>
+class hand_vec_interface : public f77_interface_base<real> {
+
+public :
+
+ typedef typename ei_packet_traits<real>::type Packet;
+ static const int PacketSize = ei_packet_traits<real>::size;
+
+ typedef typename f77_interface_base<real>::stl_matrix stl_matrix;
+ typedef typename f77_interface_base<real>::stl_vector stl_vector;
+ typedef typename f77_interface_base<real>::gene_matrix gene_matrix;
+ typedef typename f77_interface_base<real>::gene_vector gene_vector;
+
+ static void free_matrix(gene_matrix & A, int N){
+ ei_aligned_free(A);
+ }
+
+ static void free_vector(gene_vector & B){
+ ei_aligned_free(B);
+ }
+
+ static inline void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){
+ int N = A_stl.size();
+ A = ei_aligned_malloc<real>(N*N);
+ for (int j=0;j<N;j++)
+ for (int i=0;i<N;i++)
+ A[i+N*j] = A_stl[j][i];
+ }
+
+ static inline void vector_from_stl(gene_vector & B, stl_vector & B_stl){
+ int N = B_stl.size();
+ B = ei_aligned_malloc<real>(N);
+ for (int i=0;i<N;i++)
+ B[i] = B_stl[i];
+ }
+
+ static inline std::string name() {
+ #ifdef PEELING
+ return "hand_vectorized_peeling";
+ #else
+ return "hand_vectorized";
+ #endif
+ }
+
+ static inline void matrix_vector_product(const gene_matrix & A, const gene_vector & B, gene_vector & X, int N)
+ {
+ int AN = (N/PacketSize)*PacketSize;
+ for (int i=0;i<N;i++)
+ X[i] = 0;
+ for (int i=0;i<N;i++)
+ {
+ real tmp = B[i];
+ Packet ptmp = ei_pset1(tmp);
+ int iN = i*N;
+ if (AN>0)
+ {
+ bool aligned = (iN % PacketSize) == 0;
+ if (aligned)
+ {
+ #ifdef PEELING
+ int ANP = (AN/(8*PacketSize))*8*PacketSize;
+ for (int j = 0;j<ANP;j+=PacketSize*8)
+ {
+ ei_pstore(&X[j], ei_padd(ei_pload(&X[j]), ei_pmul(ptmp,ei_pload(&A[j+iN]))));
+ ei_pstore(&X[j+PacketSize], ei_padd(ei_pload(&X[j+PacketSize]), ei_pmul(ptmp,ei_pload(&A[j+PacketSize+iN]))));
+ ei_pstore(&X[j+2*PacketSize], ei_padd(ei_pload(&X[j+2*PacketSize]), ei_pmul(ptmp,ei_pload(&A[j+2*PacketSize+iN]))));
+ ei_pstore(&X[j+3*PacketSize], ei_padd(ei_pload(&X[j+3*PacketSize]), ei_pmul(ptmp,ei_pload(&A[j+3*PacketSize+iN]))));
+ ei_pstore(&X[j+4*PacketSize], ei_padd(ei_pload(&X[j+4*PacketSize]), ei_pmul(ptmp,ei_pload(&A[j+4*PacketSize+iN]))));
+ ei_pstore(&X[j+5*PacketSize], ei_padd(ei_pload(&X[j+5*PacketSize]), ei_pmul(ptmp,ei_pload(&A[j+5*PacketSize+iN]))));
+ ei_pstore(&X[j+6*PacketSize], ei_padd(ei_pload(&X[j+6*PacketSize]), ei_pmul(ptmp,ei_pload(&A[j+6*PacketSize+iN]))));
+ ei_pstore(&X[j+7*PacketSize], ei_padd(ei_pload(&X[j+7*PacketSize]), ei_pmul(ptmp,ei_pload(&A[j+7*PacketSize+iN]))));
+ }
+ for (int j = ANP;j<AN;j+=PacketSize)
+ ei_pstore(&X[j], ei_padd(ei_pload(&X[j]), ei_pmul(ptmp,ei_pload(&A[j+iN]))));
+ #else
+ for (int j = 0;j<AN;j+=PacketSize)
+ ei_pstore(&X[j], ei_padd(ei_pload(&X[j]), ei_pmul(ptmp,ei_pload(&A[j+iN]))));
+ #endif
+ }
+ else
+ {
+ #ifdef PEELING
+ int ANP = (AN/(8*PacketSize))*8*PacketSize;
+ for (int j = 0;j<ANP;j+=PacketSize*8)
+ {
+ ei_pstore(&X[j], ei_padd(ei_pload(&X[j]), ei_pmul(ptmp,ei_ploadu(&A[j+iN]))));
+ ei_pstore(&X[j+PacketSize], ei_padd(ei_pload(&X[j+PacketSize]), ei_pmul(ptmp,ei_ploadu(&A[j+PacketSize+iN]))));
+ ei_pstore(&X[j+2*PacketSize], ei_padd(ei_pload(&X[j+2*PacketSize]), ei_pmul(ptmp,ei_ploadu(&A[j+2*PacketSize+iN]))));
+ ei_pstore(&X[j+3*PacketSize], ei_padd(ei_pload(&X[j+3*PacketSize]), ei_pmul(ptmp,ei_ploadu(&A[j+3*PacketSize+iN]))));
+ ei_pstore(&X[j+4*PacketSize], ei_padd(ei_pload(&X[j+4*PacketSize]), ei_pmul(ptmp,ei_ploadu(&A[j+4*PacketSize+iN]))));
+ ei_pstore(&X[j+5*PacketSize], ei_padd(ei_pload(&X[j+5*PacketSize]), ei_pmul(ptmp,ei_ploadu(&A[j+5*PacketSize+iN]))));
+ ei_pstore(&X[j+6*PacketSize], ei_padd(ei_pload(&X[j+6*PacketSize]), ei_pmul(ptmp,ei_ploadu(&A[j+6*PacketSize+iN]))));
+ ei_pstore(&X[j+7*PacketSize], ei_padd(ei_pload(&X[j+7*PacketSize]), ei_pmul(ptmp,ei_ploadu(&A[j+7*PacketSize+iN]))));
+ }
+ for (int j = ANP;j<AN;j+=PacketSize)
+ ei_pstore(&X[j], ei_padd(ei_pload(&X[j]), ei_pmul(ptmp,ei_ploadu(&A[j+iN]))));
+ #else
+ for (int j = 0;j<AN;j+=PacketSize)
+ ei_pstore(&X[j], ei_padd(ei_pload(&X[j]), ei_pmul(ptmp,ei_ploadu(&A[j+iN]))));
+ #endif
+ }
+ }
+ // process remaining scalars
+ for (int j=AN;j<N;j++)
+ X[j] += tmp * A[j+iN];
+ }
+ }
+
+ static inline void atv_product(const gene_matrix & A, const gene_vector & B, gene_vector & X, int N)
+ {
+ int AN = (N/PacketSize)*PacketSize;
+ for (int i=0;i<N;i++)
+ X[i] = 0;
+ for (int i=0;i<N;i++)
+ {
+ real tmp = 0;
+ Packet ptmp = ei_pset1(real(0));
+ int iN = i*N;
+ if (AN>0)
+ {
+ bool aligned = (iN % PacketSize) == 0;
+ if (aligned)
+ {
+ #ifdef PEELING
+ int ANP = (AN/(8*PacketSize))*8*PacketSize;
+ for (int j = 0;j<ANP;j+=PacketSize*8)
+ {
+ ptmp =
+ ei_padd(ei_pmul(ei_pload(&B[j]), ei_pload(&A[j+iN])),
+ ei_padd(ei_pmul(ei_pload(&B[j+PacketSize]), ei_pload(&A[j+PacketSize+iN])),
+ ei_padd(ei_pmul(ei_pload(&B[j+2*PacketSize]), ei_pload(&A[j+2*PacketSize+iN])),
+ ei_padd(ei_pmul(ei_pload(&B[j+3*PacketSize]), ei_pload(&A[j+3*PacketSize+iN])),
+ ei_padd(ei_pmul(ei_pload(&B[j+4*PacketSize]), ei_pload(&A[j+4*PacketSize+iN])),
+ ei_padd(ei_pmul(ei_pload(&B[j+5*PacketSize]), ei_pload(&A[j+5*PacketSize+iN])),
+ ei_padd(ei_pmul(ei_pload(&B[j+6*PacketSize]), ei_pload(&A[j+6*PacketSize+iN])),
+ ei_padd(ei_pmul(ei_pload(&B[j+7*PacketSize]), ei_pload(&A[j+7*PacketSize+iN])),
+ ptmp))))))));
+ }
+ for (int j = ANP;j<AN;j+=PacketSize)
+ ptmp = ei_padd(ptmp, ei_pmul(ei_pload(&B[j]), ei_pload(&A[j+iN])));
+ #else
+ for (int j = 0;j<AN;j+=PacketSize)
+ ptmp = ei_padd(ptmp, ei_pmul(ei_pload(&B[j]), ei_pload(&A[j+iN])));
+ #endif
+ }
+ else
+ {
+ #ifdef PEELING
+ int ANP = (AN/(8*PacketSize))*8*PacketSize;
+ for (int j = 0;j<ANP;j+=PacketSize*8)
+ {
+ ptmp =
+ ei_padd(ei_pmul(ei_pload(&B[j]), ei_ploadu(&A[j+iN])),
+ ei_padd(ei_pmul(ei_pload(&B[j+PacketSize]), ei_ploadu(&A[j+PacketSize+iN])),
+ ei_padd(ei_pmul(ei_pload(&B[j+2*PacketSize]), ei_ploadu(&A[j+2*PacketSize+iN])),
+ ei_padd(ei_pmul(ei_pload(&B[j+3*PacketSize]), ei_ploadu(&A[j+3*PacketSize+iN])),
+ ei_padd(ei_pmul(ei_pload(&B[j+4*PacketSize]), ei_ploadu(&A[j+4*PacketSize+iN])),
+ ei_padd(ei_pmul(ei_pload(&B[j+5*PacketSize]), ei_ploadu(&A[j+5*PacketSize+iN])),
+ ei_padd(ei_pmul(ei_pload(&B[j+6*PacketSize]), ei_ploadu(&A[j+6*PacketSize+iN])),
+ ei_padd(ei_pmul(ei_pload(&B[j+7*PacketSize]), ei_ploadu(&A[j+7*PacketSize+iN])),
+ ptmp))))))));
+ }
+ for (int j = ANP;j<AN;j+=PacketSize)
+ ptmp = ei_padd(ptmp, ei_pmul(ei_pload(&B[j]), ei_ploadu(&A[j+iN])));
+ #else
+ for (int j = 0;j<AN;j+=PacketSize)
+ ptmp = ei_padd(ptmp, ei_pmul(ei_pload(&B[j]), ei_ploadu(&A[j+iN])));
+ #endif
+ }
+ tmp = ei_predux(ptmp);
+ }
+ // process remaining scalars
+ for (int j=AN;j<N;j++)
+ tmp += B[j] * A[j+iN];
+ X[i] = tmp;
+ }
+ }
+
+ static inline void axpy(real coef, const gene_vector & X, gene_vector & Y, int N){
+ int AN = (N/PacketSize)*PacketSize;
+ if (AN>0)
+ {
+ Packet pcoef = ei_pset1(coef);
+ #ifdef PEELING
+ int ANP = (AN/(8*PacketSize))*8*PacketSize;
+ for (int j = 0;j<ANP;j+=PacketSize*8)
+ {
+ ei_pstore(&Y[j ], ei_padd(ei_pload(&Y[j ]), ei_pmul(pcoef,ei_pload(&X[j ]))));
+ ei_pstore(&Y[j+ PacketSize], ei_padd(ei_pload(&Y[j+ PacketSize]), ei_pmul(pcoef,ei_pload(&X[j+ PacketSize]))));
+ ei_pstore(&Y[j+2*PacketSize], ei_padd(ei_pload(&Y[j+2*PacketSize]), ei_pmul(pcoef,ei_pload(&X[j+2*PacketSize]))));
+ ei_pstore(&Y[j+3*PacketSize], ei_padd(ei_pload(&Y[j+3*PacketSize]), ei_pmul(pcoef,ei_pload(&X[j+3*PacketSize]))));
+ ei_pstore(&Y[j+4*PacketSize], ei_padd(ei_pload(&Y[j+4*PacketSize]), ei_pmul(pcoef,ei_pload(&X[j+4*PacketSize]))));
+ ei_pstore(&Y[j+5*PacketSize], ei_padd(ei_pload(&Y[j+5*PacketSize]), ei_pmul(pcoef,ei_pload(&X[j+5*PacketSize]))));
+ ei_pstore(&Y[j+6*PacketSize], ei_padd(ei_pload(&Y[j+6*PacketSize]), ei_pmul(pcoef,ei_pload(&X[j+6*PacketSize]))));
+ ei_pstore(&Y[j+7*PacketSize], ei_padd(ei_pload(&Y[j+7*PacketSize]), ei_pmul(pcoef,ei_pload(&X[j+7*PacketSize]))));
+ }
+ for (int j = ANP;j<AN;j+=PacketSize)
+ ei_pstore(&Y[j], ei_padd(ei_pload(&Y[j]), ei_pmul(pcoef,ei_pload(&X[j]))));
+ #else
+ for (int j = 0;j<AN;j+=PacketSize)
+ ei_pstore(&Y[j], ei_padd(ei_pload(&Y[j]), ei_pmul(pcoef,ei_pload(&X[j]))));
+ #endif
+ }
+ // process remaining scalars
+ for (int i=AN;i<N;i++)
+ Y[i] += coef * X[i];
+ }
+
+
+};
+
+#endif
diff --git a/bench/btl/libs/INTEL_BLAS/main.cpp b/bench/btl/libs/hand_vec/main.cpp
index b91d93470..19d45b2f1 100644
--- a/bench/btl/libs/INTEL_BLAS/main.cpp
+++ b/bench/btl/libs/hand_vec/main.cpp
@@ -1,14 +1,14 @@
//=====================================================
// File : main.cpp
-// Author : L. Plagne <laurent.plagne@edf.fr)>
-// Copyright (C) EDF R&D, lun sep 30 14:23:29 CEST 2002
+// Author : L. Plagne <laurent.plagne@edf.fr)>
+// Copyright (C) EDF R&D, lun sep 30 14:23:23 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
@@ -16,32 +16,31 @@
// 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 "INTEL_BLAS_interface.hh"
-#include "INTEL_BLAS_LU_solve_interface.hh"
#include "bench.hh"
+#include "hand_vec_interface.hh"
#include "action_matrix_vector_product.hh"
+#include "action_atv_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_lu_solve.hh"
+#include "timers/mixed_perf_analyzer.hh"
+
+BTL_MAIN;
int main()
{
- bench<Action_axpy<INTEL_BLAS_interface<REAL_TYPE> > >(MIN_AXPY,MAX_AXPY,NB_POINT);
-
- bench<Action_matrix_vector_product<INTEL_BLAS_interface<REAL_TYPE> > >(MIN_MV,MAX_MV,NB_POINT);
-
- bench<Action_matrix_matrix_product<INTEL_BLAS_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
-
- bench<Action_ata_product<INTEL_BLAS_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
-
- bench<Action_aat_product<INTEL_BLAS_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
+ bench<Action_matrix_vector_product<hand_vec_interface<REAL_TYPE> > >(MIN_MV,MAX_MV,NB_POINT);
+ bench<Action_atv_product<hand_vec_interface<REAL_TYPE> > >(MIN_MV,MAX_MV,NB_POINT);
+// bench<Action_matrix_matrix_product<hand_vec_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
+// bench<Action_aat_product<hand_vec_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
+// bench<Action_ata_product<hand_vec_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
+ bench<Action_axpy<hand_vec_interface<REAL_TYPE> > >(MIN_AXPY,MAX_AXPY,NB_POINT);
-// bench<Action_lu_solve<INTEL_BLAS_LU_solve_interface<REAL_TYPE> > >(MIN_LU,MAX_LU,NB_POINT);
return 0;
}
diff --git a/bench/btl/libs/mtl4/CMakeLists.txt b/bench/btl/libs/mtl4/CMakeLists.txt
new file mode 100644
index 000000000..14b47a808
--- /dev/null
+++ b/bench/btl/libs/mtl4/CMakeLists.txt
@@ -0,0 +1,6 @@
+
+find_package(MTL4)
+if (MTL4_FOUND)
+ include_directories(${MTL4_INCLUDE_DIR})
+ btl_add_bench(btl_mtl4 main.cpp)
+endif (MTL4_FOUND)
diff --git a/bench/btl/libs/mtl4/main.cpp b/bench/btl/libs/mtl4/main.cpp
index 17b200a90..8cf1f6fa9 100644
--- a/bench/btl/libs/mtl4/main.cpp
+++ b/bench/btl/libs/mtl4/main.cpp
@@ -35,8 +35,8 @@ int main()
bench<Action_matrix_vector_product<mtl4_interface<REAL_TYPE> > >(MIN_MV,MAX_MV,NB_POINT);
bench<Action_atv_product<mtl4_interface<REAL_TYPE> > >(MIN_MV,MAX_MV,NB_POINT);
bench<Action_matrix_matrix_product<mtl4_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
- bench<Action_ata_product<mtl4_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
- bench<Action_aat_product<mtl4_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
+// bench<Action_ata_product<mtl4_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
+// bench<Action_aat_product<mtl4_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
return 0;
}
diff --git a/bench/btl/libs/mtl4/mtl4_interface.hh b/bench/btl/libs/mtl4/mtl4_interface.hh
index 73ff565fc..5beb936db 100644
--- a/bench/btl/libs/mtl4/mtl4_interface.hh
+++ b/bench/btl/libs/mtl4/mtl4_interface.hh
@@ -88,11 +88,11 @@ public :
}
static inline void ata_product(const gene_matrix & A, gene_matrix & X, int N){
- X = (trans(A)*A);
+// X = (trans(A)*A);
}
static inline void aat_product(const gene_matrix & A, gene_matrix & X, int N){
- X = (A*trans(A));
+// X = (A*trans(A));
}
static inline void matrix_vector_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N){
diff --git a/bench/btl/libs/tiny_blitz/CMakeLists.txt b/bench/btl/libs/tiny_blitz/CMakeLists.txt
deleted file mode 100644
index e3e2625a7..000000000
--- a/bench/btl/libs/tiny_blitz/CMakeLists.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-
-include_directories(${BLITZ_INCLUDES})
-btl_add_bench(btl_tiny_blitz main.cpp)
-target_link_libraries(btl_tiny_blitz ${BLITZ_LIBRARIES})
diff --git a/bench/btl/libs/tvmet/CMakeLists.txt b/bench/btl/libs/tvmet/CMakeLists.txt
index 3e965069b..25b565b97 100644
--- a/bench/btl/libs/tvmet/CMakeLists.txt
+++ b/bench/btl/libs/tvmet/CMakeLists.txt
@@ -1,3 +1,6 @@
-include_directories(${TVMET_INCLUDE_DIR})
-add_executable(btl_tvmet main.cpp)
+find_package(Tvmet)
+if (TVMET_FOUND)
+ include_directories(${TVMET_INCLUDE_DIR})
+ btl_add_bench(btl_tvmet main.cpp OFF)
+endif (TVMET_FOUND)
diff --git a/bench/btl/libs/ublas/CMakeLists.txt b/bench/btl/libs/ublas/CMakeLists.txt
index 25931c46e..bdb58bea1 100644
--- a/bench/btl/libs/ublas/CMakeLists.txt
+++ b/bench/btl/libs/ublas/CMakeLists.txt
@@ -1,3 +1,7 @@
-include_directories(${Boost_INCLUDES})
-btl_add_bench(btl_ublas main.cpp)
+find_package(Boost)
+if (Boost_FOUND)
+ include_directories(${Boost_INCLUDE_DIRS})
+ include_directories(${Boost_INCLUDES})
+ btl_add_bench(btl_ublas main.cpp)
+endif (Boost_FOUND)