The Paraver trace-file is a set of three textual files containing the application activity (.prv), the labels associated to the numerical values (.pcf) and the resource usage (.row). Currently, there are several ways to generate Paraver trace-files:
- Extrae is the core instrumentation package developed by the Performance Tools group at BSC. Extrae is capable of instrumenting applications based on many parallel programming models and using different instrumentation approaches. The information gathered by Extrae typically includes timestamped events of runtime calls, performance counters and source code references. Besides, Extrae provides its own API to allow the user to manually instrument his or her application.
- Dimemas is a message passing simulator that allows predicting the execution of an application in an abstract machine defned by key factors for network and CPU. Dimemas can generate as output a Paraver trace-file that represents the execution according to the simulation parameters so the user can compare the results of the simulation between them or between the original execution.
- Since the trace-file format is open, there are third-party translators that convert trace-files from other performance tools into the Paraver format.
Regarding the format, the Paraver trace-file format is open source and there is a detailed explanation of its format in this document. The contents of of the trace-file is a textual header plus a list of timestamped records. The records can be summarized as:
- Events: define a punctual event occurred in a given timestamp. Entry and exit points of user functions, MPI routines, OpenMP parallel regions and CUDA kernels fall in this category. This type of record has a pair of integer values to represent the activity.
- States: represent intervals of thread status. In Extrae states are heavily related with the parallel programming model. They inform whether the application was being waiting in a barrier (either MPI or OpenMP), waiting for a message to be received, or the memory transfer was being executed.
- Relation/Communication: establishes a relationship between two objects of the trace. Common usage of these records refer to communication between two processes (in MPI applications), task movement among threads (in OmpSs applications) or memory transfers (in CUDA/OpenCL applications) encountered during the application execution.