diff options
author | Daniel Friesel <daniel.friesel@uos.de> | 2023-05-26 09:36:01 +0200 |
---|---|---|
committer | Daniel Friesel <daniel.friesel@uos.de> | 2023-05-26 09:52:53 +0200 |
commit | 4ce2398d965016bd2e359b168770f856a48b4d7e (patch) | |
tree | 45b630d8477a5b073a9c2420d10cb5bf222a22f8 /GEMV/baselines/cpu/gemv_openmp.c | |
parent | f54775fd3cfe4cdb5ea11a252a14c892d6cebcbb (diff) |
port GEMV CPU baseline to dfatool
Diffstat (limited to 'GEMV/baselines/cpu/gemv_openmp.c')
-rw-r--r-- | GEMV/baselines/cpu/gemv_openmp.c | 64 |
1 files changed, 38 insertions, 26 deletions
diff --git a/GEMV/baselines/cpu/gemv_openmp.c b/GEMV/baselines/cpu/gemv_openmp.c index 307e03b..69c3ae1 100644 --- a/GEMV/baselines/cpu/gemv_openmp.c +++ b/GEMV/baselines/cpu/gemv_openmp.c @@ -5,43 +5,55 @@ int main(int argc, char *argv[]) { - const size_t rows = 20480; - const size_t cols = 8192; + const size_t rows = 20480; + const size_t cols = 8192; - double **A, *b, *x; + double **A, *b, *x; - b = (double*) malloc(sizeof(double)*rows); - x = (double*) malloc(sizeof(double)*cols); + b = (double*) malloc(sizeof(double)*rows); + x = (double*) malloc(sizeof(double)*cols); - allocate_dense(rows, cols, &A); + allocate_dense(rows, cols, &A); - make_hilbert_mat(rows,cols, &A); + make_hilbert_mat(rows,cols, &A); + + Timer timer; + for (int i = 0; i < 100; i++) { #pragma omp parallel - { + { #pragma omp for - for (size_t i = 0; i < cols; i++) { - x[i] = (double) i+1 ; - } + for (size_t i = 0; i < cols; i++) { + x[i] = (double) i+1 ; + } #pragma omp for - for (size_t i = 0; i < rows; i++) { - b[i] = (double) 0.0; - } - } - - Timer timer; - start(&timer, 0, 0); - - - gemv(A, x, rows, cols, &b); - - stop(&timer, 0); + for (size_t i = 0; i < rows; i++) { + b[i] = (double) 0.0; + } + } + unsigned int nr_threads = 0; +#pragma omp parallel +#pragma omp atomic + nr_threads++; + + start(&timer, 0, 0); + gemv(A, x, rows, cols, &b); + stop(&timer, 0); + printf("[::] n_threads=%d e_type=%s n_elements=%d " + "| throughput_cpu_omp_MBps=%f\n", + nr_threads, "double", rows * cols, + rows * cols * sizeof(double) / timer.time[0]); + printf("[::] n_threads=%d e_type=%s n_elements=%d " + "| throughput_cpu_omp_MOpps=%f\n", + nr_threads, "double", rows * cols, + rows * cols / timer.time[0]); + printf("[::] n_threads=%d e_type=%s n_elements=%d |", + nr_threads, "double", rows * cols); + printall(&timer, 0); + } - printf("Kernel "); - print(&timer, 0, 1); - printf("\n"); #if 0 print_vec(x, rows); |