You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.6 KiB
63 lines
1.6 KiB
|
|
#ifndef EIGEN_BENCH_BASICBENCH_H |
|
#define EIGEN_BENCH_BASICBENCH_H |
|
|
|
enum {LazyEval, EarlyEval, OmpEval}; |
|
|
|
template<int Mode, typename MatrixType> |
|
void benchBasic_loop(const MatrixType& I, MatrixType& m, int iterations) __attribute__((noinline)); |
|
|
|
template<int Mode, typename MatrixType> |
|
void benchBasic_loop(const MatrixType& I, MatrixType& m, int iterations) |
|
{ |
|
for(int a = 0; a < iterations; a++) |
|
{ |
|
if (Mode==LazyEval) |
|
{ |
|
asm("#begin_bench_loop LazyEval"); |
|
if (MatrixType::SizeAtCompileTime!=Eigen::Dynamic) asm("#fixedsize"); |
|
m = (I + 0.00005 * (m + m.lazy() * m)).eval(); |
|
} |
|
else if (Mode==OmpEval) |
|
{ |
|
asm("#begin_bench_loop OmpEval"); |
|
if (MatrixType::SizeAtCompileTime!=Eigen::Dynamic) asm("#fixedsize"); |
|
m = (I + 0.00005 * (m + m.lazy() * m)).evalOMP(); |
|
} |
|
else |
|
{ |
|
asm("#begin_bench_loop EarlyEval"); |
|
if (MatrixType::SizeAtCompileTime!=Eigen::Dynamic) asm("#fixedsize"); |
|
m = I + 0.00005 * (m + m * m); |
|
} |
|
asm("#end_bench_loop"); |
|
} |
|
} |
|
|
|
template<int Mode, typename MatrixType> |
|
double benchBasic(const MatrixType& mat, int size, int tries) __attribute__((noinline)); |
|
|
|
template<int Mode, typename MatrixType> |
|
double benchBasic(const MatrixType& mat, int iterations, int tries) |
|
{ |
|
const int rows = mat.rows(); |
|
const int cols = mat.cols(); |
|
|
|
MatrixType I(rows,cols); |
|
MatrixType m(rows,cols); |
|
|
|
initMatrix_identity(I); |
|
|
|
Eigen::BenchTimer timer; |
|
for(uint t=0; t<tries; ++t) |
|
{ |
|
initMatrix_random(m); |
|
timer.start(); |
|
benchBasic_loop<Mode>(I, m, iterations); |
|
timer.stop(); |
|
cerr << m; |
|
} |
|
return timer.value(); |
|
}; |
|
|
|
#endif // EIGEN_BENCH_BASICBENCH_H
|
|
|