From 981bf5f75a87f1b091097631969e4e492e2cf179 Mon Sep 17 00:00:00 2001 From: Laurent Morichetti Date: Thu, 7 Jul 2022 13:18:38 -0700 Subject: [PATCH] Remove the ROCprofiler loader Was used for the HSA_EVT activities, so no longer needed. Change-Id: I7729fb4519f2e3cee73776264647381cb5826067 [ROCm/roctracer commit: 9c57b150af4b55630848f6ba9d67709e0601417f] --- projects/roctracer/inc/roctracer.h | 14 ++++++ .../roctracer/src/roctracer/hsa_support.cpp | 43 ++++++++++--------- projects/roctracer/src/roctracer/loader.h | 38 ---------------- .../roctracer/src/roctracer/roctracer.cpp | 21 ++++++--- 4 files changed, 51 insertions(+), 65 deletions(-) diff --git a/projects/roctracer/inc/roctracer.h b/projects/roctracer/inc/roctracer.h index 8b633ab62a..211e5c0c69 100644 --- a/projects/roctracer/inc/roctracer.h +++ b/projects/roctracer/inc/roctracer.h @@ -29,6 +29,14 @@ * * The API provides functionality for registering the runtimes API callbacks * and asynchronous activity records pool support. + * + * \section known_limitations Known Limitations and Restrictions + * + * The ROCtracer API library implementation currently has the following + * restrictions. Future releases aim to address these restrictions. + * + * 1. The ACTIVITY_DOMAIN_HSA_OPS operations HSA_OP_ID_DISPATCH, + * HSA_OP_ID_BARRIER, and HSA_OP_ID_RESERVED1 are not currently implemented. */ /** @@ -191,6 +199,12 @@ typedef enum { * External correlation ID pop mismatch. */ ROCTRACER_STATUS_ERROR_MISMATCHED_EXTERNAL_CORRELATION_ID = -7, + /** + * The operation is not currently implemented. This error may be reported by + * any function. Check the \ref known_limitations section to determine the + * status of the library implementation of the interface. + */ + ROCTRACER_STATUS_ERROR_NOT_IMPLEMENTED = -8, /** * Deprecated error code. */ diff --git a/projects/roctracer/src/roctracer/hsa_support.cpp b/projects/roctracer/src/roctracer/hsa_support.cpp index dcd3c4764a..cf7cbc6040 100644 --- a/projects/roctracer/src/roctracer/hsa_support.cpp +++ b/projects/roctracer/src/roctracer/hsa_support.cpp @@ -22,7 +22,6 @@ #include "correlation_id.h" #include "exception.h" -#include "loader.h" #include "memory_pool.h" #include "roctracer.h" #include "roctracer_hsa.h" @@ -355,13 +354,6 @@ hsa_status_t MemoryASyncCopyRectIntercept(const hsa_pitched_ptr_t* dst, return status; } -void 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_HSA_OPS; - pool->Write(*record_ptr); -} - } // namespace roctracer_timestamp_t timestamp_ns() { @@ -481,11 +473,23 @@ const char* GetEvtName(uint32_t id) { return "CODEOBJ"; case HSA_EVT_ID_NUMBER: break; - }; + } throw ApiError(ROCTRACER_STATUS_ERROR_INVALID_ARGUMENT, "invalid HSA EVT callback id"); } -const char* GetOpsName(uint32_t id) { return RocpLoader::Instance().GetOpName(id); } +const char* GetOpsName(uint32_t id) { + switch (id) { + case HSA_OP_ID_DISPATCH: + return "DISPATCH"; + case HSA_OP_ID_COPY: + return "COPY"; + case HSA_OP_ID_BARRIER: + return "BARRIER"; + case HSA_OP_ID_RESERVED1: + return "PCSAMPLE"; + } + throw ApiError(ROCTRACER_STATUS_ERROR_INVALID_ARGUMENT, "invalid HSA OPS callback id"); +} uint32_t GetApiCode(const char* str) { return detail::GetApiCode(str); } @@ -502,15 +506,11 @@ void EnableActivity(roctracer_domain_t domain, uint32_t op, roctracer_pool_t* po } async_copy_callback_enabled = true; async_copy_callback_memory_pool = reinterpret_cast(pool); + } else if (op == HSA_OP_ID_RESERVED1) { + /* Place holder for PC sampling. */ } else { - const bool init_phase = (RocpLoader::GetRef() == nullptr); - if (RocpLoader::GetRef() == nullptr) break; - if (init_phase) { - RocpLoader::Instance().InitActivityCallback( - reinterpret_cast(AsyncActivityCallback), pool); - } - if (!RocpLoader::Instance().EnableActivityCallback(op, true)) - FATAL_LOGGING("HSA::EnableActivityCallback error"); + EXC_RAISING(ROCTRACER_STATUS_ERROR_NOT_IMPLEMENTED, + "HSA OPS operation ID(" << op << ") is not currently implemented"); } break; case ACTIVITY_DOMAIN_HSA_API: @@ -562,10 +562,11 @@ void DisableActivity(roctracer_domain_t domain, uint32_t op) { assert(status == HSA_STATUS_SUCCESS || status == HSA_STATUS_ERROR_NOT_INITIALIZED || !"hsa_amd_profiling_async_copy_enable failed"); } + } else if (op == HSA_OP_ID_RESERVED1) { + /* Place holder for PC sampling. */ } else { - if (RocpLoader::GetRef() != nullptr && - !RocpLoader::Instance().EnableActivityCallback(op, false)) - FATAL_LOGGING("HSA::EnableActivityCallback(false) error, op(" << op << ")"); + EXC_RAISING(ROCTRACER_STATUS_ERROR_NOT_IMPLEMENTED, + "HSA OPS operation ID(" << op << ") is not currently implemented"); } break; case ACTIVITY_DOMAIN_HSA_API: diff --git a/projects/roctracer/src/roctracer/loader.h b/projects/roctracer/src/roctracer/loader.h index 286d0bc1c7..bdf9f52675 100644 --- a/projects/roctracer/src/roctracer/loader.h +++ b/projects/roctracer/src/roctracer/loader.h @@ -99,41 +99,6 @@ template class BaseLoader : public T { void* handle_; }; -// ROCprofiler library loader class -class RocpApi { - public: - typedef BaseLoader Loader; - - typedef bool(RegisterCallback_t)(uint32_t op, void* callback, void* arg); - typedef bool(OperateCallback_t)(uint32_t op); - typedef bool(InitCallback_t)(void* callback, void* arg); - typedef bool(EnableCallback_t)(uint32_t op, bool enable); - typedef const char*(NameCallback_t)(uint32_t op); - - RegisterCallback_t* RegisterApiCallback; - OperateCallback_t* RemoveApiCallback; - InitCallback_t* InitActivityCallback; - EnableCallback_t* EnableActivityCallback; - NameCallback_t* GetOpName; - - RegisterCallback_t* RegisterEvtCallback; - OperateCallback_t* RemoveEvtCallback; - NameCallback_t* GetEvtName; - - protected: - void init(Loader* loader) { - RegisterApiCallback = loader->GetFun("RegisterApiCallback"); - RemoveApiCallback = loader->GetFun("RemoveApiCallback"); - InitActivityCallback = loader->GetFun("InitActivityCallback"); - EnableActivityCallback = loader->GetFun("EnableActivityCallback"); - GetOpName = loader->GetFun("GetOpName"); - - RegisterEvtCallback = loader->GetFun("RegisterEvtCallback"); - RemoveEvtCallback = loader->GetFun("RemoveEvtCallback"); - GetEvtName = loader->GetFun("GetEvtName"); - } -}; - } // namespace roctracer // HIP runtime library loader class @@ -308,7 +273,6 @@ class RocTxApi { } }; -typedef BaseLoader RocpLoader; typedef BaseLoader RocTxLoader; #if STATIC_BUILD @@ -326,8 +290,6 @@ typedef HipLoaderShared HipLoader; template bool roctracer::BaseLoader::to_load_ = false; \ template bool roctracer::BaseLoader::to_check_open_ = true; \ 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::RocTxLoader::lib_name_ = "libroctx64.so"; \ template <> bool roctracer::RocTxLoader::to_load_ = true; diff --git a/projects/roctracer/src/roctracer/roctracer.cpp b/projects/roctracer/src/roctracer/roctracer.cpp index 6b886ef8b9..936c40c096 100644 --- a/projects/roctracer/src/roctracer/roctracer.cpp +++ b/projects/roctracer/src/roctracer/roctracer.cpp @@ -515,7 +515,6 @@ static void roctracer_enable_activity_fun(roctracer_domain_t domain, uint32_t op assert(pool != nullptr); switch (domain) { case ACTIVITY_DOMAIN_HSA_OPS: - RocpLoader::Instance(); case ACTIVITY_DOMAIN_HSA_API: case ACTIVITY_DOMAIN_HSA_EVT: hsa_support::EnableActivity(domain, op, pool); @@ -572,8 +571,11 @@ ROCTRACER_API roctracer_status_t roctracer_enable_op_activity(activity_domain_t static void roctracer_enable_domain_activity_impl(roctracer_domain_t domain, roctracer_pool_t* pool) { const uint32_t op_end = get_op_end(domain); - for (uint32_t op = get_op_begin(domain); op < op_end; ++op) - roctracer_enable_activity_impl(domain, op, pool); + for (uint32_t op = get_op_begin(domain); op < op_end; ++op) try { + roctracer_enable_activity_impl(domain, op, pool); + } catch (const ApiError& err) { + if (err.status() != ROCTRACER_STATUS_ERROR_NOT_IMPLEMENTED) throw; + } } ROCTRACER_API roctracer_status_t roctracer_enable_domain_activity_expl(roctracer_domain_t domain, @@ -637,11 +639,18 @@ ROCTRACER_API roctracer_status_t roctracer_disable_op_activity(roctracer_domain_ API_METHOD_SUFFIX } +static void roctracer_disable_domain_activity_impl(roctracer_domain_t domain) { + const uint32_t op_end = get_op_end(domain); + for (uint32_t op = get_op_begin(domain); op < op_end; ++op) try { + roctracer_disable_activity_impl(domain, op); + } catch (const ApiError& err) { + if (err.status() != ROCTRACER_STATUS_ERROR_NOT_IMPLEMENTED) throw; + } +} + ROCTRACER_API roctracer_status_t roctracer_disable_domain_activity(roctracer_domain_t domain) { API_METHOD_PREFIX - const uint32_t op_end = get_op_end(domain); - for (uint32_t op = get_op_begin(domain); op < op_end; ++op) - roctracer_disable_activity_impl(domain, op); + roctracer_disable_domain_activity_impl(domain); API_METHOD_SUFFIX }