The KOJAK trace-analysis environment is an automatic performance evaluation system for MPI, OpenMP, and hybrid applications. The environment includes tools for instrumentation, event-trace generation, and postprocessing of event traces. Its main feature is the ability to automatically diagnose sources of inefficient runtime behavior on a high level of abstraction. It consists of four components, which are described below.
For additional information please refer to the project web page at Forschungszentrum Juelich.
OPARI is a source-to-source translation tool which automatically inserts calls to the POMP profiling interface into the source code of OpenMP applications. OPARI works with Fortran, C, and C++ programs. The POMP interface is can be implemented by tool builders who want, for example, monitor the performance of OpenMP applications. OPARI is
based on the idea of OpenMP pragma/directive rewriting.
EPILOG is a binary event trace format plus a run-time library to generate event traces of MPI and OpenMP applications. The EPILOG event types cover the following situations:
- Entering and leaving code regions
- MPI point-to-point communication
- MPI collective communication
- MPI-2 one-sided communication
- OpenMP fork and join operations
- OpenMP parallel constructs
- OpenMP lock synchronization
The library implementation is based on the PMPI and POMP profiling interfaces for MPI and OpenMP, respectively. Also, the library includes capabilities to record hardware counters based on the PAPI library. Support for automatic instrumentation is provided based on DPCL and different compiler-supplied profiling interfaces.
EARL is a high-level interface for accessing EPILOG event traces. EARL provides random access to single events, computes the execution state at the time of a given event as well as predefined relationships between pairs of related events. EARL is implemented in C++ and offers a C++ and a Python class interface.
EXPERT is an automatic event-trace analysis tool for MPI and OpenMP applications. EXPERT identifies execution patterns indicating low performance and quantifies them according to their severity. The analysis process automatically transforms the traces into a scalable representation of performance behavior, allowing a fast and easy identification of performance bottlenecks on varying levels of granularity along the dimensions of problem type, call graph, and
process or thread. The uniform mapping of performance behavior onto the corresponding fraction of execution time enables the convenient correlation of different performance behavior using only a single integrated view. KOJAK uses CUBE to display its results.
CUBE is a generic presentation component suitable for displaying a wide variety of performance metrics for parallel programs including MPI and OpenMP applications. CUBE allows interactive exploration of a multidimensional performance space in a scalable fashion. Scalability is achieved in two ways: hierarchical decomposition of individual dimensions and aggregation across different dimensions. All performance metrics are uniformly accommodated in the same display and thus provide the ability to easily compare the effects of different kinds of performance behavior. For more information on CUBE please visit the CUBE web page.