diff --git a/projects/roctracer/inc/roctracer.h b/projects/roctracer/inc/roctracer.h index 168bef0cd2..0c3c1b241c 100644 --- a/projects/roctracer/inc/roctracer.h +++ b/projects/roctracer/inc/roctracer.h @@ -64,7 +64,8 @@ typedef enum { ROCTRACER_STATUS_BAD_DOMAIN = 4, ROCTRACER_STATUS_BAD_PARAMETER = 5, ROCTRACER_STATUS_HIP_API_ERR = 6, - ROCTRACER_STATUS_HCC_OPS_ERR = 7, + ROCTRACER_STATUS_HIP_OPS_ERR = 7, + ROCTRACER_STATUS_HCC_OPS_ERR = ROCTRACER_STATUS_HIP_OPS_ERR, ROCTRACER_STATUS_HSA_ERR = 7, ROCTRACER_STATUS_ROCTX_ERR = 8, } roctracer_status_t; diff --git a/projects/roctracer/src/core/loader.h b/projects/roctracer/src/core/loader.h index 246f0150e5..7d849f6748 100644 --- a/projects/roctracer/src/core/loader.h +++ b/projects/roctracer/src/core/loader.h @@ -133,6 +133,7 @@ class RocpApi { }; // HIP runtime library loader class +#include "inc/roctracer_hip.h" #if STATIC_BUILD __attribute__((weak)) hipError_t hipRegisterApiCallback(uint32_t id, void* fun, void* arg) { return hipErrorUnknown; @@ -174,6 +175,10 @@ class HipLoaderStatic { GetStreamDeviceId_t* GetStreamDeviceId; ApiName_t* ApiName; + hipInitAsyncActivityCallback_t* InitActivityCallback; + hipEnableAsyncActivityCallback_t* EnableActivityCallback; + hipGetOpName_t* GetOpName; + static inline loader_t& Instance() { loader_t* obj = instance_.load(std::memory_order_acquire); if (obj == NULL) { @@ -187,6 +192,7 @@ class HipLoaderStatic { } bool Enabled() const { return true; } + bool& InitActivityDone() { return init_activity_done_; } private: HipLoaderStatic() { @@ -198,10 +204,15 @@ class HipLoaderStatic { KernelNameRefByPtr = hipKernelNameRefByPtr; GetStreamDeviceId = hipGetStreamDeviceId; ApiName = hipApiName; + + InitActivityCallback = hipInitActivityCallback; + EnableActivityCallback = hipEnableActivityCallback; + GetOpName = hipGetCmdName; } static mutex_t mutex_; static instance_t instance_; + bool init_activity_done_ = false; }; #else class HipApi { @@ -226,6 +237,12 @@ class HipApi { GetStreamDeviceId_t* GetStreamDeviceId; ApiName_t* ApiName; + hipInitAsyncActivityCallback_t* InitActivityCallback; + hipEnableAsyncActivityCallback_t* EnableActivityCallback; + hipGetOpName_t* GetOpName; + + bool& InitActivityDone() { return init_activity_done_; } + protected: void init(Loader* loader) { RegisterApiCallback = loader->GetFun("hipRegisterApiCallback"); @@ -237,29 +254,18 @@ class HipApi { KernelNameRefByPtr = loader->GetFun("hipKernelNameRefByPtr"); GetStreamDeviceId = loader->GetFun("hipGetStreamDeviceId"); ApiName = loader->GetFun("hipApiName"); - } -}; -#endif -// HCC runtime library loader class -#include "inc/roctracer_hip.h" -class HccApi { - public: - typedef BaseLoader Loader; - - hipInitAsyncActivityCallback_t* InitActivityCallback; - hipEnableAsyncActivityCallback_t* EnableActivityCallback; - hipGetOpName_t* GetOpName; - - protected: - void init(Loader* loader) { InitActivityCallback = loader->GetFun("hipInitActivityCallback"); EnableActivityCallback = loader->GetFun("hipEnableActivityCallback"); GetOpName = loader->GetFun("hipGetCmdName"); } + + private: + bool init_activity_done_ = false; }; +#endif // rocTX runtime library loader class #include "inc/roctracer_roctx.h" @@ -284,7 +290,6 @@ class RocTxApi { }; typedef BaseLoader RocpLoader; -typedef BaseLoader HccLoader; typedef BaseLoader RocTxLoader; #if STATIC_BUILD @@ -304,7 +309,6 @@ typedef HipLoaderShared HipLoader; template bool roctracer::BaseLoader::to_check_symb_ = true; \ template <> const char* roctracer::RocpLoader::lib_name_ = "librocprofiler64.so"; \ template <> bool roctracer::RocpLoader::to_load_ = true; \ - template <> const char* roctracer::HccLoader::lib_name_ = "libamdhip64.so"; \ template <> const char* roctracer::RocTxLoader::lib_name_ = "libroctx64.so"; \ template <> bool roctracer::RocTxLoader::to_load_ = true; diff --git a/projects/roctracer/src/core/roctracer.cpp b/projects/roctracer/src/core/roctracer.cpp index 02c99dee17..84d4605d3f 100644 --- a/projects/roctracer/src/core/roctracer.cpp +++ b/projects/roctracer/src/core/roctracer.cpp @@ -308,7 +308,7 @@ static inline void CorrelationIdRegistr(const activity_correlation_id_t& correla std::lock_guard lck(correlation_id_mutex); const auto ret = correlation_id_map.insert({correlation_id, correlation_id_tls}); if (ret.second == false) - EXC_ABORT(ROCTRACER_STATUS_ERROR, "HCC activity id is not unique(" << correlation_id << ")"); + EXC_ABORT(ROCTRACER_STATUS_ERROR, "HIP activity id is not unique(" << correlation_id << ")"); DEBUG_TRACE("CorrelationIdRegistr id(%lu) id_tls(%lu)\n", correlation_id, correlation_id_tls); } @@ -318,7 +318,7 @@ static inline activity_correlation_id_t CorrelationIdLookup( std::lock_guard lck(correlation_id_mutex); auto it = correlation_id_map.find(correlation_id); if (it == correlation_id_map.end()) - EXC_ABORT(ROCTRACER_STATUS_ERROR, "HCC activity id lookup failed(" << correlation_id << ")"); + EXC_ABORT(ROCTRACER_STATUS_ERROR, "HIP activity id lookup failed(" << correlation_id << ")"); const activity_correlation_id_t ret_val = it->second; correlation_id_map.erase(it); @@ -512,11 +512,11 @@ void* HIP_SyncActivityCallback(uint32_t op_id, roctracer_record_t* record, return ret; } -void HCC_ActivityIdCallback(activity_correlation_id_t correlation_id) { +void HIP_ActivityIdCallback(activity_correlation_id_t correlation_id) { CorrelationIdRegistr(correlation_id); } -void HCC_AsyncActivityCallback(uint32_t op_id, void* record, void* arg) { +void HIP_AsyncActivityCallback(uint32_t op_id, void* record, void* arg) { MemoryPool* pool = reinterpret_cast(arg); roctracer_record_t* record_ptr = reinterpret_cast(record); record_ptr->domain = ACTIVITY_DOMAIN_HIP_OPS; @@ -526,7 +526,7 @@ void HCC_AsyncActivityCallback(uint32_t op_id, void* record, void* arg) { const char* name = roctracer_op_string(ACTIVITY_DOMAIN_HIP_OPS, record_ptr->op, record_ptr->kind); DEBUG_TRACE( - "HCC_AsyncActivityCallback(\"%s\"): op(%u) kind(%u) record(%p) pool(%p) correlation_id(%d) " + "HIP_AsyncActivityCallback(\"%s\"): op(%u) kind(%u) record(%p) pool(%p) correlation_id(%d) " "beg_ns(%lu) end_ns(%lu)\n", name, record_ptr->op, record_ptr->kind, record, pool, record_ptr->correlation_id, record_ptr->begin_ns, record_ptr->end_ns); @@ -699,7 +699,7 @@ PUBLIC_API const char* roctracer_op_string(uint32_t domain, uint32_t op, uint32_ case ACTIVITY_DOMAIN_HSA_OPS: return roctracer::RocpLoader::Instance().GetOpName(op); case ACTIVITY_DOMAIN_HIP_OPS: - return roctracer::HccLoader::Instance().GetOpName(kind); + return roctracer::HipLoader::Instance().GetOpName(kind); case ACTIVITY_DOMAIN_HIP_API: return roctracer::HipLoader::Instance().ApiName(op); case ACTIVITY_DOMAIN_EXT_API: @@ -794,7 +794,7 @@ static roctracer_status_t roctracer_enable_callback_fun(roctracer_domain_t domai #if 0 if (op == HSA_API_ID_DISPATCH) { const bool succ = roctracer::RocpLoader::Instance().RegisterApiCallback(op, (void*)callback, user_data); - if (succ == false) HCC_EXC_RAISING(ROCTRACER_STATUS_HSA_ERR, "HSA::RegisterApiCallback error(" << op << ") failed"); + if (succ == false) HIP_EXC_RAISING(ROCTRACER_STATUS_HSA_ERR, "HSA::RegisterApiCallback error(" << op << ") failed"); break; } #endif @@ -806,7 +806,7 @@ static roctracer_status_t roctracer_enable_callback_fun(roctracer_domain_t domai const bool succ = roctracer::RocpLoader::Instance().RegisterEvtCallback(op, (void*)callback, user_data); if (succ == false) - HCC_EXC_RAISING(ROCTRACER_STATUS_HSA_ERR, + HIP_EXC_RAISING(ROCTRACER_STATUS_HSA_ERR, "HSA::RegisterEvtCallback error(" << op << ") failed"); break; } @@ -892,7 +892,7 @@ static roctracer_status_t roctracer_disable_callback_fun(roctracer_domain_t doma #if 0 if (op == HSA_API_ID_DISPATCH) { const bool succ = roctracer::RocpLoader::Instance().RemoveApiCallback(op); - if (succ == false) HCC_EXC_RAISING(ROCTRACER_STATUS_HSA_ERR, "HSA::RemoveActivityCallback error(" << op << ") failed"); + if (succ == false) HIP_EXC_RAISING(ROCTRACER_STATUS_HSA_ERR, "HSA::RemoveActivityCallback error(" << op << ") failed"); break; } #endif @@ -923,7 +923,7 @@ static roctracer_status_t roctracer_disable_callback_fun(roctracer_domain_t doma case ACTIVITY_DOMAIN_HSA_EVT: { const bool succ = roctracer::RocpLoader::Instance().RemoveEvtCallback(op); if (succ == false) - HCC_EXC_RAISING(ROCTRACER_STATUS_HSA_ERR, + HIP_EXC_RAISING(ROCTRACER_STATUS_HSA_ERR, "HSA::RemoveEvtCallback error(" << op << ") failed"); break; } @@ -1024,7 +1024,7 @@ static roctracer_status_t roctracer_enable_activity_fun(roctracer_domain_t domai } const bool succ = roctracer::RocpLoader::Instance().EnableActivityCallback(op, true); if (succ == false) - HCC_EXC_RAISING(ROCTRACER_STATUS_HSA_ERR, "HSA::EnableActivityCallback error"); + HIP_EXC_RAISING(ROCTRACER_STATUS_HSA_ERR, "HSA::EnableActivityCallback error"); } break; } @@ -1033,17 +1033,18 @@ static roctracer_status_t roctracer_enable_activity_fun(roctracer_domain_t domai case ACTIVITY_DOMAIN_HSA_EVT: break; case ACTIVITY_DOMAIN_HIP_OPS: { - const bool init_phase = (roctracer::HccLoader::GetRef() == NULL); - if (roctracer::HccLoader::Instance().Enabled() == false) break; + if (roctracer::HipLoader::Instance().Enabled() == false) break; + std::lock_guard lock(roctracer::hip_activity_mutex); - if (init_phase == true) { - roctracer::HccLoader::Instance().InitActivityCallback( - (void*)roctracer::HCC_ActivityIdCallback, (void*)roctracer::HCC_AsyncActivityCallback, + if (!roctracer::HipLoader::Instance().InitActivityDone()) { + roctracer::HipLoader::Instance().InitActivityCallback( + (void*)roctracer::HIP_ActivityIdCallback, (void*)roctracer::HIP_AsyncActivityCallback, (void*)pool); + roctracer::HipLoader::Instance().InitActivityDone() = true; } - const bool succ = roctracer::HccLoader::Instance().EnableActivityCallback(op, true); + const bool succ = roctracer::HipLoader::Instance().EnableActivityCallback(op, true); if (succ == false) - HCC_EXC_RAISING(ROCTRACER_STATUS_HCC_OPS_ERR, "HCC::EnableActivityCallback error"); + HIP_EXC_RAISING(ROCTRACER_STATUS_HIP_OPS_ERR, "HIP::EnableActivityCallback error"); break; } case ACTIVITY_DOMAIN_HIP_API: { @@ -1110,7 +1111,7 @@ static roctracer_status_t roctracer_disable_activity_fun(roctracer_domain_t doma if (roctracer::RocpLoader::GetRef() == NULL) break; const bool succ = roctracer::RocpLoader::Instance().EnableActivityCallback(op, false); if (succ == false) - HCC_EXC_RAISING(ROCTRACER_STATUS_HSA_ERR, + HIP_EXC_RAISING(ROCTRACER_STATUS_HSA_ERR, "HSA::EnableActivityCallback(false) error, op(" << op << ")"); } break; @@ -1120,12 +1121,12 @@ static roctracer_status_t roctracer_disable_activity_fun(roctracer_domain_t doma case ACTIVITY_DOMAIN_HSA_EVT: break; case ACTIVITY_DOMAIN_HIP_OPS: { - if (roctracer::HccLoader::Instance().Enabled() == false) break; + if (roctracer::HipLoader::Instance().Enabled() == false) break; - const bool succ = roctracer::HccLoader::Instance().EnableActivityCallback(op, false); + const bool succ = roctracer::HipLoader::Instance().EnableActivityCallback(op, false); if (succ == false) - HCC_EXC_RAISING(ROCTRACER_STATUS_HCC_OPS_ERR, - "HCC::EnableActivityCallback(NULL) error, op(" << op << ")"); + HIP_EXC_RAISING(ROCTRACER_STATUS_HIP_OPS_ERR, + "HIP::EnableActivityCallback(NULL) error, op(" << op << ")"); break; } case ACTIVITY_DOMAIN_HIP_API: {