// // (C) 2022-2023, E. Wes Bethel // benchmark-* harness for running different versions of the sum study // over different problem sizes // // usage: no command line arguments // set problem sizes, block sizes in the code below #include #include #include #include #include #include #include extern void setup(int64_t N, uint64_t A[]); extern int64_t sum(int64_t N, uint64_t A[]); /* The benchmarking program */ int main(int argc, char **argv) { std::cout << std::fixed << std::setprecision(2); #define MAX_PROBLEM_SIZE 1 << 28 // 256M std::vector problem_sizes{MAX_PROBLEM_SIZE >> 5, MAX_PROBLEM_SIZE >> 4, MAX_PROBLEM_SIZE >> 3, MAX_PROBLEM_SIZE >> 2, MAX_PROBLEM_SIZE >> 1, MAX_PROBLEM_SIZE}; std::vector A(MAX_PROBLEM_SIZE); int64_t t; int n_problems = problem_sizes.size(); /* For each test size */ for (int64_t n : problem_sizes) { printf("Working on problem size N=%lld \n", n); // invoke user code to set up the problem setup(n, &A[0]); // insert your timer code here auto start_time = std::chrono::high_resolution_clock::now(); // invoke method to perform the sum t = sum(n, &A[0]); // insert your end timer code here, and print out elapsed time for this problem size auto end_time = std::chrono::high_resolution_clock::now(); std::chrono::duration elapsed = end_time - start_time; printf("Elapsed time is: %.6f seconds\n", elapsed.count()); printf(" Sum result = %lld \n", t); } // end loop over problem sizes } // EOF