void benchmark( int n, int *a, int (*computeSum)(int,int*), char *name ) { /* warm up */ int sum = computeSum( n, a ); /* measure */ unsigned long long cycles = RDTSC(); sum += computeSum( n, a ); cycles = RDTSC()-cycles; double microseconds = cycles/CLOCK_RATE_GHZ*1e6; /* report */ printf( "%20s: ", name ); if( sum == 2*sum_naive(n,a) ) printf( "%.2f microseconds\n", microseconds ); else printf( "ERROR!\n" ); }
void benchmark(int n, int *a, int(*computeSum)(int, int*), char *name) { // warm up cache int sum = computeSum(n, a); // measure uint64_t beginCycle = RDTSC(); sum += computeSum(n, a); uint64_t cycles = RDTSC() - beginCycle; double microseconds = cycles/CLOCK_RATE_GHZ*1e6; // print results printf("%20s: ", name); if (sum == 2 * sum_naive(n, a)) { printf("%.2f microseconds\n", microseconds); } else { printf("ERROR!\n"); } }