Description
The OpenMP Tools Interface (OMPT) provides a standardized mechanism for performance analysis and tooling, enabling developers to gain detailed insight into OpenMP program execution. While the LLVM OpenMP runtime provides a mature OMPT implementation, libgomp has no support at the moment, limiting the availability of performance tools on GCC compiled code.
This talk presents our work to add OMPT support in libgomp. We describe the implementation of the core OMPT infrastructure, including the general callback interface, the general OMPT API entry points, and support for device callbacks. The implemented functionality substantially improves compatibility with existing OMPT-based tools and brings libgomp much closer to a complete implementation of the specification. We will discuss the tool compatibility and limitation based on Score-P and Archer as examples.
Beyond the implementation itself, we will discuss the performance implications of enabling OMPT based on the EPCC benchmark suite. Additionally, we will speak about architectural changes proposed for upstream libgomp. In particular, we will motivate the partial conversion of the runtime to C++ to leverage templating code with and without OMPT enabled, and we introduce additional internal runtime API entry points required to expose events that are not currently observable through libgomp's existing interfaces. We will conclude with some insights about the upstreaming effort.