Этот коммит содержится в:
Evgeny
2019-07-27 06:19:35 -05:00
родитель 31b643f00c
Коммит 91bcc4cc74
5 изменённых файлов: 136 добавлений и 42 удалений
+33 -1
Просмотреть файл
@@ -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_
+12 -1
Просмотреть файл
@@ -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 << ")");
}