optimized common activity callback mechanism
[ROCm/roctracer commit: e91313a3ff]
This commit is contained in:
@@ -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<mutex_t> lck(mutex_);
|
||||
if (instance_ == NULL) {
|
||||
@@ -83,19 +88,16 @@ class HccLoader : protected Loader {
|
||||
}
|
||||
|
||||
HccLoader() : Loader("libmcwamp.so") {
|
||||
// Kalmar::CLAMP::SetActivityCallback
|
||||
// _ZN6Kalmar5CLAMP19SetActivityCallbackEjPvS1_
|
||||
SetActivityCallback = GetFun<SetActivityCallback_t>("_ZN6Kalmar5CLAMP19SetActivityCallbackEjPvS1_");
|
||||
// Kalmar::CLAMP::SetActivityIdCallback
|
||||
// _ZN6Kalmar5CLAMP21SetActivityIdCallbackEPv
|
||||
SetActivityIdCallback = GetFun<SetActivityIdCallback_t>("_ZN6Kalmar5CLAMP21SetActivityIdCallbackEPv");
|
||||
// Kalmar::CLAMP::InitActivityCallback
|
||||
InitActivityCallback = GetFun<InitActivityCallback_t>("_ZN6Kalmar5CLAMP20InitActivityCallbackEPvS1_S1_");
|
||||
// Kalmar::CLAMP::EnableActivityIdCallback
|
||||
EnableActivityCallback = GetFun<EnableActivityCallback_t>("_ZN6Kalmar5CLAMP22EnableActivityCallbackEjb");
|
||||
// Kalmar::CLAMP::GetCmdName
|
||||
// _ZN6Kalmar5CLAMP10GetCmdNameEj
|
||||
GetCmdName = GetFun<GetCmdName_t>("_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_
|
||||
|
||||
@@ -530,7 +530,6 @@ PUBLIC_API roctracer_pool_t* roctracer_default_pool(roctracer_pool_t* pool) {
|
||||
std::lock_guard<roctracer::memory_pool_mutex_t> lock(roctracer::memory_pool_mutex);
|
||||
roctracer_pool_t* p = reinterpret_cast<roctracer_pool_t*>(roctracer::memory_pool);
|
||||
if (pool != NULL) roctracer::memory_pool = reinterpret_cast<roctracer::MemoryPool*>(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: {
|
||||
|
||||
@@ -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
|
||||
|
||||
Referens i nytt ärende
Block a user