- edited description
Scorep API
Issue #61
new
2022: https://gitlab.com/-/snippets/2254202
Description
C API
#ifdef _SCOREP
#include <scorep/SCOREP_User.h>
#endif
int main(int argc, char** argv) { ... }
void jacobi() {
#ifdef _SCOREP
SCOREP_USER_REGION_DEFINE( my_region_handle1 )
SCOREP_USER_REGION_DEFINE( my_region_handle2 )
SCOREP_USER_REGION_BEGIN( my_region_handle1, "loop1", \\
SCOREP_USER_REGION_TYPE_COMMON )
#endif
...
#ifdef _SCOREP
SCOREP_USER_REGION_END( my_region_handle1 )
SCOREP_USER_REGION_BEGIN( my_region_handle2, "loop2", \\
SCOREP_USER_REGION_TYPE_COMMON )
#endif
...
#ifdef _SCOREP
SCOREP_USER_REGION_END( my_region_handle2 )
#endif
}
Get the src:
- git clone EuroHack15.git
- cd examples/qwiklab/perftools_api
Setup:
- module load Score-P/1.4.2-gmvolf-2015b
Compile:
- C code:
scorep --user \
gcc -D_CSCS_ITMAX=100 \
-D_SCOREP jacobi_openmp.c \
-o l1l2 -lm
Run:
./l1l2
Jacobi relaxation Calculation: 1024 x 1024 mesh 0, 0.250000
total: 1.297667 s
- With scorep --user: scorep-score -r scorep-*/profile.cubex
flt type max_buf[B] visits time[s] time[%] time/visit[us] region
ALL 4,992 208 1.31 100.0 6297.50 ALL
USR 4,992 208 1.31 100.0 6297.50 USR
USR 2,400 100 0.31 23.5 3083.48 loop2
USR 2,400 100 1.00 76.1 9970.89 loop1
USR 48 2 0.00 0.0 3.15 mytimer_
USR 24 1 0.00 0.0 137.45 jacobi <-----
USR 24 1 0.00 0.3 4020.81 init_host
USR 24 1 0.00 0.0 250.55 finalize_host
USR 24 1 0.00 0.0 19.74 main
- Without scorep --user:
flt type max_buf[B] visits time[s] time[%] time/visit[us] region
ALL 192 8 1.30 100.0 162833.06 ALL
USR 192 8 1.30 100.0 162833.06 USR
USR 48 2 0.00 0.0 2.64 mytimer_
USR 24 1 0.00 0.0 240.37 finalize_host
USR 24 1 0.00 0.0 20.01 main
USR 24 1 1.30 99.6 1297928.56 jacobi <----
USR 24 1 0.00 0.3 4462.47 init_host
USR 24 1 0.00 0.0 6.23 stop_timer
USR 24 1 0.00 0.0 1.52 start_timer
Comments (6)
-
reporter -
reporter Fortran API
program jacobi1 #ifdef _SCOREP #include "scorep/SCOREP_User.inc" #endif #ifdef _SCOREP SCOREP_USER_REGION_DEFINE( my_region_handle1 ) SCOREP_USER_REGION_DEFINE( my_region_handle2 ) #endif ... #ifdef _SCOREP SCOREP_USER_REGION_BEGIN( my_region_handle1, "loop1", SCOREP_USER_REGION_TYPE_COMMON ) #endif ... loop1 ... #ifdef _SCOREP SCOREP_USER_REGION_END( my_region_handle1 ) SCOREP_USER_REGION_BEGIN( my_region_handle2, "loop2", SCOREP_USER_REGION_TYPE_COMMON ) #endif ... loop2 ... #ifdef _SCOREP SCOREP_USER_REGION_END( my_region_handle2 ) #endif ... end program jacobi1
Get the src:
- git clone EuroHack15.git
- cd examples/qwiklab/perftools_api
Setup:
- module load Score-P/1.4.2-gmvolf-2015b
Compile:
- F90 code:
[ scorep [--user] ] \ gfortran \ -D_CSCS_ITMAX=100 \ -D_SCOREP ./task1_patrecord-loop.F90
Run:
./a.out
- Without --user:
- scorep-score -r scorep-*/profile.cubex
flt type max_buf[B] visits time[s] time[%] time/visit[us] region ALL 48 2 1.37 100.0 685490.83 ALL USR 48 2 1.37 100.0 685490.83 USR USR 24 1 0.00 0.0 145.17 main USR 24 1 1.37 100.0 1370836.49 jacobi1
- With --user:
- scorep-score -r scorep-*/profile.cubex
flt type max_buf[B] visits time[s] time[%] time/visit[us] region ALL 4,848 202 1.38 100.0 6829.62 ALL USR 4,848 202 1.38 100.0 6829.62 USR USR 2,400 100 0.26 18.8 2592.97 loop2 USR 2,400 100 1.12 80.9 11157.10 loop1 USR 24 1 0.00 0.3 4447.52 jacobi1 USR 24 1 0.00 0.0 128.31 main
-
reporter SCOREP_RECORDING_OFF/ON (jacobi)
Instrument (Fortran)
#ifdef _SCOREP_RECORD #include "scorep/SCOREP_User.inc" #endif ... #ifdef _SCOREP_RECORD SCOREP_RECORDING_OFF() #endif ... #ifdef _SCOREP_RECORD SCOREP_RECORDING_ON() #endif ... #ifdef _SCOREP_RECORD SCOREP_RECORDING_OFF() #endif
Compile
make FC="scorep --mpp=mpi --openmp --user ftn" \ FFLAGS="-D_SCOREP_RECORD -fopenmp" \ LDFLAGS=-fopenmp
Run
export SCOREP_ENABLE_PROFILING=false export SCOREP_ENABLE_TRACING=true export ITERATIONS=3 export OMP_NUM_THREADS=4 export OMP_PROC_BIND=true
-
reporter Instrument (C/C++)
#include "scorep/SCOREP_User.h" SCOREP_RECORDING_OFF() SCOREP_RECORDING_ON() SCOREP_RECORDING_OFF()
Compile
make CXX="scorep --mpp=mpi --openmp --user CC" \ CXXFLAGS="-D_SCOREP_RECORD -fopenmp" \ LDFLAGS=-fopenmp
Run
-
reporter - Smarter:
#ifdef SCOREP_RECORD #include "scorep/SCOREP_User.h" #else #define SCOREP_RECORDING_ON() #define SCOREP_RECORDING_OFF() #endif
then no need to use ifdefs:
... SCOREP_RECORDING_ON() ...
-
reporter - edited description
- Log in to comment