roctx domain is enabled check
This commit is contained in:
+19
-3
@@ -14,8 +14,20 @@ class BaseLoader : public T {
|
|||||||
typedef std::mutex mutex_t;
|
typedef std::mutex mutex_t;
|
||||||
typedef BaseLoader<T> loader_t;
|
typedef BaseLoader<T> loader_t;
|
||||||
|
|
||||||
|
bool Enabled() const { return (handle_ != NULL); }
|
||||||
|
|
||||||
template <class fun_t>
|
template <class fun_t>
|
||||||
fun_t* GetFun(const char* fun_name) { return (fun_t*) dlsym(handle_, fun_name); }
|
fun_t* GetFun(const char* fun_name) {
|
||||||
|
if (handle_ == NULL) return NULL;
|
||||||
|
|
||||||
|
fun_t *f = (fun_t*) dlsym(handle_, fun_name);
|
||||||
|
if (f == NULL) {
|
||||||
|
fprintf(stderr, "roctracer: symbol lookup '%s' failed: \"%s\"\n", fun_name, dlerror());
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
dlerror();
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
static inline loader_t& Instance(const bool& preload = false) {
|
static inline loader_t& Instance(const bool& preload = false) {
|
||||||
loader_t* obj = instance_.load(std::memory_order_acquire);
|
loader_t* obj = instance_.load(std::memory_order_acquire);
|
||||||
@@ -35,10 +47,11 @@ class BaseLoader : public T {
|
|||||||
BaseLoader(bool preload) {
|
BaseLoader(bool preload) {
|
||||||
const int flags = (preload) ? RTLD_LAZY : RTLD_LAZY|RTLD_NOLOAD;
|
const int flags = (preload) ? RTLD_LAZY : RTLD_LAZY|RTLD_NOLOAD;
|
||||||
handle_ = dlopen(lib_name_, flags);
|
handle_ = dlopen(lib_name_, flags);
|
||||||
if (handle_ == NULL) {
|
if ((handle_ == NULL) && (strong_ld_check_)) {
|
||||||
fprintf(stderr, "roctracer: Loading '%s' failed, preload(%d), %s\n", lib_name_, (int)preload, dlerror());
|
fprintf(stderr, "roctracer: Loading '%s' failed, preload(%d), %s\n", lib_name_, (int)preload, dlerror());
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
dlerror();
|
||||||
|
|
||||||
T::init(this);
|
T::init(this);
|
||||||
}
|
}
|
||||||
@@ -50,6 +63,7 @@ class BaseLoader : public T {
|
|||||||
static mutex_t mutex_;
|
static mutex_t mutex_;
|
||||||
static const char* lib_name_;
|
static const char* lib_name_;
|
||||||
static std::atomic<loader_t*> instance_;
|
static std::atomic<loader_t*> instance_;
|
||||||
|
static const bool strong_ld_check_;
|
||||||
void* handle_;
|
void* handle_;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -153,9 +167,11 @@ typedef BaseLoader<RocTxApi> RocTxLoader;
|
|||||||
#define LOADER_INSTANTIATE() \
|
#define LOADER_INSTANTIATE() \
|
||||||
template<class T> typename roctracer::BaseLoader<T>::mutex_t roctracer::BaseLoader<T>::mutex_; \
|
template<class T> typename roctracer::BaseLoader<T>::mutex_t roctracer::BaseLoader<T>::mutex_; \
|
||||||
template<class T> std::atomic<roctracer::BaseLoader<T>*> roctracer::BaseLoader<T>::instance_{}; \
|
template<class T> std::atomic<roctracer::BaseLoader<T>*> roctracer::BaseLoader<T>::instance_{}; \
|
||||||
|
template<class T> const bool roctracer::BaseLoader<T>::strong_ld_check_ = false;
|
||||||
template<> const char* roctracer::HipLoader::lib_name_ = "libhip_hcc.so"; \
|
template<> const char* roctracer::HipLoader::lib_name_ = "libhip_hcc.so"; \
|
||||||
template<> const char* roctracer::HccLoader::lib_name_ = "libmcwamp_hsa.so"; \
|
template<> const char* roctracer::HccLoader::lib_name_ = "libmcwamp_hsa.so"; \
|
||||||
template<> const char* roctracer::KfdLoader::lib_name_ = "libkfdwrapper64.so"; \
|
template<> const char* roctracer::KfdLoader::lib_name_ = "libkfdwrapper64.so"; \
|
||||||
template<> const char* roctracer::RocTxLoader::lib_name_ = "libroctx64.so";
|
template<> const char* roctracer::RocTxLoader::lib_name_ = "libroctx64.so"; \
|
||||||
|
template<> const bool roctracer::RocTxLoader::strong_ld_check_ = false;
|
||||||
|
|
||||||
#endif // SRC_CORE_LOADER_H_
|
#endif // SRC_CORE_LOADER_H_
|
||||||
|
|||||||
@@ -686,8 +686,10 @@ static void roctracer_enable_callback_impl(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ACTIVITY_DOMAIN_ROCTX: {
|
case ACTIVITY_DOMAIN_ROCTX: {
|
||||||
const bool suc = roctracer::RocTxLoader::Instance().RegisterApiCallback(op, (void*)callback, user_data);
|
if (roctracer::RocTxLoader::Instance().Enabled()) {
|
||||||
if (suc == false) EXC_RAISING(ROCTRACER_STATUS_ROCTX_ERR, "roctxRegisterApiCallback(" << op << ") failed");
|
const bool suc = roctracer::RocTxLoader::Instance().RegisterApiCallback(op, (void*)callback, user_data);
|
||||||
|
if (suc == false) EXC_RAISING(ROCTRACER_STATUS_ROCTX_ERR, "roctxRegisterApiCallback(" << op << ") failed");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@@ -751,8 +753,10 @@ static void roctracer_disable_callback_impl(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ACTIVITY_DOMAIN_ROCTX: {
|
case ACTIVITY_DOMAIN_ROCTX: {
|
||||||
const bool suc = roctracer::RocTxLoader::Instance().RemoveApiCallback(op);
|
if (roctracer::RocTxLoader::Instance().Enabled()) {
|
||||||
if (suc == false) EXC_RAISING(ROCTRACER_STATUS_ROCTX_ERR, "roctxRemoveApiCallback(" << op << ") failed");
|
const bool suc = roctracer::RocTxLoader::Instance().RemoveApiCallback(op);
|
||||||
|
if (suc == false) EXC_RAISING(ROCTRACER_STATUS_ROCTX_ERR, "roctxRemoveApiCallback(" << op << ") failed");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|||||||
Reference in New Issue
Block a user