hcc dynamic loader

This commit is contained in:
Evgeny
2019-01-10 03:25:25 -06:00
rodzic 91af7764ad
commit 80f23e9a9f
2 zmienionych plików z 45 dodań i 48 usunięć
+34 -34
Wyświetl plik
@@ -8,6 +8,8 @@ namespace roctracer {
class Loader {
public:
typedef std::mutex mutex_t;
Loader(const char* lib_name) {
handle_ = dlopen(lib_name, RTLD_LAZY|RTLD_NODELETE);
if (handle_ == NULL) {
@@ -23,19 +25,20 @@ class Loader {
template <class fun_t>
fun_t* GetFun(const char* fun_name) { return (fun_t*) dlsym(handle_, fun_name); }
protected:
static mutex_t mutex_;
private:
void* handle_;
};
class HipLoader : protected Loader {
public:
typedef std::mutex mutex_t;
typedef decltype(hipRegisterApiCallback) hipRegisterApiCallback_t;
typedef decltype(hipRemoveApiCallback) hipRemoveApiCallback_t;
typedef decltype(hipRegisterActivityCallback) hipRegisterActivityCallback_t;
typedef decltype(hipRemoveActivityCallback) hipRemoveActivityCallback_t;
typedef decltype(hipKernelNameRef) hipKernelNameRef_t;
typedef decltype(hipRegisterApiCallback) RegisterApiCallback_t;
typedef decltype(hipRemoveApiCallback) RemoveApiCallback_t;
typedef decltype(hipRegisterActivityCallback) RegisterActivityCallback_t;
typedef decltype(hipRemoveActivityCallback) RemoveActivityCallback_t;
typedef decltype(hipKernelNameRef) KernelNameRef_t;
static HipLoader& Instance() {
std::lock_guard<mutex_t> lck(mutex_);
@@ -46,35 +49,30 @@ class HipLoader : protected Loader {
}
HipLoader() : Loader("libhip_hcc.so") {
hipRegisterApiCallback = GetFun<hipRegisterApiCallback_t>("hipRegisterApiCallback");
hipRemoveApiCallback = GetFun<hipRemoveApiCallback_t>("hipRemoveApiCallback");
hipRegisterActivityCallback = GetFun<hipRegisterActivityCallback_t>("hipRegisterActivityCallback");
hipRemoveActivityCallback = GetFun<hipRemoveActivityCallback_t>("hipRemoveActivityCallback");
hipKernelNameRef = GetFun<hipKernelNameRef_t>("hipKernelNameRef");
RegisterApiCallback = GetFun<RegisterApiCallback_t>("hipRegisterApiCallback");
RemoveApiCallback = GetFun<RemoveApiCallback_t>("hipRemoveApiCallback");
RegisterActivityCallback = GetFun<RegisterActivityCallback_t>("hipRegisterActivityCallback");
RemoveActivityCallback = GetFun<RemoveActivityCallback_t>("hipRemoveActivityCallback");
KernelNameRef = GetFun<KernelNameRef_t>("hipKernelNameRef");
}
hipRegisterApiCallback_t* hipRegisterApiCallback;
hipRemoveApiCallback_t* hipRemoveApiCallback;
hipRegisterActivityCallback_t* hipRegisterActivityCallback;
hipRemoveActivityCallback_t* hipRemoveActivityCallback;
hipKernelNameRef_t* hipKernelNameRef;
RegisterApiCallback_t* RegisterApiCallback;
RemoveApiCallback_t* RemoveApiCallback;
RegisterActivityCallback_t* RegisterActivityCallback;
RemoveActivityCallback_t* RemoveActivityCallback;
KernelNameRef_t* KernelNameRef;
private:
static HipLoader* instance_;
static mutex_t mutex_;
};
} // namespace roctracer
#if 0
namespace roctracer {
class HccLoader : protected Loader {
public:
typedef std::mutex mutex_t;
typedef decltype(Kalmar::CLAMP::SetActivityCallback) hccSetActivityCallback_t;
typedef decltype(Kalmar::CLAMP::SetActivityIdCallback) hccSetActivityIdCallback_t;
typedef decltype(Kalmar::CLAMP::GetCmdName) hccGetCmdName_t;
typedef decltype(Kalmar::CLAMP::SetActivityCallback) SetActivityCallback_t;
typedef decltype(Kalmar::CLAMP::SetActivityIdCallback) SetActivityIdCallback_t;
typedef decltype(Kalmar::CLAMP::GetCmdName) GetCmdName_t;
static HccLoader& Instance() {
std::lock_guard<mutex_t> lck(mutex_);
@@ -85,26 +83,28 @@ class HccLoader : protected Loader {
}
HccLoader() : Loader("libmcwamp.so") {
// Kalmar::CLAMP::SetActivityCallback
// _ZN6Kalmar5CLAMP19SetActivityCallbackEjPvS1_
hccSetActivityCallback = GetFun<hccSetActivityCallback_t>("Kalmar::CLAMP::SetActivityCallback");
SetActivityCallback = GetFun<SetActivityCallback_t>("_ZN6Kalmar5CLAMP19SetActivityCallbackEjPvS1_");
// Kalmar::CLAMP::SetActivityIdCallback
// _ZN6Kalmar5CLAMP21SetActivityIdCallbackEPv
hccSetActivityIdCallback = GetFun<hccSetActivityIdCallback_t>("Kalmar::CLAMP::SetActivityIdCallback");
SetActivityIdCallback = GetFun<SetActivityIdCallback_t>("_ZN6Kalmar5CLAMP21SetActivityIdCallbackEPv");
// Kalmar::CLAMP::GetCmdName
// _ZN6Kalmar5CLAMP10GetCmdNameEj
hccGetCmdName = GetFun<hccGetCmdName_t>("Kalmar::CLAMP::GetCmdName");
printf("HccLoader hccSetActivityCallback %p\n", hccSetActivityCallback);
GetCmdName = GetFun<GetCmdName_t>("_ZN6Kalmar5CLAMP10GetCmdNameEj");
}
hccSetActivityCallback_t* hccSetActivityCallback;
hccSetActivityIdCallback_t* hccSetActivityIdCallback;
hccGetCmdName_t* hccGetCmdName;
SetActivityCallback_t* SetActivityCallback;
SetActivityIdCallback_t* SetActivityIdCallback;
GetCmdName_t* GetCmdName;
private:
static HccLoader* instance_;
static mutex_t mutex_;
};
} // namespace roctracer
#if 0
namespace Kalmar {
namespace CLAMP {
extern bool SetActivityCallback(unsigned, void*, void*) __attribute__((weak_import));
+11 -14
Wyświetl plik
@@ -362,8 +362,9 @@ MemoryPool* memory_pool = NULL;
typedef std::recursive_mutex memory_pool_mutex_t;
memory_pool_mutex_t memory_pool_mutex;
Loader::mutex_t Loader::mutex_;
HipLoader* HipLoader::instance_;
HipLoader::mutex_t HipLoader::mutex_;
HccLoader* HccLoader::instance_;
namespace hsa_support {
// callbacks table
@@ -402,8 +403,7 @@ PUBLIC_API const char* roctracer_id_string(const uint32_t& domain, const uint32_
}
case ACTIVITY_DOMAIN_HCC_OPS: {
#ifdef HCC_ENABLED
return Kalmar::CLAMP::GetCmdName(kind);
// return roctracer::HccLoader::Instance().hccGetCmdName(kind);
return roctracer::HccLoader::Instance().GetCmdName(kind);
#endif
break;
}
@@ -443,7 +443,7 @@ PUBLIC_API roctracer_status_t roctracer_enable_callback(
break;
}
case ACTIVITY_DOMAIN_HIP_API: {
hipError_t hip_err = roctracer::HipLoader::Instance().hipRegisterApiCallback(id, (void*)callback, user_data);
hipError_t hip_err = roctracer::HipLoader::Instance().RegisterApiCallback(id, (void*)callback, user_data);
if (hip_err != hipSuccess) HIP_EXC_RAISING(ROCTRACER_STATUS_HIP_API_ERR, "hipRegisterApiCallback error(" << hip_err << ")");
break;
}
@@ -464,7 +464,7 @@ PUBLIC_API roctracer_status_t roctracer_disable_callback(
if (id != 0) HIP_EXC_RAISING(ROCTRACER_STATUS_BAD_PARAMETER, "DOMAIN_ANY: id != 0");
id = HIP_API_ID_ANY;
case ACTIVITY_DOMAIN_HIP_API: {
hipError_t hip_err = roctracer::HipLoader::Instance().hipRemoveApiCallback(id);
hipError_t hip_err = roctracer::HipLoader::Instance().RemoveApiCallback(id);
if (hip_err != hipSuccess) HIP_EXC_RAISING(ROCTRACER_STATUS_HIP_API_ERR, "hipRemoveApiCallback error(" << hip_err << ")");
break;
}
@@ -529,16 +529,14 @@ PUBLIC_API roctracer_status_t roctracer_enable_activity(
break;
case ACTIVITY_DOMAIN_HCC_OPS: {
#ifdef HCC_ENABLED
Kalmar::CLAMP::SetActivityIdCallback((void*)roctracer::HCC_ActivityIdCallback);
const bool err = Kalmar::CLAMP::SetActivityCallback(id, (void*)roctracer::HCC_AsyncActivityCallback, (void*)pool);
// roctracer::HccLoader::Instance().hccSetActivityIdCallback((void*)roctracer::HCC_ActivityIdCallback);
// const bool err = roctracer::HccLoader::Instance().hccSetActivityCallback(id, (void*)roctracer::HCC_AsyncActivityCallback, (void*)pool);
roctracer::HccLoader::Instance().SetActivityIdCallback((void*)roctracer::HCC_ActivityIdCallback);
const bool err = roctracer::HccLoader::Instance().SetActivityCallback(id, (void*)roctracer::HCC_AsyncActivityCallback, (void*)pool);
if (err == true) HCC_EXC_RAISING(ROCTRACER_STATUS_HCC_OPS_ERR, "HCC::SetActivityCallback error");
#endif
break;
}
case ACTIVITY_DOMAIN_HIP_API: {
const hipError_t hip_err = roctracer::HipLoader::Instance().hipRegisterActivityCallback(id, (void*)roctracer::HIP_SyncActivityCallback, (void*)pool);
const hipError_t hip_err = roctracer::HipLoader::Instance().RegisterActivityCallback(id, (void*)roctracer::HIP_SyncActivityCallback, (void*)pool);
if (hip_err != hipSuccess) HIP_EXC_RAISING(ROCTRACER_STATUS_HIP_API_ERR, "hipRegisterActivityCallback error(" << hip_err << ")");
break;
}
@@ -564,14 +562,13 @@ PUBLIC_API roctracer_status_t roctracer_disable_activity(
break;
case ACTIVITY_DOMAIN_HCC_OPS: {
#ifdef HCC_ENABLED
const bool err = Kalmar::CLAMP::SetActivityCallback(id, NULL, NULL);
// const bool err = roctracer::HccLoader::Instance().hccSetActivityCallback(id, NULL, NULL);
if (err == true) HCC_EXC_RAISING(ROCTRACER_STATUS_HCC_OPS_ERR, "Kalmar::CLAMP::SetActivityCallback(NULL) error");
const bool err = roctracer::HccLoader::Instance().SetActivityCallback(id, NULL, NULL);
if (err == true) HCC_EXC_RAISING(ROCTRACER_STATUS_HCC_OPS_ERR, "HCC::SetActivityCallback(NULL) error");
#endif
break;
}
case ACTIVITY_DOMAIN_HIP_API: {
const hipError_t hip_err = roctracer::HipLoader::Instance().hipRemoveActivityCallback(id);
const hipError_t hip_err = roctracer::HipLoader::Instance().RemoveActivityCallback(id);
if (hip_err != hipSuccess) HIP_EXC_RAISING(ROCTRACER_STATUS_HIP_API_ERR, "hipRemoveActivityCallback error(" << hip_err << ")");
break;
}