Use rocprofiler-sdk for RCCL-API tracing (#126)

- Add support for RCCL API tracing through rocprofiler-sdk.
- Refactored the comm_data code to use the SDK RCCL_API callbacks.
- Add a runtime version check for SDK to gate callback enablement, rather than just the compile-time check.
- Fixed: SAMPLING_TIMEOUT was not being handled correctly in add_test.
This commit is contained in:
David Galiffi
2025-06-06 11:36:17 -04:00
committed by GitHub
parent c5507e3740
commit af77d93f75
31 changed files with 350 additions and 1252 deletions
+64 -13
View File
@@ -218,6 +218,30 @@ get_operations_impl(const std::unordered_set<int32_t>& _complete,
} // namespace
/// @brief Return the version of the rocprofiler-sdk
/// @return The version of the rocprofiler-sdk or 0 if not initialized
version_info&
get_version()
{
static auto _version = version_info{ 0 };
if(_version.formatted == 0)
{
uint32_t _major = 0;
uint32_t _minor = 0;
uint32_t _patch = 0;
ROCPROFILER_CALL(rocprofiler_get_version(&_major, &_minor, &_patch));
_version.major = _major;
_version.minor = _minor;
_version.patch = _patch;
_version.formatted = _major * 10000 + _minor * 100 + _patch;
}
return _version;
}
void
config_settings(const std::shared_ptr<settings>& _config)
{
@@ -319,6 +343,7 @@ config_settings(const std::shared_ptr<settings>& _config)
join::join(join::array_config{ ", ", "", "" }, _domain_choices));
auto _domain_defaults = std::string{ "hip_runtime_api,marker_api,kernel_dispatch,"
"memory_copy,scratch_memory" };
# if(ROCPROFILER_VERSION < 10000)
_domain_defaults.append(",page_migration");
# endif
@@ -353,28 +378,48 @@ std::unordered_set<rocprofiler_callback_tracing_kind_t>
get_callback_domains()
{
const auto callback_tracing_info = rocprofiler::sdk::get_callback_tracing_names();
const auto supported = std::unordered_set<rocprofiler_callback_tracing_kind_t>
{
auto supported = std::unordered_set<rocprofiler_callback_tracing_kind_t>{
ROCPROFILER_CALLBACK_TRACING_HSA_CORE_API,
ROCPROFILER_CALLBACK_TRACING_HSA_AMD_EXT_API,
ROCPROFILER_CALLBACK_TRACING_HSA_IMAGE_EXT_API,
ROCPROFILER_CALLBACK_TRACING_HSA_FINALIZE_EXT_API,
ROCPROFILER_CALLBACK_TRACING_HIP_RUNTIME_API,
ROCPROFILER_CALLBACK_TRACING_HIP_COMPILER_API,
ROCPROFILER_CALLBACK_TRACING_MARKER_CORE_API,
ROCPROFILER_CALLBACK_TRACING_CODE_OBJECT,
# if(ROCPROFILER_VERSION >= 700)
ROCPROFILER_CALLBACK_TRACING_ROCDECODE_API,
ROCPROFILER_CALLBACK_TRACING_ROCJPEG_API,
# endif
ROCPROFILER_CALLBACK_TRACING_HSA_AMD_EXT_API,
ROCPROFILER_CALLBACK_TRACING_HSA_IMAGE_EXT_API,
ROCPROFILER_CALLBACK_TRACING_HSA_FINALIZE_EXT_API,
ROCPROFILER_CALLBACK_TRACING_HIP_RUNTIME_API,
ROCPROFILER_CALLBACK_TRACING_HIP_COMPILER_API,
ROCPROFILER_CALLBACK_TRACING_MARKER_CORE_API,
ROCPROFILER_CALLBACK_TRACING_CODE_OBJECT,
};
auto _version = get_version();
ROCPROFSYS_WARNING_IF(_version.formatted == 0,
"Warning! rocprofiler-sdk version not initialized\n");
# if(ROCPROFILER_VERSION >= 600)
if(_version.formatted >= 600)
{
// Argument tracing is supported in rocprofiler-sdk 0.6.0 and later
supported.emplace(ROCPROFILER_CALLBACK_TRACING_RCCL_API);
supported.emplace(ROCPROFILER_CALLBACK_TRACING_ROCDECODE_API);
}
# endif
# if(ROCPROFILER_VERSION >= 700)
if(_version.formatted >= 700)
{
supported.emplace(ROCPROFILER_CALLBACK_TRACING_ROCJPEG_API);
}
# endif
auto _data = std::unordered_set<rocprofiler_callback_tracing_kind_t>{};
auto _domains =
tim::delimit(config::get_setting_value<std::string>("ROCPROFSYS_ROCM_DOMAINS")
.value_or(std::string{}),
" ,;:\t\n");
if(config::get_use_rcclp() && _version.formatted >= 600)
{
// Translate ROCPROFSYS_USE_RCCLP to entry in ROCPROFSYS_ROCM_DOMAINS
_data.emplace(ROCPROFILER_CALLBACK_TRACING_RCCL_API);
}
const auto valid_choices =
settings::instance()->at("ROCPROFSYS_ROCM_DOMAINS")->get_choices();
@@ -582,6 +627,12 @@ void
config_settings(const std::shared_ptr<settings>&)
{}
version_info&
get_version()
{
static auto _version = version_info{ 0 };
return _version;
}
} // namespace rocprofiler_sdk
} // namespace rocprofsys