55 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
 | |
| #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
 | 
