optimized common activity callback mechanism

[ROCm/roctracer commit: e91313a3ff]
This commit is contained in:
Evgeny
2019-01-15 10:41:51 -06:00
förälder 5f3f097516
incheckning 828ee0a7e5
3 ändrade filer med 36 tillägg och 44 borttagningar
+13 -32
Visa fil
@@ -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_
+9 -6
Visa fil
@@ -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