diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2016-09-18 12:42:15 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2016-11-02 15:12:04 +0100 |
commit | 44861dcbfeee041223c4aac1ee075e92fa4daa01 (patch) | |
tree | 6dfdfd9637846a7aedd71ace97d7d2ad366496d7 /eigen/bench/BenchUtil.h | |
parent | f3fe458b9e0a29a99a39d47d9a76dc18964b6fec (diff) |
update
Diffstat (limited to 'eigen/bench/BenchUtil.h')
-rw-r--r-- | eigen/bench/BenchUtil.h | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/eigen/bench/BenchUtil.h b/eigen/bench/BenchUtil.h new file mode 100644 index 0000000..8883a13 --- /dev/null +++ b/eigen/bench/BenchUtil.h @@ -0,0 +1,92 @@ + +#ifndef EIGEN_BENCH_UTIL_H +#define EIGEN_BENCH_UTIL_H + +#include <Eigen/Core> +#include "BenchTimer.h" + +using namespace std; +using namespace Eigen; + +#include <boost/preprocessor/repetition/enum_params.hpp> +#include <boost/preprocessor/repetition.hpp> +#include <boost/preprocessor/seq.hpp> +#include <boost/preprocessor/array.hpp> +#include <boost/preprocessor/arithmetic.hpp> +#include <boost/preprocessor/comparison.hpp> +#include <boost/preprocessor/punctuation.hpp> +#include <boost/preprocessor/punctuation/comma.hpp> +#include <boost/preprocessor/stringize.hpp> + +template<typename MatrixType> void initMatrix_random(MatrixType& mat) __attribute__((noinline)); +template<typename MatrixType> void initMatrix_random(MatrixType& mat) +{ + mat.setRandom();// = MatrixType::random(mat.rows(), mat.cols()); +} + +template<typename MatrixType> void initMatrix_identity(MatrixType& mat) __attribute__((noinline)); +template<typename MatrixType> void initMatrix_identity(MatrixType& mat) +{ + mat.setIdentity(); +} + +#ifndef __INTEL_COMPILER +#define DISABLE_SSE_EXCEPTIONS() { \ + int aux; \ + asm( \ + "stmxcsr %[aux] \n\t" \ + "orl $32832, %[aux] \n\t" \ + "ldmxcsr %[aux] \n\t" \ + : : [aux] "m" (aux)); \ +} +#else +#define DISABLE_SSE_EXCEPTIONS() +#endif + +#ifdef BENCH_GMM +#include <gmm/gmm.h> +template <typename EigenMatrixType, typename GmmMatrixType> +void eiToGmm(const EigenMatrixType& src, GmmMatrixType& dst) +{ + dst.resize(src.rows(),src.cols()); + for (int j=0; j<src.cols(); ++j) + for (int i=0; i<src.rows(); ++i) + dst(i,j) = src.coeff(i,j); +} +#endif + + +#ifdef BENCH_GSL +#include <gsl/gsl_matrix.h> +#include <gsl/gsl_linalg.h> +#include <gsl/gsl_eigen.h> +template <typename EigenMatrixType> +void eiToGsl(const EigenMatrixType& src, gsl_matrix** dst) +{ + for (int j=0; j<src.cols(); ++j) + for (int i=0; i<src.rows(); ++i) + gsl_matrix_set(*dst, i, j, src.coeff(i,j)); +} +#endif + +#ifdef BENCH_UBLAS +#include <boost/numeric/ublas/matrix.hpp> +#include <boost/numeric/ublas/vector.hpp> +template <typename EigenMatrixType, typename UblasMatrixType> +void eiToUblas(const EigenMatrixType& src, UblasMatrixType& dst) +{ + dst.resize(src.rows(),src.cols()); + for (int j=0; j<src.cols(); ++j) + for (int i=0; i<src.rows(); ++i) + dst(i,j) = src.coeff(i,j); +} +template <typename EigenType, typename UblasType> +void eiToUblasVec(const EigenType& src, UblasType& dst) +{ + dst.resize(src.size()); + for (int j=0; j<src.size(); ++j) + dst[j] = src.coeff(j); +} +#endif + +#endif // EIGEN_BENCH_UTIL_H |