#include #include #include #include #include #include #include #include #include "poisson.hpp" #define min(a, b) ((ab)?a:b) int comp (const void * elem1, const void * elem2) { double f = *((double*)elem1); double s = *((double*)elem2); if (f > s) return 1; if (f < s) return -1; return 0; } // This benchmarks is modified from KaStORS benchmarks: // Evaluation of the OpenMP dependent tasks with the KASTORS benchmark suite int main(int argc, char* argv[]) { struct user_parameters params; memset(¶ms, 0, sizeof(params)); CLI::App app{"Jacobi"}; int num_threads = 1; app.add_option("-t,--num_threads", num_threads, "number of threads (default=1)"); params.titer = 1; app.add_option("-i,--num_iterations", params.titer, "number of iterations (default=1)"); params.niter = 1; app.add_option("-r,--num_repeats", params.niter, "number of repeats (default=1)"); params.matrix_size = 8192; app.add_option("-n,--matrix_size", params.matrix_size, "matrix size (default=8192)"); params.blocksize = 128; app.add_option("-b,--block_size", params.blocksize, "block size (default=128)"); params.check = 1; // Turn on check by default std::string model = "tf"; app.add_option("-m,--model", model, "model name seq|tbb|omp|tf (default=tf)") ->check([] (const std::string& m) { if(m != "seq" && m != "tbb" && m != "tf" && m != "omp") { return "model name should be \"seq\", \"tbb\", \"omp\", or \"tf\""; } return ""; }); CLI11_PARSE(app, argc, argv); double mean = 0.0; double meansqr = 0.0; double min_ = DBL_MAX; double max_ = -1; double* all_times = (double*)malloc(sizeof(double) * params.niter); for (int i=0; i 1)?"not implemented":"success"):"fail"); return 0; }