Scorep API

Issue #61 new
jg piccinali repo owner created an issue

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)

  1. jg piccinali 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
    
  2. jg piccinali 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           
    

    eff.png

  3. jg piccinali 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

    eff.png

  4. jg piccinali 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()
    ...
    
  5. Log in to comment