From e91313a3ff0b434a7b2a8113a6e79e1976947908 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Tue, 15 Jan 2019 10:41:51 -0600 Subject: [PATCH] optimized common activity callback mechanism --- src/core/loader.h | 45 ++++++------------- src/core/roctracer.cpp | 15 ++++--- test/MatrixTranspose_test/MatrixTranspose.cpp | 20 ++++++--- 3 files changed, 36 insertions(+), 44 deletions(-) diff --git a/src/core/loader.h b/src/core/loader.h index 9ecec2c766..0df9b491fb 100644 --- a/src/core/loader.h +++ b/src/core/loader.h @@ -6,6 +6,7 @@ namespace roctracer { +// Base runtime loader class class Loader { public: typedef std::mutex mutex_t; @@ -32,6 +33,7 @@ class Loader { void* handle_; }; +// HIP runtime library loader class class HipLoader : protected Loader { public: typedef decltype(hipRegisterApiCallback) RegisterApiCallback_t; @@ -66,14 +68,17 @@ class HipLoader : protected Loader { static HipLoader* instance_; }; +// HCC runtime library loader class class HccLoader : protected Loader { public: typedef std::mutex mutex_t; - typedef decltype(Kalmar::CLAMP::SetActivityCallback) SetActivityCallback_t; - typedef decltype(Kalmar::CLAMP::SetActivityIdCallback) SetActivityIdCallback_t; + typedef decltype(Kalmar::CLAMP::InitActivityCallback) InitActivityCallback_t; + typedef decltype(Kalmar::CLAMP::EnableActivityCallback) EnableActivityCallback_t; typedef decltype(Kalmar::CLAMP::GetCmdName) GetCmdName_t; + static HccLoader* GetRef() { return instance_; } + static HccLoader& Instance() { std::lock_guard lck(mutex_); if (instance_ == NULL) { @@ -83,19 +88,16 @@ class HccLoader : protected Loader { } HccLoader() : Loader("libmcwamp.so") { - // Kalmar::CLAMP::SetActivityCallback - // _ZN6Kalmar5CLAMP19SetActivityCallbackEjPvS1_ - SetActivityCallback = GetFun("_ZN6Kalmar5CLAMP19SetActivityCallbackEjPvS1_"); - // Kalmar::CLAMP::SetActivityIdCallback - // _ZN6Kalmar5CLAMP21SetActivityIdCallbackEPv - SetActivityIdCallback = GetFun("_ZN6Kalmar5CLAMP21SetActivityIdCallbackEPv"); + // Kalmar::CLAMP::InitActivityCallback + InitActivityCallback = GetFun("_ZN6Kalmar5CLAMP20InitActivityCallbackEPvS1_S1_"); + // Kalmar::CLAMP::EnableActivityIdCallback + EnableActivityCallback = GetFun("_ZN6Kalmar5CLAMP22EnableActivityCallbackEjb"); // Kalmar::CLAMP::GetCmdName - // _ZN6Kalmar5CLAMP10GetCmdNameEj GetCmdName = GetFun("_ZN6Kalmar5CLAMP10GetCmdNameEj"); } - SetActivityCallback_t* SetActivityCallback; - SetActivityIdCallback_t* SetActivityIdCallback; + InitActivityCallback_t* InitActivityCallback; + EnableActivityCallback_t* EnableActivityCallback; GetCmdName_t* GetCmdName; private: @@ -104,25 +106,4 @@ class HccLoader : protected Loader { } // namespace roctracer -#if 0 -namespace Kalmar { -namespace CLAMP { -extern bool SetActivityCallback(unsigned, void*, void*) __attribute__((weak_import)); -extern void SetActivityIdCallback(void*) __attribute__((weak_import)); -extern const char* GetCmdName(unsigned) __attribute__((weak_impot)); -}} - -namespace roctracer { -bool HccSetActivityCallback(unsigned op, void* fun, void* arg) { - printf("HccSetActivityCallback(%p)\n", Kalmar::CLAMP::SetActivityCallback); - return (Kalmar::CLAMP::SetActivityCallback != NULL) ? Kalmar::CLAMP::SetActivityCallback(op, fun, arg) : true; -} -void HccSetActivityIdCallback(void* fun) { - if (Kalmar::CLAMP::SetActivityIdCallback != NULL) Kalmar::CLAMP::SetActivityIdCallback(fun); -} -const char* HccGetCmdName(unsigned op) { - if (Kalmar::CLAMP::GetCmdName != NULL) Kalmar::CLAMP::GetCmdName(op); -} -} // namespace roctracer -#endif #endif // SRC_CORE_LOADER_H_ diff --git a/src/core/roctracer.cpp b/src/core/roctracer.cpp index 7e6d4a844b..1f3f6c117e 100644 --- a/src/core/roctracer.cpp +++ b/src/core/roctracer.cpp @@ -530,7 +530,6 @@ PUBLIC_API roctracer_pool_t* roctracer_default_pool(roctracer_pool_t* pool) { std::lock_guard lock(roctracer::memory_pool_mutex); roctracer_pool_t* p = reinterpret_cast(roctracer::memory_pool); if (pool != NULL) roctracer::memory_pool = reinterpret_cast(pool); - //if (p == NULL) EXC_RAISING(ROCTRACER_STATUS_UNINIT, "default pool is not initialized"); return p; } @@ -572,9 +571,13 @@ static void roctracer_enable_activity_impl( switch (domain) { case ACTIVITY_DOMAIN_HSA_API: break; case ACTIVITY_DOMAIN_HCC_OPS: { - roctracer::HccLoader::Instance().SetActivityIdCallback((void*)roctracer::HCC_ActivityIdCallback); - const bool succ = roctracer::HccLoader::Instance().SetActivityCallback(op, (void*)roctracer::HCC_AsyncActivityCallback, (void*)pool); - if (succ == false) HCC_EXC_RAISING(ROCTRACER_STATUS_HCC_OPS_ERR, "HCC::SetActivityCallback error"); + if (roctracer::HccLoader::GetRef() == NULL) { + roctracer::HccLoader::Instance().InitActivityCallback((void*)roctracer::HCC_ActivityIdCallback, + (void*)roctracer::HCC_AsyncActivityCallback, + (void*)pool); + } + const bool succ = roctracer::HccLoader::Instance().EnableActivityCallback(op, true); + if (succ == false) HCC_EXC_RAISING(ROCTRACER_STATUS_HCC_OPS_ERR, "HCC::EnableActivityCallback error"); break; } case ACTIVITY_DOMAIN_HIP_API: { @@ -626,8 +629,8 @@ static void roctracer_disable_activity_impl( switch (domain) { case ACTIVITY_DOMAIN_HSA_API: break; case ACTIVITY_DOMAIN_HCC_OPS: { - const bool succ = roctracer::HccLoader::Instance().SetActivityCallback(op, NULL, NULL); - if (succ == false) HCC_EXC_RAISING(ROCTRACER_STATUS_HCC_OPS_ERR, "HCC::SetActivityCallback(NULL) error domain(" << domain << ") op(" << op << ")"); + const bool succ = roctracer::HccLoader::Instance().EnableActivityCallback(op, false); + if (succ == false) HCC_EXC_RAISING(ROCTRACER_STATUS_HCC_OPS_ERR, "HCC::EnableActivityCallback(NULL) error domain(" << domain << ") op(" << op << ")"); break; } case ACTIVITY_DOMAIN_HIP_API: { diff --git a/test/MatrixTranspose_test/MatrixTranspose.cpp b/test/MatrixTranspose_test/MatrixTranspose.cpp index fe8dde97d6..46da11567b 100644 --- a/test/MatrixTranspose_test/MatrixTranspose.cpp +++ b/test/MatrixTranspose_test/MatrixTranspose.cpp @@ -56,6 +56,7 @@ void matrixTransposeCPUReference(float* output, float* input, const unsigned int } int iterations = ITERATIONS; +void init_tracing(); void start_tracing(); void stop_tracing(); @@ -75,6 +76,8 @@ int main() { int i; int errors; + init_tracing(); + while (iterations-- > 0) { start_tracing(); @@ -151,8 +154,8 @@ int main() { } \ } while (0) -// HIP API callback function -void hip_api_callback( +// Runtime API callback function +void api_callback( uint32_t domain, uint32_t cid, const void* callback_data, @@ -239,16 +242,21 @@ void activity_callback(const char* begin, const char* end, void* arg) { } } -// Start tracing routine -void start_tracing() { +// Init tracing routine +void init_tracing() { std::cout << "# START #############################" << std::endl << std::flush; // Allocating tracing pool roctracer_properties_t properties{}; properties.buffer_size = 12; properties.buffer_callback_fun = activity_callback; ROCTRACER_CALL(roctracer_open_pool(&properties)); +} + +// Start tracing routine +void start_tracing() { + std::cout << "# START #############################" << std::endl << std::flush; // Enable HIP API callbacks - ROCTRACER_CALL(roctracer_enable_callback(hip_api_callback, NULL)); + ROCTRACER_CALL(roctracer_enable_callback(api_callback, NULL)); // Enable HIP activity tracing ROCTRACER_CALL(roctracer_enable_activity()); } @@ -257,7 +265,7 @@ void start_tracing() { void stop_tracing() { ROCTRACER_CALL(roctracer_disable_callback()); ROCTRACER_CALL(roctracer_disable_activity()); - ROCTRACER_CALL(roctracer_close_pool()); + ROCTRACER_CALL(roctracer_flush_activity()); std::cout << "# STOP #############################" << std::endl << std::flush; } #else