33 lines
		
	
	
		
			815 B
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			33 lines
		
	
	
		
			815 B
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/* not worth copyrighting */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "libbench2/bench.h"
							 | 
						||
| 
								 | 
							
								#include <math.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								double mflops(const bench_problem *p, double t)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								     size_t size = tensor_sz(p->sz);
							 | 
						||
| 
								 | 
							
								     size_t vsize = tensor_sz(p->vecsz);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								     if (size <= 1) /* a copy: just return reals copied / time */
							 | 
						||
| 
								 | 
							
									  switch (p->kind) {
							 | 
						||
| 
								 | 
							
									      case PROBLEM_COMPLEX:
							 | 
						||
| 
								 | 
							
										   return (2.0 * size * vsize / (t * 1.0e6));
							 | 
						||
| 
								 | 
							
									      case PROBLEM_REAL:
							 | 
						||
| 
								 | 
							
									      case PROBLEM_R2R:
							 | 
						||
| 
								 | 
							
										   return (1.0 * size * vsize / (t * 1.0e6));
							 | 
						||
| 
								 | 
							
									  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								     switch (p->kind) {
							 | 
						||
| 
								 | 
							
									 case PROBLEM_COMPLEX:
							 | 
						||
| 
								 | 
							
									      return (5.0 * size * vsize * log((double)size) / 
							 | 
						||
| 
								 | 
							
										      (log(2.0) * t * 1.0e6));
							 | 
						||
| 
								 | 
							
									 case PROBLEM_REAL:
							 | 
						||
| 
								 | 
							
									 case PROBLEM_R2R:
							 | 
						||
| 
								 | 
							
									      return (2.5 * vsize * size * log((double) size) / 
							 | 
						||
| 
								 | 
							
										      (log(2.0) * t * 1.0e6));
							 | 
						||
| 
								 | 
							
								     }
							 | 
						||
| 
								 | 
							
								     BENCH_ASSERT(0 /* can't happen */);
							 | 
						||
| 
								 | 
							
								     return 0.0;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 |