Perfetto updates (#211)

* Retry support in build-docker-release.sh

* critical-trace perfetto update

- use ::perfetto::Track instead of threads to create rows
- refactor call_chain::generate_perfetto

* Fix backtrace_metrics for perfetto

- get_papi_labels is now properly populated

* Refactor sampling::post_process_perfetto

- include HW counter delta in sample debug annotations
- reduce the amount debug annotation data stored in the call-stack
  - if the data is common to the entire stack, it is only annotated in the first and the last call-stack entry

* exit_gotcha::exit_info

* Improve OMPT shutdown

- cause spurious test failures

* Update source/lib/omnitrace/library/ompt.cpp
This commit is contained in:
Jonathan R. Madsen
2022-11-17 08:43:45 -06:00
committed by GitHub
parent 589a729702
commit 2ebfe3fc30
11 changed files with 357 additions and 266 deletions
+48 -26
View File
@@ -60,6 +60,7 @@ namespace
std::unique_ptr<ompt_bundle_t> f_bundle = {};
bool _init_toolset_off = (trait::runtime_enabled<ompt_toolset_t>::set(false),
trait::runtime_enabled<ompt_context_t>::set(false), true);
tim::ompt::finalize_tool_func_t f_finalize = nullptr;
} // namespace
void
@@ -79,6 +80,9 @@ setup()
void
shutdown()
{
static bool _protect = false;
if(_protect) return;
_protect = true;
if(f_bundle)
{
f_bundle->stop();
@@ -86,21 +90,26 @@ shutdown()
trait::runtime_enabled<ompt_toolset_t>::set(false);
trait::runtime_enabled<ompt_context_t>::set(false);
comp::user_ompt_bundle::reset();
// call the OMPT finalize callback
if(f_finalize) (*f_finalize)();
}
f_bundle.reset();
_protect = false;
}
} // namespace ompt
} // namespace omnitrace
extern "C" ompt_start_tool_result_t*
ompt_start_tool(unsigned int omp_version, const char* runtime_version)
namespace
{
TIMEMORY_PRINTF(stderr, "OpenMP version: %u, runtime version: %s\n", omp_version,
runtime_version);
OMNITRACE_METADATA("OMP_VERSION", omp_version);
OMNITRACE_METADATA("OMP_RUNTIME_VERSION", runtime_version);
bool&
use_tool()
{
static bool _v = false;
return _v;
}
int
tool_initialize(ompt_function_lookup_t lookup, int initial_device_num,
ompt_data_t* tool_data)
{
if(!omnitrace::settings_are_configured())
{
OMNITRACE_BASIC_WARNING(
@@ -111,25 +120,38 @@ ompt_start_tool(unsigned int omp_version, const char* runtime_version)
omnitrace::configure_settings();
}
static bool _use_ompt = omnitrace::config::get_use_ompt();
static auto ompt_initialize = [](ompt_function_lookup_t lookup,
int initial_device_num,
ompt_data_t* tool_data) -> int {
_use_ompt = omnitrace::config::get_use_ompt();
if(_use_ompt)
{
TIMEMORY_PRINTF(stderr, "OpenMP-tools configuring for initial device %i\n\n",
initial_device_num);
tim::ompt::configure<TIMEMORY_OMPT_API_TAG>(lookup, initial_device_num,
tool_data);
}
return 1; // success
};
use_tool() = omnitrace::config::get_use_ompt();
if(use_tool())
{
TIMEMORY_PRINTF(stderr, "OpenMP-tools configuring for initial device %i\n\n",
initial_device_num);
f_finalize = tim::ompt::configure<TIMEMORY_OMPT_API_TAG>(
lookup, initial_device_num, tool_data);
}
return 1; // success
}
static auto ompt_finalize = [](ompt_data_t*) {};
void
tool_finalize(ompt_data_t*)
{
shutdown();
}
} // namespace
} // namespace ompt
} // namespace omnitrace
static auto data = ompt_start_tool_result_t{ ompt_initialize, ompt_finalize, { 0 } };
return (ompt_start_tool_result_t*) &data;
extern "C" ompt_start_tool_result_t*
ompt_start_tool(unsigned int omp_version, const char* runtime_version)
{
OMNITRACE_BASIC_VERBOSE_F(0, "OpenMP version: %u, runtime version: %s\n", omp_version,
runtime_version);
OMNITRACE_METADATA("OMP_VERSION", omp_version);
OMNITRACE_METADATA("OMP_RUNTIME_VERSION", runtime_version);
static auto* data = new ompt_start_tool_result_t{ &omnitrace::ompt::tool_initialize,
&omnitrace::ompt::tool_finalize,
{ 0 } };
return data;
}
#else