BenchUtil.h revision c981c48f5bc9aefeffc0bcb0cc3934c2fae179dd
1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef EIGEN_BENCH_UTIL_H 3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define EIGEN_BENCH_UTIL_H 4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <Eigen/Core> 6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "BenchTimer.h" 7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace std; 9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace Eigen; 10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <boost/preprocessor/repetition/enum_params.hpp> 12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <boost/preprocessor/repetition.hpp> 13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <boost/preprocessor/seq.hpp> 14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <boost/preprocessor/array.hpp> 15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <boost/preprocessor/arithmetic.hpp> 16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <boost/preprocessor/comparison.hpp> 17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <boost/preprocessor/punctuation.hpp> 18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <boost/preprocessor/punctuation/comma.hpp> 19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <boost/preprocessor/stringize.hpp> 20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> void initMatrix_random(MatrixType& mat) __attribute__((noinline)); 22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> void initMatrix_random(MatrixType& mat) 23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mat.setRandom();// = MatrixType::random(mat.rows(), mat.cols()); 25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> void initMatrix_identity(MatrixType& mat) __attribute__((noinline)); 28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> void initMatrix_identity(MatrixType& mat) 29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mat.setIdentity(); 31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef __INTEL_COMPILER 34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define DISABLE_SSE_EXCEPTIONS() { \ 35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int aux; \ 36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath asm( \ 37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath "stmxcsr %[aux] \n\t" \ 38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath "orl $32832, %[aux] \n\t" \ 39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath "ldmxcsr %[aux] \n\t" \ 40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : : [aux] "m" (aux)); \ 41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#else 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define DISABLE_SSE_EXCEPTIONS() 44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifdef BENCH_GMM 47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <gmm/gmm.h> 48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename EigenMatrixType, typename GmmMatrixType> 49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid eiToGmm(const EigenMatrixType& src, GmmMatrixType& dst) 50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath dst.resize(src.rows(),src.cols()); 52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for (int j=0; j<src.cols(); ++j) 53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for (int i=0; i<src.rows(); ++i) 54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath dst(i,j) = src.coeff(i,j); 55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifdef BENCH_GSL 60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <gsl/gsl_matrix.h> 61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <gsl/gsl_linalg.h> 62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <gsl/gsl_eigen.h> 63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename EigenMatrixType> 64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid eiToGsl(const EigenMatrixType& src, gsl_matrix** dst) 65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for (int j=0; j<src.cols(); ++j) 67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for (int i=0; i<src.rows(); ++i) 68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath gsl_matrix_set(*dst, i, j, src.coeff(i,j)); 69c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifdef BENCH_UBLAS 73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <boost/numeric/ublas/matrix.hpp> 74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <boost/numeric/ublas/vector.hpp> 75c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename EigenMatrixType, typename UblasMatrixType> 76c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid eiToUblas(const EigenMatrixType& src, UblasMatrixType& dst) 77c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 78c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath dst.resize(src.rows(),src.cols()); 79c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for (int j=0; j<src.cols(); ++j) 80c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for (int i=0; i<src.rows(); ++i) 81c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath dst(i,j) = src.coeff(i,j); 82c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 83c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename EigenType, typename UblasType> 84c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathvoid eiToUblasVec(const EigenType& src, UblasType& dst) 85c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 86c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath dst.resize(src.size()); 87c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for (int j=0; j<src.size(); ++j) 88c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath dst[j] = src.coeff(j); 89c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 90c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 91c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 92c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif // EIGEN_BENCH_UTIL_H 93