diff --git a/src/core/loader.h b/src/core/loader.h index 27a6fda55b..aa292418c4 100644 --- a/src/core/loader.h +++ b/src/core/loader.h @@ -21,11 +21,10 @@ class BaseLoader : public T { if (handle_ == NULL) return NULL; fun_t *f = (fun_t*) dlsym(handle_, fun_name); - if (f == NULL) { + if ((to_check_symb_ == true) && (f == NULL)) { fprintf(stderr, "roctracer: symbol lookup '%s' failed: \"%s\"\n", fun_name, dlerror()); abort(); } - dlerror(); return f; } @@ -48,11 +47,10 @@ class BaseLoader : public T { BaseLoader() { const int flags = (to_load_ == true) ? RTLD_LAZY : RTLD_LAZY|RTLD_NOLOAD; handle_ = dlopen(lib_name_, flags); - if ((to_check_ == true) && (handle_ == NULL)) { + if ((to_check_open_ == true) && (handle_ == NULL)) { fprintf(stderr, "roctracer: Loading '%s' failed, %s\n", lib_name_, dlerror()); abort(); } - dlerror(); T::init(this); } @@ -62,7 +60,8 @@ class BaseLoader : public T { } static bool to_load_; - static bool to_check_; + static bool to_check_open_; + static bool to_check_symb_; static mutex_t mutex_; static const char* lib_name_; @@ -203,13 +202,15 @@ typedef BaseLoader RocTxLoader; template typename roctracer::BaseLoader::mutex_t roctracer::BaseLoader::mutex_; \ template std::atomic*> roctracer::BaseLoader::instance_{}; \ template bool roctracer::BaseLoader::to_load_ = false; \ - template bool roctracer::BaseLoader::to_check_ = true; \ + template bool roctracer::BaseLoader::to_check_open_ = true; \ + template bool roctracer::BaseLoader::to_check_symb_ = true; \ template<> const char* roctracer::RocpLoader::lib_name_ = "librocprofiler64.so"; \ - template<> bool roctracer::RocpLoader::to_load_ = true; \ + template<> bool roctracer::RocpLoader::to_check_open_ = false; \ + template<> bool roctracer::RocpLoader::to_check_symb_ = false; \ template<> const char* roctracer::HipLoader::lib_name_ = "libhip_hcc.so"; \ - template<> bool roctracer::HipLoader::to_check_ = false; \ + template<> bool roctracer::HipLoader::to_check_open_ = false; \ template<> const char* roctracer::HccLoader::lib_name_ = "libmcwamp.so"; \ - template<> bool roctracer::HccLoader::to_check_ = false; \ + template<> bool roctracer::HccLoader::to_check_open_ = false; \ template<> const char* roctracer::KfdLoader::lib_name_ = "libkfdwrapper64.so"; \ template<> const char* roctracer::RocTxLoader::lib_name_ = "libroctx64.so"; \ template<> bool roctracer::RocTxLoader::to_load_ = true; diff --git a/src/core/roctracer.cpp b/src/core/roctracer.cpp index 846648dd45..37aa0dc9eb 100644 --- a/src/core/roctracer.cpp +++ b/src/core/roctracer.cpp @@ -649,11 +649,13 @@ static roctracer_status_t roctracer_enable_callback_fun( } case ACTIVITY_DOMAIN_HSA_OPS: break; case ACTIVITY_DOMAIN_HSA_API: { +#if 0 if (op == HSA_API_ID_DISPATCH) { const bool succ = roctracer::RocpLoader::Instance().RegisterApiCallback(op, (void*)callback, user_data); if (succ == false) HCC_EXC_RAISING(ROCTRACER_STATUS_HSA_ERR, "HSA::EnableActivityCallback error(" << op << ") failed"); break; } +#endif roctracer::hsa_support::cb_table.set(op, callback, user_data); break; } @@ -735,11 +737,14 @@ static roctracer_status_t roctracer_disable_callback_fun( } case ACTIVITY_DOMAIN_HSA_OPS: break; case ACTIVITY_DOMAIN_HSA_API: { +#if 0 if (op == HSA_API_ID_DISPATCH) { const bool succ = roctracer::RocpLoader::Instance().RemoveApiCallback(op); if (succ == false) HCC_EXC_RAISING(ROCTRACER_STATUS_HSA_ERR, "HSA::RemoveActivityCallback error(" << op << ") failed"); break; } +#endif + roctracer::hsa_support::cb_table.set(op, NULL, NULL); break; } case ACTIVITY_DOMAIN_HCC_OPS: break; @@ -848,10 +853,14 @@ static roctracer_status_t roctracer_enable_activity_fun( roctracer::hsa_support::async_copy_callback_enabled = true; } else { const bool init_phase = (roctracer::RocpLoader::GetRef() == NULL); + if (roctracer::RocpLoader::Instance().InitActivityCallback == NULL) break; if (init_phase == true) { roctracer::RocpLoader::Instance().InitActivityCallback((void*)roctracer::HSA_AsyncActivityCallback, (void*)pool); } + if (roctracer::RocpLoader::Instance().EnableActivityCallback == NULL) { + EXC_RAISING(ROCTRACER_STATUS_ERROR, "EnableActivityCallback not found"); + } const bool succ = roctracer::RocpLoader::Instance().EnableActivityCallback(op, true); if (succ == false) HCC_EXC_RAISING(ROCTRACER_STATUS_HSA_ERR, "HSA::EnableActivityCallback error"); } @@ -944,6 +953,10 @@ static roctracer_status_t roctracer_disable_activity_fun( if (op == HSA_OP_ID_COPY) { roctracer::hsa_support::async_copy_callback_enabled = true; } else { + if (roctracer::RocpLoader::Instance().InitActivityCallback == NULL) break; + if (roctracer::RocpLoader::Instance().EnableActivityCallback == NULL) { + EXC_RAISING(ROCTRACER_STATUS_ERROR, "EnableActivityCallback not found"); + } const bool succ = roctracer::RocpLoader::Instance().EnableActivityCallback(op, false); if (succ == false) HCC_EXC_RAISING(ROCTRACER_STATUS_HSA_ERR, "HSA::EnableActivityCallback(false) error, op(" << op << ")"); } diff --git a/test/MatrixTranspose_test/MatrixTranspose.cpp b/test/MatrixTranspose_test/MatrixTranspose.cpp index 3877a4dead..14e3b847c0 100644 --- a/test/MatrixTranspose_test/MatrixTranspose.cpp +++ b/test/MatrixTranspose_test/MatrixTranspose.cpp @@ -312,9 +312,9 @@ void activity_callback(const char* begin, const char* end, void* arg) { if (record->op == HIP_OP_ID_COPY) fprintf(stdout, " bytes(0x%zx)", record->bytes); } else if (record->domain == ACTIVITY_DOMAIN_HSA_OPS) { fprintf(stdout, " se(%u) cycle(%lu) pc(%lx)", - record->ps_sample.se, - record->ps_sample.cycle, - record->ps_sample.pc + record->pc_sample.se, + record->pc_sample.cycle, + record->pc_sample.pc ); } else if (record->domain == ACTIVITY_DOMAIN_EXT_API) { fprintf(stdout, " external_id(%lu)", @@ -350,7 +350,6 @@ void init_tracing() { ROCTRACER_CALL(roctracer_enable_op_activity(ACTIVITY_DOMAIN_HSA_OPS, HSA_OP_ID_PCSAMPLE)); // Enable KFD API tracing ROCTRACER_CALL(roctracer_enable_domain_callback(ACTIVITY_DOMAIN_KFD_API, api_callback, NULL)); - ROCTRACER_CALL(roctracer_enable_domain_activity(ACTIVITY_DOMAIN_KFD_API)); // Enable rocTX ROCTRACER_CALL(roctracer_enable_domain_callback(ACTIVITY_DOMAIN_ROCTX, api_callback, NULL)); } @@ -368,7 +367,9 @@ void stop_tracing() { ROCTRACER_CALL(roctracer_disable_domain_callback(ACTIVITY_DOMAIN_HIP_API)); ROCTRACER_CALL(roctracer_disable_domain_activity(ACTIVITY_DOMAIN_HIP_API)); ROCTRACER_CALL(roctracer_disable_domain_activity(ACTIVITY_DOMAIN_HCC_OPS)); - ROCTRACER_CALL(roctracer_disable_domain_activity(ACTIVITY_DOMAIN_KFD_API)); + ROCTRACER_CALL(roctracer_disable_domain_activity(ACTIVITY_DOMAIN_HSA_OPS)); + ROCTRACER_CALL(roctracer_disable_domain_callback(ACTIVITY_DOMAIN_KFD_API)); + ROCTRACER_CALL(roctracer_disable_domain_callback(ACTIVITY_DOMAIN_ROCTX)); ROCTRACER_CALL(roctracer_flush_activity()); printf("# STOP #############################\n"); }