diff options
author | Erik Schnetter <schnetter@gmail.com> | 2013-07-28 09:30:17 -0700 |
---|---|---|
committer | Erik Schnetter <schnetter@gmail.com> | 2013-07-28 09:30:17 -0700 |
commit | f3d0a945046a577f91a565a3b7d1142cf1254f28 (patch) | |
tree | d796d55d21d1bb99dfa8137f5028fdc39356833e | |
parent | 5944de36a22858eff9ea2e9bb7100f762ce7aeec (diff) |
Add timing and operation counts to generated loops (but leave commented out)
Commented out; need to find efficient way to enable/disable this.
-rw-r--r-- | Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.h | 1 | ||||
-rw-r--r-- | Tools/CodeGen/CodeGenCactus.m | 58 |
2 files changed, 45 insertions, 14 deletions
diff --git a/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.h b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.h index 38ae740..9152427 100644 --- a/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.h +++ b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.h @@ -32,6 +32,7 @@ # include <cmath> #endif #include <math.h> +#include <sys/time.h> #include <cctk.h> diff --git a/Tools/CodeGen/CodeGenCactus.m b/Tools/CodeGen/CodeGenCactus.m index 117d2e5..15c66f4 100644 --- a/Tools/CodeGen/CodeGenCactus.m +++ b/Tools/CodeGen/CodeGenCactus.m @@ -384,20 +384,50 @@ DefFn[ If[SOURCELANGUAGE == "C", CommentedBlock[ "Loop over the grid points", - {"#pragma omp parallel\n", - If[vectorise, "CCTK_LOOP3STR", "CCTK_LOOP3"], - "(", functionName, ",\n", - " i,j,k, imin[0],imin[1],imin[2], imax[0],imax[1],imax[2],\n", - " cctk_ash[0],cctk_ash[1],cctk_ash[2]", - If[vectorise, {",\n", " vecimin,vecimax, CCTK_REAL_VEC_SIZE"}, ""], - ")\n", - "{\n", - IndentBlock[ - {(* DeclareVariable["index", "// int"], *) - (* DeclareAssignVariable["int", "index", "CCTK_GFINDEX3D(cctkGH,i,j,k)"], *) - DeclareAssignVariable["ptrdiff_t", "index", "di*i + dj*j + dk*k"], - block}], "}\n", - If[vectorise, "CCTK_ENDLOOP3STR", "CCTK_ENDLOOP3"] <> "(", functionName, ");\n"}], + { "/* Circumvent a compiler bug on Blue Gene/Q */\n", + "const int imin0=imin[0];\n", + "const int imin1=imin[1];\n", + "const int imin2=imin[2];\n", + "const int imax0=imax[0];\n", + "const int imax1=imax[1];\n", + "const int imax2=imax[2];\n", + "// #undef VEC_COUNT\n", + "// #define VEC_COUNT(x) x\n", + "// double vec_iter_timer;\n", + "// {\n", + "// timeval tv;\n", + "// gettimeofday(&tv, NULL);\n", + "// vec_iter_timer = -(tv.tv_sec + 1.0e-6 * tv.tv_usec);\n", + "// }\n", + "// ptrdiff_t vec_iter_counter = 0;\n", + "// ptrdiff_t vec_op_counter = 0;\n", + "// ptrdiff_t vec_mem_counter = 0;\n", + "#pragma omp parallel // reduction(+: vec_iter_counter, vec_op_counter, vec_mem_counter)\n", + If[vectorise, "CCTK_LOOP3STR", "CCTK_LOOP3"], + "(", functionName, ",\n", + " i,j,k, imin0,imin1,imin2, imax0,imax1,imax2,\n", + " cctk_ash[0],cctk_ash[1],cctk_ash[2]", + If[vectorise, {",\n", " vecimin,vecimax, CCTK_REAL_VEC_SIZE"}, ""], + ")\n", + "{\n", + IndentBlock[ + {(* DeclareVariable["index", "// int"], *) + (* DeclareAssignVariable["int", "index", "CCTK_GFINDEX3D(cctkGH,i,j,k)"], *) + DeclareAssignVariable["ptrdiff_t", "index", "di*i + dj*j + dk*k"], + If[vectorise, + "// vec_iter_counter+=CCTK_REAL_VEC_SIZE;\n", + "// ++vec_iter_counter;\n"], + block}], + "}\n", + If[vectorise, "CCTK_ENDLOOP3STR", "CCTK_ENDLOOP3"] <> "(", functionName, ");\n", + "// {\n", + "// timeval tv;\n", + "// gettimeofday(&tv, NULL);\n", + "// vec_iter_timer += tv.tv_sec + 1.0e-6 * tv.tv_usec;\n", + "// }\n", + "// CCTK_VInfo(CCTK_THORNSTRING, \"function="<>functionName<>" time=%g points=%td fp_ops=%td mem_ops=%td\", vec_iter_timer, vec_iter_counter, vec_op_counter, vec_mem_counter);\n", + "// #undef VEC_COUNT\n", + "// #define VEC_COUNT(x)\n"}], (* else *) ""]]; |