From b66e61904f456e42bf3462c63a47d377fbcd09e8 Mon Sep 17 00:00:00 2001 From: David Goz <david.goz@inaf.it> Date: Wed, 26 Jun 2024 07:43:49 +0200 Subject: [PATCH] small refinements serial/ omp/ --- jacobi/openmp/not_opt/Makefile | 2 +- jacobi/openmp/not_opt/src/jacobi_2D_omp_not_opt.c | 8 +------- jacobi/serial/not_opt/Makefile | 2 +- jacobi_solutions/serial/not_opt/Makefile | 2 +- .../serial/not_opt/src/jacobi_2D_serial_not_opt.c | 9 ++++++--- jacobi_solutions/serial/not_opt/src/tools.c | 9 ++++----- jacobi_solutions/serial/opt/Makefile | 2 +- .../serial/opt/src/jacobi_2D_serial_opt.c | 14 ++++++++++---- jacobi_solutions/serial/opt/src/tools.c | 9 ++++----- 9 files changed, 29 insertions(+), 28 deletions(-) diff --git a/jacobi/openmp/not_opt/Makefile b/jacobi/openmp/not_opt/Makefile index fc4833d..9ec273e 100644 --- a/jacobi/openmp/not_opt/Makefile +++ b/jacobi/openmp/not_opt/Makefile @@ -51,7 +51,7 @@ valgrind_callgrind: $(PROG_CALLGRIND) valgrind_cachegrind: $(PROG_CACHEGRIND) @echo 'oooOOO... valgrind_cachegrind ...OOOooo' - valgrind --tool=cachegrind --log-file=valgrind_cachegrind_log_.%p.txt ./$< 128 128 2 + valgrind --tool=cachegrind --cache-sim=yes --log-file=valgrind_cachegrind_log_.%p.txt ./$< 128 128 2 @echo '$$ cg_annotate --auto=yes cachegrind.out.<pid> | less' @echo '(kcachegrind is required in order to visualize the output using the GUI)' @echo 'oooOOO... valgrind_cachegrind ...OOOooo' diff --git a/jacobi/openmp/not_opt/src/jacobi_2D_omp_not_opt.c b/jacobi/openmp/not_opt/src/jacobi_2D_omp_not_opt.c index d61d7fd..5768ff4 100644 --- a/jacobi/openmp/not_opt/src/jacobi_2D_omp_not_opt.c +++ b/jacobi/openmp/not_opt/src/jacobi_2D_omp_not_opt.c @@ -234,9 +234,6 @@ void JacobiAlgorithm(MyData **const restrict Phi, #pragma omp barrier #endif /* DEBUG */ - - /***** MISSING LOOP(s) PARALLELIZATION *****/ - for (int j=jbeg ; j<=jend ; j++) { for (int i=ibeg ; i<=iend ; i++) @@ -244,10 +241,7 @@ void JacobiAlgorithm(MyData **const restrict Phi, Phi[j][i] = 0.25 * (Phi0[j][i-1] + Phi0[j][i+1] + Phi0[j-1][i] + Phi0[j+1][i]); - #pragma omp critical - { - *error += delta[X] * delta[Y] * fabs(Phi[j][i] - Phi0[j][i]); - } + *error += delta[X] * delta[Y] * fabs(Phi[j][i] - Phi0[j][i]); } /* loop over columns */ } /* loop over rows */ } /* omp parallel */ diff --git a/jacobi/serial/not_opt/Makefile b/jacobi/serial/not_opt/Makefile index 191f891..fef753e 100644 --- a/jacobi/serial/not_opt/Makefile +++ b/jacobi/serial/not_opt/Makefile @@ -48,7 +48,7 @@ valgrind_callgrind: $(PROG_CALLGRIND) valgrind_cachegrind: $(PROG_CACHEGRIND) @echo 'oooOOO... valgrind_cachegrind ...OOOooo' - valgrind --tool=cachegrind --log-file=valgrind_cachegrind_log_.%p.txt ./$< 128 128 + valgrind --tool=cachegrind --cache-sim=yes --log-file=valgrind_cachegrind_log_.%p.txt ./$< 128 128 @echo '$$ cg_annotate --auto=yes cachegrind.out.<pid> | less' @echo '(kcachegrind is required in order to visualize the output using the GUI)' @echo 'oooOOO... valgrind_cachegrind ...OOOooo' diff --git a/jacobi_solutions/serial/not_opt/Makefile b/jacobi_solutions/serial/not_opt/Makefile index 191f891..fef753e 100644 --- a/jacobi_solutions/serial/not_opt/Makefile +++ b/jacobi_solutions/serial/not_opt/Makefile @@ -48,7 +48,7 @@ valgrind_callgrind: $(PROG_CALLGRIND) valgrind_cachegrind: $(PROG_CACHEGRIND) @echo 'oooOOO... valgrind_cachegrind ...OOOooo' - valgrind --tool=cachegrind --log-file=valgrind_cachegrind_log_.%p.txt ./$< 128 128 + valgrind --tool=cachegrind --cache-sim=yes --log-file=valgrind_cachegrind_log_.%p.txt ./$< 128 128 @echo '$$ cg_annotate --auto=yes cachegrind.out.<pid> | less' @echo '(kcachegrind is required in order to visualize the output using the GUI)' @echo 'oooOOO... valgrind_cachegrind ...OOOooo' diff --git a/jacobi_solutions/serial/not_opt/src/jacobi_2D_serial_not_opt.c b/jacobi_solutions/serial/not_opt/src/jacobi_2D_serial_not_opt.c index ba53f32..f17e977 100644 --- a/jacobi_solutions/serial/not_opt/src/jacobi_2D_serial_not_opt.c +++ b/jacobi_solutions/serial/not_opt/src/jacobi_2D_serial_not_opt.c @@ -214,10 +214,13 @@ void JacobiAlgorithm(MyData **const restrict Phi, { for (int i=ibeg ; i<=iend ; i++) { - Phi[j][i] = 0.25 * (Phi0[j][i-1] + Phi0[j][i+1] + - Phi0[j-1][i] + Phi0[j+1][i]); + Phi[j][i] = 0.25 * (Phi0[j][i-1] + + Phi0[j][i+1] + + Phi0[j-1][i] + + Phi0[j+1][i]); - *error += delta[X] * delta[Y] * fabs(Phi[j][i] - Phi0[j][i]); + *error += (delta[X] * delta[Y]) * + fabs(Phi[j][i] - Phi0[j][i]); } /* loop over columns */ } /* loop over rows */ diff --git a/jacobi_solutions/serial/not_opt/src/tools.c b/jacobi_solutions/serial/not_opt/src/tools.c index be2761d..5e1f75a 100644 --- a/jacobi_solutions/serial/not_opt/src/tools.c +++ b/jacobi_solutions/serial/not_opt/src/tools.c @@ -51,9 +51,8 @@ void Show_2DdblArray(const MyData **const A, double seconds() { - struct timeval tmp; - gettimeofday(&tmp, (struct timezone *)0); - double sec = tmp.tv_sec + ((double)tmp.tv_usec)/1000000.0; - - return sec; + struct timespec ts; + return (clock_gettime( CLOCK_PROCESS_CPUTIME_ID, &ts ), + (double)ts.tv_sec + + (double)ts.tv_nsec * 1e-9); } diff --git a/jacobi_solutions/serial/opt/Makefile b/jacobi_solutions/serial/opt/Makefile index d278dc3..2a7fd8b 100644 --- a/jacobi_solutions/serial/opt/Makefile +++ b/jacobi_solutions/serial/opt/Makefile @@ -48,7 +48,7 @@ valgrind_callgrind: $(PROG_CALLGRIND) valgrind_cachegrind: $(PROG_CACHEGRIND) @echo 'oooOOO... valgrind_cachegrind ...OOOooo' - valgrind --tool=cachegrind --log-file=valgrind_cachegrind_log_.%p.txt ./$< 128 128 + valgrind --tool=cachegrind --cache-sim=yes --log-file=valgrind_cachegrind_log_.%p.txt ./$< 128 128 @echo '$$ cg_annotate --auto=yes cachegrind.out.<pid> | less' @echo '(kcachegrind is required in order to visualize the output using the GUI)' @echo 'oooOOO... valgrind_cachegrind ...OOOooo' diff --git a/jacobi_solutions/serial/opt/src/jacobi_2D_serial_opt.c b/jacobi_solutions/serial/opt/src/jacobi_2D_serial_opt.c index a14c810..7bacb89 100644 --- a/jacobi_solutions/serial/opt/src/jacobi_2D_serial_opt.c +++ b/jacobi_solutions/serial/opt/src/jacobi_2D_serial_opt.c @@ -212,13 +212,19 @@ void JacobiAlgorithm(MyData **const restrict Phi, { for (int i=ibeg ; i<=iend ; i++) { - Phi[j][i] = 0.25 * (Phi0[j][i-1] + Phi0[j][i+1] + - Phi0[j-1][i] + Phi0[j+1][i]); - - *error += delta[X] * delta[Y] * fabs(Phi[j][i] - Phi0[j][i]); + Phi[j][i] = 0.25 * (Phi0[j ][i-1] + + Phi0[j ][i+1] + + Phi0[j-1][i ] + + Phi0[j+1][i ]); + + /* avoid fabs from math library */ + const MyData diff = (Phi[j][i] - Phi0[j][i]); + *error += ((diff > 0) ? diff : -diff); } /* loop over columns */ } /* loop over rows */ + *error *= (delta[X] * delta[Y]); + return; } diff --git a/jacobi_solutions/serial/opt/src/tools.c b/jacobi_solutions/serial/opt/src/tools.c index be2761d..5e1f75a 100644 --- a/jacobi_solutions/serial/opt/src/tools.c +++ b/jacobi_solutions/serial/opt/src/tools.c @@ -51,9 +51,8 @@ void Show_2DdblArray(const MyData **const A, double seconds() { - struct timeval tmp; - gettimeofday(&tmp, (struct timezone *)0); - double sec = tmp.tv_sec + ((double)tmp.tv_usec)/1000000.0; - - return sec; + struct timespec ts; + return (clock_gettime( CLOCK_PROCESS_CPUTIME_ID, &ts ), + (double)ts.tv_sec + + (double)ts.tv_nsec * 1e-9); } -- GitLab