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
 |