roctx loader
Этот коммит содержится в:
@@ -8,6 +8,8 @@
|
||||
#define LOADER_INSTANTIATE() \
|
||||
std::atomic<roctracer::HipLoader*> roctracer::HipLoader::instance_{}; \
|
||||
std::atomic<roctracer::HccLoader*> roctracer::HccLoader::instance_{}; \
|
||||
std::atomic<roctracer::KfdLoader*> roctracer::KfdLoader::instance_{}; \
|
||||
std::atomic<roctracer::RocTxLoader*> roctracer::RocTxLoader::instance_{}; \
|
||||
roctracer::Loader::mutex_t roctracer::Loader::mutex_;
|
||||
|
||||
namespace roctracer {
|
||||
@@ -139,7 +141,7 @@ class KfdLoader : protected Loader {
|
||||
return *instance_;
|
||||
}
|
||||
|
||||
KfdLoader() : Loader("libkfd_wrapper.so") {
|
||||
KfdLoader() : Loader("libkfdwrapper64.so") {
|
||||
RegisterApiCallback = GetFun<RegisterApiCallback_t>("RegisterApiCallback");
|
||||
RemoveApiCallback = GetFun<RemoveApiCallback_t>("RemoveApiCallback");
|
||||
}
|
||||
@@ -151,6 +153,36 @@ class KfdLoader : protected Loader {
|
||||
static std::atomic<KfdLoader*> instance_;
|
||||
};
|
||||
|
||||
// KFD runtime library loader class
|
||||
class RocTxLoader : protected Loader {
|
||||
public:
|
||||
typedef bool (RegisterApiCallback_t)(uint32_t op, void* callback, void* arg);
|
||||
typedef bool (RemoveApiCallback_t)(uint32_t op);
|
||||
|
||||
static RocTxLoader& Instance() {
|
||||
RocTxLoader* 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 RocTxLoader();
|
||||
instance_.store(obj, std::memory_order_release);
|
||||
}
|
||||
}
|
||||
return *instance_;
|
||||
}
|
||||
|
||||
RocTxLoader() : Loader("libroctx64.so") {
|
||||
RegisterApiCallback = GetFun<RegisterApiCallback_t>("RegisterApiCallback");
|
||||
RemoveApiCallback = GetFun<RemoveApiCallback_t>("RemoveApiCallback");
|
||||
}
|
||||
|
||||
RegisterApiCallback_t* RegisterApiCallback;
|
||||
RemoveApiCallback_t* RemoveApiCallback;
|
||||
|
||||
private:
|
||||
static std::atomic<RocTxLoader*> instance_;
|
||||
};
|
||||
|
||||
} // namespace roctracer
|
||||
|
||||
#endif // SRC_CORE_LOADER_H_
|
||||
|
||||
@@ -88,6 +88,12 @@ THE SOFTWARE.
|
||||
(void)err; \
|
||||
return X;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Mark callback
|
||||
//
|
||||
typedef void (mark_api_callback_t)(uint32_t domain, uint32_t cid, const void* callback_data, void* arg);
|
||||
mark_api_callback_t* mark_api_callback_ptr = NULL;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Internal library methods
|
||||
//
|
||||
@@ -923,6 +929,11 @@ PUBLIC_API roctracer_status_t roctracer_flush_activity(roctracer_pool_t* pool) {
|
||||
API_METHOD_SUFFIX
|
||||
}
|
||||
|
||||
// Mark API
|
||||
PUBLIC_API void roctracer_mark(const char* str) {
|
||||
if (mark_api_callback_ptr) mark_api_callback_ptr(ACTIVITY_DOMAIN_NUMBER, 0, str, NULL);
|
||||
}
|
||||
|
||||
// Set properties
|
||||
PUBLIC_API roctracer_status_t roctracer_set_properties(
|
||||
roctracer_domain_t domain,
|
||||
@@ -964,7 +975,7 @@ PUBLIC_API roctracer_status_t roctracer_set_properties(
|
||||
}
|
||||
case ACTIVITY_DOMAIN_HCC_OPS:
|
||||
case ACTIVITY_DOMAIN_HIP_API:
|
||||
EXC_RAISING(ROCTRACER_STATUS_BAD_DOMAIN, "properties are not supported, domain ID(" << domain << ")");
|
||||
mark_api_callback_ptr = reinterpret_cast<mark_api_callback_t*>(properties);
|
||||
default:
|
||||
EXC_RAISING(ROCTRACER_STATUS_BAD_DOMAIN, "invalid domain ID(" << domain << ")");
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user