POMP on BG/Q Systems

Introduction

The POMP OpenMP Performance Monitoring Interface is a proposed API for enabling programmers and performance tools to obtain information about the performance of OpenMP constructs in an OpenMP program.

The IBM compilers and HPCT toolkit provide a prototype implementation of some of the POMP functionality. The full POMP API provides a number of events to report the time spent in different parts of compiler-instrumented user code, and the prototype POMP implementation provides a core subset of the events, sufficient to instrument most OpenMP programs. The current POMP implementation allows profiling of Parallel Regions, WorkShare Do and Parallel Do Loops.

No source code changes are required to use the HPCT POMP profiling library.

Profiling of nested parallelism is not supported. In such cases, only the topmost parent region will be profiled.

The runtime library supporting Performance Monitoring of OpenMP (POMP) is an experimental tool and is specifically designed for development activities and should not be used for production code.

POMP API Calls Supported

As currently implemented the POMP tool provides information OpenMP parallel regions and parallel loops through automatic compiler instrumentation which adds the following calls:

 POMP_Init
 POMP_Get_handle
 POMP_Parallel_enter
 POMP_Parallel_begin
 POMP_Parallel_end
 POMP_Parallel_exit
 POMP_Loop_enter
 POMP_Loop_chunk_begin
 POMP_Loop_chunk_end
 POMP_Loop_exit

These routine are implemented in the IBM HPCT library pomprof_probe.so which may be used for profiling OpenMP performance.

Compiling and Linking

Compiling

Individual source code files must be compiled with -qdebug=pomp to enable calls from the OpenMP runtime to the HPCT POMP library.

  mpixlc_r -c file.c -qdebug=pomp -qsmp=omp

Linking

When linking to use the HPCT POMP profiling library three additional libraries must be included:

  • /soft/apps/ibmcmp/xlsmp/bg/1.7/lib_pomp/libxlsmp_pomp32.a
  • /soft/apps/current/ibm-hpct/lib/pomprof_probe.so
  • /soft/apps/current/ibm-hpct/lib/liblicense.a
mpixlc_r -Wl,-Bdynamic -o file-pomp-prof file.o -L/soft/apps/ibmcmp/xlsmp/bg/1.7/lib_pomp/ -lxlsmp_pomp32
        /soft/apps/current/ibm-hpct/lib/pomprof_probe.so /soft/apps/current/ibm-hpct/lib/liblicense.a

Output

Running a code compiled to use the HPCT POMP OpenMP profiling library produces two output files:

  • pomprof_<mpi-task>.<pid> - text OpenMP profiling info
  • pomprof_<mpi-task>_<pid>.viz - file for use with peekperf gui viewer