Add support for OSX in BTL and fix a few warnings

This commit is contained in:
Gael Guennebaud 2014-03-07 23:11:38 +01:00
parent ce41b72eb8
commit 33ca9b4ee6
8 changed files with 65 additions and 17 deletions

View File

@ -48,6 +48,12 @@ include_directories(
# set(DEFAULT_LIBRARIES ${MKL_LIBRARIES}) # set(DEFAULT_LIBRARIES ${MKL_LIBRARIES})
# endif (MKL_FOUND) # endif (MKL_FOUND)
find_library(EIGEN_BTL_RT_LIBRARY rt)
# if we cannot find it easily, then we don't need it!
if(NOT EIGEN_BTL_RT_LIBRARY)
set(EIGEN_BTL_RT_LIBRARY "")
endif()
MACRO(BTL_ADD_BENCH targetname) MACRO(BTL_ADD_BENCH targetname)
foreach(_current_var ${ARGN}) foreach(_current_var ${ARGN})
@ -70,7 +76,7 @@ MACRO(BTL_ADD_BENCH targetname)
IF(BUILD_${targetname}) IF(BUILD_${targetname})
ADD_EXECUTABLE(${targetname} ${_sources}) ADD_EXECUTABLE(${targetname} ${_sources})
ADD_TEST(${targetname} "${targetname}") ADD_TEST(${targetname} "${targetname}")
target_link_libraries(${targetname} ${DEFAULT_LIBRARIES} rt) target_link_libraries(${targetname} ${DEFAULT_LIBRARIES} ${EIGEN_BTL_RT_LIBRARY})
ENDIF(BUILD_${targetname}) ENDIF(BUILD_${targetname})
ENDMACRO(BTL_ADD_BENCH) ENDMACRO(BTL_ADD_BENCH)

View File

@ -102,8 +102,8 @@ BTL_DONT_INLINE void bench( int size_min, int size_max, int nb_point )
// merge the two data // merge the two data
std::vector<int> newSizes; std::vector<int> newSizes;
std::vector<double> newFlops; std::vector<double> newFlops;
int i=0; unsigned int i=0;
int j=0; unsigned int j=0;
while (i<tab_sizes.size() && j<oldSizes.size()) while (i<tab_sizes.size() && j<oldSizes.size())
{ {
if (tab_sizes[i] == oldSizes[j]) if (tab_sizes[i] == oldSizes[j])

View File

@ -46,7 +46,7 @@
#if (defined __GNUC__) && (!defined __INTEL_COMPILER) && !defined(__arm__) && !defined(__powerpc__) #if (defined __GNUC__) && (!defined __INTEL_COMPILER) && !defined(__arm__) && !defined(__powerpc__)
#define BTL_DISABLE_SSE_EXCEPTIONS() { \ #define BTL_DISABLE_SSE_EXCEPTIONS() { \
int aux; \ int aux = 0; \
asm( \ asm( \
"stmxcsr %[aux] \n\t" \ "stmxcsr %[aux] \n\t" \
"orl $32832, %[aux] \n\t" \ "orl $32832, %[aux] \n\t" \

View File

@ -29,7 +29,7 @@ BTL_DONT_INLINE void init_row(Vector & X, int size, int row){
X.resize(size); X.resize(size);
for (int j=0;j<X.size();j++){ for (unsigned int j=0;j<X.size();j++){
X[j]=typename Vector::value_type(init_function(row,j)); X[j]=typename Vector::value_type(init_function(row,j));
} }
} }
@ -42,7 +42,7 @@ BTL_DONT_INLINE void init_row(Vector & X, int size, int row){
template<double init_function(int,int),class Vector> template<double init_function(int,int),class Vector>
BTL_DONT_INLINE void init_matrix(Vector & A, int size){ BTL_DONT_INLINE void init_matrix(Vector & A, int size){
A.resize(size); A.resize(size);
for (int row=0; row<A.size() ; row++){ for (unsigned int row=0; row<A.size() ; row++){
init_row<init_function>(A[row],size,row); init_row<init_function>(A[row],size,row);
} }
} }
@ -50,11 +50,11 @@ BTL_DONT_INLINE void init_matrix(Vector & A, int size){
template<double init_function(int,int),class Matrix> template<double init_function(int,int),class Matrix>
BTL_DONT_INLINE void init_matrix_symm(Matrix& A, int size){ BTL_DONT_INLINE void init_matrix_symm(Matrix& A, int size){
A.resize(size); A.resize(size);
for (int row=0; row<A.size() ; row++) for (unsigned int row=0; row<A.size() ; row++)
A[row].resize(size); A[row].resize(size);
for (int row=0; row<A.size() ; row++){ for (unsigned int row=0; row<A.size() ; row++){
A[row][row] = init_function(row,row); A[row][row] = init_function(row,row);
for (int col=0; col<row ; col++){ for (unsigned int col=0; col<row ; col++){
double x = init_function(row,col); double x = init_function(row,col);
A[row][col] = A[col][row] = x; A[row][col] = A[col][row] = x;
} }

View File

@ -29,7 +29,7 @@ void init_vector(Vector & X, int size){
X.resize(size); X.resize(size);
for (int i=0;i<X.size();i++){ for (unsigned int i=0;i<X.size();i++){
X[i]=typename Vector::value_type(init_function(i)); X[i]=typename Vector::value_type(init_function(i));
} }
} }

View File

@ -78,7 +78,7 @@ public:
// time measurement // time measurement
action.calculate(); action.calculate();
_chronos.start(); _chronos.start();
for (int ii=0;ii<_nb_calc;ii++) for (unsigned int ii=0;ii<_nb_calc;ii++)
{ {
action.calculate(); action.calculate();
} }

View File

@ -34,7 +34,7 @@
// timer -------------------------------------------------------------------// // timer -------------------------------------------------------------------//
// A timer object measures CPU time. // A timer object measures CPU time.
#ifdef _MSC_VER #if defined(_MSC_VER)
#define NOMINMAX #define NOMINMAX
#include <windows.h> #include <windows.h>
@ -87,6 +87,48 @@
}; // Portable_Timer }; // Portable_Timer
#elif defined(__APPLE__)
#include <CoreServices/CoreServices.h>
#include <mach/mach_time.h>
class Portable_Timer
{
public:
Portable_Timer()
{
}
void start()
{
m_start_time = double(mach_absolute_time())*1e-9;;
}
void stop()
{
m_stop_time = double(mach_absolute_time())*1e-9;;
}
double elapsed()
{
return user_time();
}
double user_time()
{
return m_stop_time - m_start_time;
}
private:
double m_stop_time, m_start_time;
}; // Portable_Timer (Apple)
#else #else
#include <sys/time.h> #include <sys/time.h>
@ -138,7 +180,7 @@ private:
int m_clkid; int m_clkid;
double m_stop_time, m_start_time; double m_stop_time, m_start_time;
}; // Portable_Timer }; // Portable_Timer (Linux)
#endif #endif

View File

@ -52,8 +52,8 @@ public :
static BTL_DONT_INLINE void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){ static BTL_DONT_INLINE void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){
A.resize(A_stl[0].size(), A_stl.size()); A.resize(A_stl[0].size(), A_stl.size());
for (int j=0; j<A_stl.size() ; j++){ for (unsigned int j=0; j<A_stl.size() ; j++){
for (int i=0; i<A_stl[j].size() ; i++){ for (unsigned int i=0; i<A_stl[j].size() ; i++){
A.coeffRef(i,j) = A_stl[j][i]; A.coeffRef(i,j) = A_stl[j][i];
} }
} }
@ -62,13 +62,13 @@ public :
static BTL_DONT_INLINE void vector_from_stl(gene_vector & B, stl_vector & B_stl){ static BTL_DONT_INLINE void vector_from_stl(gene_vector & B, stl_vector & B_stl){
B.resize(B_stl.size(),1); B.resize(B_stl.size(),1);
for (int i=0; i<B_stl.size() ; i++){ for (unsigned int i=0; i<B_stl.size() ; i++){
B.coeffRef(i) = B_stl[i]; B.coeffRef(i) = B_stl[i];
} }
} }
static BTL_DONT_INLINE void vector_to_stl(gene_vector & B, stl_vector & B_stl){ static BTL_DONT_INLINE void vector_to_stl(gene_vector & B, stl_vector & B_stl){
for (int i=0; i<B_stl.size() ; i++){ for (unsigned int i=0; i<B_stl.size() ; i++){
B_stl[i] = B.coeff(i); B_stl[i] = B.coeff(i);
} }
} }