From e6a61fc63e2c3be646ca05eadb2f832e84904ce4 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Sat, 14 Mar 2020 00:13:22 -0500 Subject: [PATCH] enable tool reloading [ROCm/roctracer commit: 1be273a1b41740e534867f4e44d85b3651b51965] --- projects/roctracer/script/hsaap.py | 7 ++-- projects/roctracer/script/kfdap.py | 9 ++-- projects/roctracer/src/core/journal.h | 2 +- projects/roctracer/src/core/roctracer.cpp | 43 ++++++++++---------- projects/roctracer/test/tool/tracer_tool.cpp | 19 ++++----- 5 files changed, 39 insertions(+), 41 deletions(-) diff --git a/projects/roctracer/script/hsaap.py b/projects/roctracer/script/hsaap.py index f07c43d902..07a365e2b4 100755 --- a/projects/roctracer/script/hsaap.py +++ b/projects/roctracer/script/hsaap.py @@ -1,4 +1,5 @@ #!/usr/bin/python +from __future__ import print_function import os, sys, re OUT='inc/hsa_prof_str.h' @@ -36,7 +37,7 @@ LICENSE = \ ############################################################# # Error handler def fatal(module, msg): - print >>sys.stderr, module + ' Error: "' + msg + '"' + print (module + ' Error: "' + msg + '"', file = sys.stderr) sys.exit(1) # Get next text block @@ -490,7 +491,7 @@ class API_DescrParser: # main # Usage if len(sys.argv) != 3: - print >>sys.stderr, "Usage:", sys.argv[0], " " + print ("Usage:", sys.argv[0], " ", file=sys.stderr) sys.exit(1) else: ROOT = sys.argv[1] + '/' @@ -499,7 +500,7 @@ else: descr = API_DescrParser(OUT, HSA_DIR, API_TABLES_H, API_HEADERS_H, LICENSE) out_file = ROOT + OUT -print 'Generating "' + out_file + '"' +print ('Generating "' + out_file + '"') f = open(out_file, 'w') f.write(descr.content[:-1]) f.close() diff --git a/projects/roctracer/script/kfdap.py b/projects/roctracer/script/kfdap.py index 06248d9f26..a9c6defb5f 100755 --- a/projects/roctracer/script/kfdap.py +++ b/projects/roctracer/script/kfdap.py @@ -1,4 +1,5 @@ #!/usr/bin/python +from __future__ import print_function import os, sys, re OUT_H = 'inc/kfd_prof_str.h' @@ -33,7 +34,7 @@ LICENSE = \ ############################################################# # Error handler def fatal(module, msg): - print >>sys.stderr, module + ' Error: "' + msg + '"' + print (module + ' Error: "' + msg + '"', file = sys.stderr) sys.exit(1) # Get next text block @@ -539,7 +540,7 @@ class API_DescrParser: # main # Usage if len(sys.argv) != 3: - print >>sys.stderr, "Usage:", sys.argv[0], " " + print ("Usage:", sys.argv[0], " ", file = sys.stderr) sys.exit(1) else: ROOT = sys.argv[1] + '/' @@ -548,13 +549,13 @@ else: descr = API_DescrParser(OUT_H, KFD_DIR, API_HEADERS_H, LICENSE) out_file = ROOT + OUT_H -print 'Generating "' + out_file + '"' +print ('Generating "' + out_file + '"') f = open(out_file, 'w') f.write(descr.content_h[:-1]) f.close() out_file = ROOT + OUT_CPP -print 'Generating "' + out_file + '"' +print ('Generating "' + out_file + '"') f = open(out_file, 'w') f.write(descr.content_cpp[:-1]) f.close() diff --git a/projects/roctracer/src/core/journal.h b/projects/roctracer/src/core/journal.h index f4d8a676b7..68f1e67709 100644 --- a/projects/roctracer/src/core/journal.h +++ b/projects/roctracer/src/core/journal.h @@ -47,7 +47,7 @@ class Journal { } ~Journal() { - for (auto& val : map_) delete val.second; + for (auto& val : *map_) delete val.second; delete map_; } diff --git a/projects/roctracer/src/core/roctracer.cpp b/projects/roctracer/src/core/roctracer.cpp index e03bb0b176..daedb97db9 100644 --- a/projects/roctracer/src/core/roctracer.cpp +++ b/projects/roctracer/src/core/roctracer.cpp @@ -686,8 +686,8 @@ static void roctracer_enable_callback_impl( roctracer_rtapi_callback_t callback, void* user_data) { - roctracer::cb_journal->registr({domain, op, {callback, user_data}}); - roctracer_enable_callback_fun((roctracer_domain_t)domain, op, callback, user_data); + roctracer::cb_journal->registr({domain, op, {callback, user_data}}); + roctracer_enable_callback_fun((roctracer_domain_t)domain, op, callback, user_data); } PUBLIC_API roctracer_status_t roctracer_enable_op_callback( @@ -1152,46 +1152,45 @@ PUBLIC_API roctracer_status_t roctracer_set_properties( API_METHOD_SUFFIX } +static bool is_loaded = false; + PUBLIC_API bool roctracer_load() { - static bool is_loaded = false; ONLOAD_TRACE("begin, loaded(" << is_loaded << ")"); - if (is_loaded) return true; + if (is_loaded == true) return true; is_loaded = true; + if (roctracer::cb_journal == NULL) roctracer::cb_journal = new roctracer::CbJournal; + if (roctracer::act_journal == NULL) roctracer::act_journal = new roctracer::ActJournal; + ONLOAD_TRACE_END(); return true; } PUBLIC_API void roctracer_unload() { - static bool is_unloaded = false; - ONLOAD_TRACE("begin, unloaded(" << is_unloaded << ")"); + ONLOAD_TRACE("begin, loaded(" << is_loaded << ")"); - if (is_unloaded == true) return; - is_unloaded = true; + if (is_loaded == false) return; + is_loaded = false; + + if (roctracer::cb_journal != NULL) { + delete roctracer::cb_journal; + roctracer::cb_journal = NULL; + } + if (roctracer::act_journal != NULL) { + delete roctracer::act_journal; + roctracer::act_journal = NULL; + } roctracer::trace_buffer.Flush(); roctracer::close_output_file(roctracer::kernel_file_handle); ONLOAD_TRACE_END(); } -// HSA-runtime tool on-load/unload methods -PUBLIC_API bool OnLoad(HsaApiTable* table, uint64_t runtime_version, uint64_t failed_tool_count, - const char* const* failed_tool_names) { - ONLOAD_TRACE_BEG(); - const bool ret = roctracer_load(); - ONLOAD_TRACE_END(); - return ret; -} -PUBLIC_API void OnUnload() { - ONLOAD_TRACE("done"); -} - CONSTRUCTOR_API void constructor() { ONLOAD_TRACE_BEG(); roctracer::util::Logger::Create(); - if (roctracer::cb_journal == NULL) roctracer::cb_journal = new roctracer::CbJournal; - if (roctracer::act_journal == NULL) roctracer::act_journal = new roctracer::ActJournal; + roctracer_load(); ONLOAD_TRACE_END(); } diff --git a/projects/roctracer/test/tool/tracer_tool.cpp b/projects/roctracer/test/tool/tracer_tool.cpp index 66a3856802..b1114ecd75 100644 --- a/projects/roctracer/test/tool/tracer_tool.cpp +++ b/projects/roctracer/test/tool/tracer_tool.cpp @@ -585,19 +585,18 @@ void open_tracing_pool() { void close_tracing_pool() { if (roctracer_default_pool() != NULL) { ROCTRACER_CALL(roctracer_flush_activity()); - ROCTRACER_CALL(roctracer_close_pool()); } } +// tool library is loaded +static bool is_loaded = false; + // tool unload method void tool_unload() { - static bool is_unloaded = false; - ONLOAD_TRACE("begin, unloaded(" << is_unloaded << ")"); + ONLOAD_TRACE("begin, loaded(" << is_loaded << ")"); - if (is_unloaded == true) return; - is_unloaded = true; - - roctracer_unload(); + if (is_loaded == false) return; + is_loaded = false; if (trace_roctx) { ROCTRACER_CALL(roctracer_disable_domain_callback(ACTIVITY_DOMAIN_ROCTX)); @@ -627,12 +626,13 @@ void tool_unload() { // tool load method void tool_load() { - static bool is_loaded = false; ONLOAD_TRACE("begin, loaded(" << is_loaded << ")"); if (is_loaded == true) return; is_loaded = true; + roctracer::TraceBufferBase::StartWorkerThreadAll(); + // Output file const char* output_prefix = getenv("ROCP_OUTPUT_DIR"); if (output_prefix != NULL) { @@ -817,9 +817,6 @@ void tool_load() { printf(")\n"); } - roctracer::TraceBufferBase::StartWorkerThreadAll(); - roctracer_load(); - ONLOAD_TRACE_END(); }