adding KFD wrapper loader
Этот коммит содержится в:
@@ -118,6 +118,36 @@ class HccLoader : protected Loader {
|
||||
static std::atomic<HccLoader*> instance_;
|
||||
};
|
||||
|
||||
// KFD runtime library loader class
|
||||
class KfdLoader : protected Loader {
|
||||
public:
|
||||
typedef void (*RegisterApiCallback_t)(roctracer_rtapi_callback_t);
|
||||
typedef void (*RemoveApiCallback_t)();
|
||||
|
||||
static KfdLoader& Instance() {
|
||||
KfdLoader* obj = instance_.load(std::memory_order_acquire);
|
||||
if (obj == NULL) {
|
||||
std::lock_guard<mutex_t> lck(mutex_);
|
||||
if (instance_.load(std::memory_order_relaxed) == NULL) {
|
||||
obj = new KfdLoader();
|
||||
instance_.store(obj, std::memory_order_release);
|
||||
}
|
||||
}
|
||||
return *instance_;
|
||||
}
|
||||
|
||||
KfdLoader() : Loader("libkfd_wrapper.so") {
|
||||
RegisterApiCallback = GetFun<RegisterApiCallback_t>("RegisterApiCallback");
|
||||
RemoveApiCallback = GetFun<RemoveApiCallback_t>("RemoveApiCallback");
|
||||
}
|
||||
|
||||
RegisterApiCallback_t* RegisterApiCallback;
|
||||
RemoveApiCallback_t* RemoveApiCallback;
|
||||
|
||||
private:
|
||||
static std::atomic<KfdLoader*> instance_;
|
||||
};
|
||||
|
||||
} // namespace roctracer
|
||||
|
||||
#endif // SRC_CORE_LOADER_H_
|
||||
|
||||
@@ -528,6 +528,13 @@ static void roctracer_enable_callback_impl(
|
||||
void* user_data)
|
||||
{
|
||||
switch (domain) {
|
||||
#if 0
|
||||
case ACTIVITY_DOMAIN_KFD_API: {
|
||||
bool succ = roctracer::HipLoader::Instance().RegisterApiCallback(op, (void*)callback, user_data);
|
||||
if (succ == false) EXC_RAISING(ROCTRACER_STATUS_ERROR, "KFD RegisterApiCallback error");
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
case ACTIVITY_DOMAIN_HSA_OPS: break;
|
||||
case ACTIVITY_DOMAIN_HSA_API: {
|
||||
roctracer::hsa_support::cb_table.set(op, callback, user_data);
|
||||
|
||||
Ссылка в новой задаче
Block a user