Performance Instrumentation
Parthenon provides several macros that make instrumenting your code simple. For now,
these macros instantiate Kokkos profiling regions via calls to
Kokkos::Profiling::pushRegion
and Kokkos::Profiling::popRegion
, meaning all the
Kokkos profiling tools should work straightforwardly with Parthenon-based applications.
PARTHENON_INSTRUMENT
: Instantiates an object that pushes a profiling region on construction and pops the region on destruction. The name of the region is auto-generated and takes the form"file_name::line_number::function_name"
. The region being profiled is controlled by invoking the macro at the appropriate scope.PARTHENON_INSTRUMENT_REGION(name)
: Same asPARTHENON_INSTRUMENT
, but uses the provided name instead of the auto-generated name.PARTHENON_INSTRUMENT_REGION_PUSH
: A trivial wrapper aroundpushRegion
where the name is auto-generated as above.PARTHENON_INSTRUMENT_REGION_POP
: A trivial wrapper aroundpopRegion
.
In addition to these macros, Parthenon provides the PARTHENON_AUTO_LABEL
macro which
can be used to provide a label to kernels (e.g. through the various par_for
functions). The auto-generated name is the same as was described above.
Though not required, the use of the auto-generated names is highly recommended. In
addition to avoiding possible name collisions, the auto-generated names provide a simple
structure that is amenable to post-processing profiling results to ease analysis. For
example, the process_timer.py
script that ships with Parthenon post-processes the
results of the Kokkos simple kernel timer output to provide a convenient view of the data.