123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #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.lazyProduct(m))).eval();
- }
- else if (Mode==OmpEval)
- {
- asm("#begin_bench_loop OmpEval");
- if (MatrixType::SizeAtCompileTime!=Eigen::Dynamic) asm("#fixedsize");
- m = (I + 0.00005 * (m + m.lazyProduct(m))).eval();
- }
- 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
|