From d4cf83b5d2bef6c6ffdc5cafac48b289f5b6dc0a Mon Sep 17 00:00:00 2001 From: Laurent Morichetti Date: Fri, 26 Aug 2022 22:45:00 -0700 Subject: [PATCH] SWDEV-351980 - Remove IS_PROFILER_ON The CallbacksTable::is_enabled() can simply be implemented by checking if enabled_api_count is > 0. The ROCclr does not use IS_PROFILER_ON to report asynchronous activities. Change-Id: Iab3d034357e51282bf2c453b2ac5c9726786b9eb [ROCm/clr commit: eeddffc1b1a02c639aa63f881369b58a75941a8c] --- projects/clr/hipamd/src/hip_intercept.cpp | 5 --- projects/clr/hipamd/src/hip_prof_api.h | 46 +++++++++-------------- 2 files changed, 18 insertions(+), 33 deletions(-) diff --git a/projects/clr/hipamd/src/hip_intercept.cpp b/projects/clr/hipamd/src/hip_intercept.cpp index 859dbc9190..9fbc2f66c5 100644 --- a/projects/clr/hipamd/src/hip_intercept.cpp +++ b/projects/clr/hipamd/src/hip_intercept.cpp @@ -67,11 +67,6 @@ hipError_t hipRemoveActivityCallback(uint32_t id) { return callbacks_table.set_activity(static_cast(id), nullptr, nullptr) ? hipSuccess : hipErrorInvalidValue; } -hipError_t hipEnableTracing(bool enabled) { - callbacks_table.set_enabled(enabled); - return hipSuccess; -} - const char* hipApiName(uint32_t id) { return hip_api_name(id); } diff --git a/projects/clr/hipamd/src/hip_prof_api.h b/projects/clr/hipamd/src/hip_prof_api.h index 464a4ee97b..38a50584c5 100644 --- a/projects/clr/hipamd/src/hip_prof_api.h +++ b/projects/clr/hipamd/src/hip_prof_api.h @@ -44,6 +44,9 @@ class api_callbacks_table_t { if (id < HIP_API_ID_FIRST || id > HIP_API_ID_LAST) return false; + auto& entry = callbacks_table_[id]; + std::unique_lock lock(entry.mutex); + /* 'function != nullptr' indicates it is activity register call, increment should happen only once but client is free to call register CB multiple times for same API id hence the check @@ -52,18 +55,13 @@ class api_callbacks_table_t { decrement should happen only once hence the check. */ if (function != nullptr) { - if (callbacks_table_[id].activity.first == nullptr) { - ++enabled_api_count_; - } + if (entry.activity.first == nullptr) + enabled_api_count_.fetch_add(1, std::memory_order_relaxed); } else { - if (callbacks_table_[id].activity.first != nullptr) { - --enabled_api_count_; - } + if (entry.activity.first != nullptr) + enabled_api_count_.fetch_sub(1, std::memory_order_relaxed); } - amd::IS_PROFILER_ON = (enabled_api_count_ > 0); - - std::unique_lock lock(callbacks_table_[id].mutex); - callbacks_table_[id].activity = {function, arg}; + entry.activity = {function, arg}; return true; } @@ -72,32 +70,27 @@ class api_callbacks_table_t { if (id < HIP_API_ID_FIRST || id > HIP_API_ID_LAST) return false; - std::unique_lock lock(callbacks_table_[id].mutex); - callbacks_table_[id].user_callback = {function, arg}; + auto& entry = callbacks_table_[id]; + std::unique_lock lock(entry.mutex); + entry.user_callback = {function, arg}; return true; } auto get(hip_api_id_t id) { assert(id >= HIP_API_ID_FIRST && id <= HIP_API_ID_LAST && "invalid callback id"); + auto& entry = callbacks_table_[id]; - - std::shared_lock lock(callbacks_table_[id].mutex); - auto ret = std::make_pair(entry.user_callback, entry.activity); - - return ret; - } - - void set_enabled(bool enabled) { - amd::IS_PROFILER_ON = enabled; + std::shared_lock lock(entry.mutex); + return std::make_pair(entry.user_callback, entry.activity); } bool is_enabled() const { - return amd::IS_PROFILER_ON; + return enabled_api_count_.load(std::memory_order_relaxed) > 0; } private: - uint32_t enabled_api_count_{0}; + std::atomic enabled_api_count_{0}; // HIP API callbacks table struct { @@ -122,28 +115,25 @@ class api_callbacks_spawner_t { if (activity_.first == nullptr) return; - api_data_.correlation_id = 0; api_data_.phase = ACTIVITY_API_PHASE_ENTER; activity_.first(ID, &record_, &api_data_, activity_.second); + activity_prof::correlation_id = api_data_.correlation_id; if (user_callback_.first) { init_cb_args_data(api_data_); user_callback_.first(ACTIVITY_DOMAIN_HIP_API, ID, &api_data_, user_callback_.second); } - - activity_prof::correlation_id = api_data_.correlation_id; } ~api_callbacks_spawner_t() { if (activity_.first == nullptr) return; - activity_prof::correlation_id = 0; - api_data_.phase = ACTIVITY_API_PHASE_EXIT; if (user_callback_.first != nullptr) user_callback_.first(ACTIVITY_DOMAIN_HIP_API, ID, &api_data_, user_callback_.second); + activity_prof::correlation_id = 0; activity_.first(ID, &record_, &api_data_, activity_.second); }