Add support for RCCL tracing (#1047)

* [Draft]: Add support for RCCL tracing

Address comments

* [Draft]: Add support for RCCL tracing

Address PR comments, changes from RCCL upstream

* Add RCCL library table registration

Working on adding support to rocprofiler-register

* Support compilation w/o <rccl/amd_detail/api_trace.h>

- dummy api_trace.h header
- return ROCPROFILER_STATUS_ERROR_NOT_IMPLEMENTED when RCCL does not have api_trace.h header

* RCCL API tracing tool support

- add to rocprofv3
- add to json-tool

---------

Co-authored-by: Jonathan R. Madsen <jonathanrmadsen@gmail.com>
This commit is contained in:
MythreyaandJonathan R. Madsen authored and GitHub committed 2024-09-12 00:42:58 -05:00
1 parent 72cbcedc9e
commit 2a146259c7
43 files changed
+2270 -30

No files matched your search

@@ -25,6 +25,7 @@
#include <rocprofiler-sdk/hip/table_id.h>
#include <rocprofiler-sdk/hsa/table_id.h>
#include <rocprofiler-sdk/marker/table_id.h>
#include <rocprofiler-sdk/rccl/table_id.h>
#include <rocprofiler-sdk/rocprofiler.h>
#include "lib/rocprofiler-sdk/code_object/code_object.hpp"
@@ -36,6 +37,7 @@
#include "lib/rocprofiler-sdk/hsa/scratch_memory.hpp"
#include "lib/rocprofiler-sdk/kernel_dispatch/kernel_dispatch.hpp"
#include "lib/rocprofiler-sdk/marker/marker.hpp"
#include "lib/rocprofiler-sdk/rccl/rccl.hpp"
#include "lib/rocprofiler-sdk/registration.hpp"
#include <atomic>
@@ -79,6 +81,7 @@ ROCPROFILER_CALLBACK_TRACING_KIND_STRING(CODE_OBJECT)
ROCPROFILER_CALLBACK_TRACING_KIND_STRING(SCRATCH_MEMORY)
ROCPROFILER_CALLBACK_TRACING_KIND_STRING(KERNEL_DISPATCH)
ROCPROFILER_CALLBACK_TRACING_KIND_STRING(MEMORY_COPY)
ROCPROFILER_CALLBACK_TRACING_KIND_STRING(RCCL_API)
template <size_t Idx, size_t... Tail>
std::pair<const char*, size_t>
@@ -89,6 +92,19 @@ get_kind_name(rocprofiler_callback_tracing_kind_t kind, std::index_sequence<Idx,
if constexpr(sizeof...(Tail) > 0) return get_kind_name(kind, std::index_sequence<Tail...>{});
return {nullptr, 0};
}
auto
get_unsupported()
{
auto unsupported = std::unordered_set<rocprofiler_callback_tracing_kind_t>{};
#if ROCPROFILER_SDK_RCCL_HAS_API_TRACE == 0
// Built against RCCL which does not support API tracing
unsupported.emplace(ROCPROFILER_CALLBACK_TRACING_RCCL_API);
#endif
return unsupported;
}
} // namespace
} // namespace callback_tracing
} // namespace rocprofiler
@@ -102,9 +118,13 @@ rocprofiler_configure_callback_tracing_service(rocprofiler_context_id_t
rocprofiler_callback_tracing_cb_t callback,
void* callback_args)
{
static auto unsupported = ::rocprofiler::callback_tracing::get_unsupported();
if(rocprofiler::registration::get_init_status() > -1)
return ROCPROFILER_STATUS_ERROR_CONFIGURATION_LOCKED;
if(unsupported.count(kind) > 0) return ROCPROFILER_STATUS_ERROR_NOT_IMPLEMENTED;
auto* ctx = rocprofiler::context::get_mutable_registered_context(context_id);
if(!ctx) return ROCPROFILER_STATUS_ERROR_CONTEXT_NOT_FOUND;
@@ -200,6 +220,11 @@ rocprofiler_query_callback_tracing_kind_operation_name(rocprofiler_callback_trac
val = rocprofiler::marker::name_by_id<ROCPROFILER_MARKER_TABLE_ID_RoctxName>(operation);
break;
}
case ROCPROFILER_CALLBACK_TRACING_RCCL_API:
{
val = rocprofiler::rccl::name_by_id<ROCPROFILER_RCCL_TABLE_ID>(operation);
break;
}
case ROCPROFILER_CALLBACK_TRACING_HIP_RUNTIME_API:
{
val = rocprofiler::hip::name_by_id<ROCPROFILER_HIP_TABLE_ID_Runtime>(operation);
@@ -309,6 +334,11 @@ rocprofiler_iterate_callback_tracing_kind_operations(
ops = rocprofiler::marker::get_ids<ROCPROFILER_MARKER_TABLE_ID_RoctxName>();
break;
}
case ROCPROFILER_CALLBACK_TRACING_RCCL_API:
{
ops = rocprofiler::rccl::get_ids<ROCPROFILER_RCCL_TABLE_ID>();
break;
}
case ROCPROFILER_CALLBACK_TRACING_HIP_RUNTIME_API:
{
ops = rocprofiler::hip::get_ids<ROCPROFILER_HIP_TABLE_ID_Runtime>();
@@ -463,6 +493,7 @@ rocprofiler_iterate_callback_tracing_kind_operation_args(
case ROCPROFILER_CALLBACK_TRACING_CODE_OBJECT:
case ROCPROFILER_CALLBACK_TRACING_KERNEL_DISPATCH:
case ROCPROFILER_CALLBACK_TRACING_MEMORY_COPY:
case ROCPROFILER_CALLBACK_TRACING_RCCL_API:
{
return ROCPROFILER_STATUS_ERROR_NOT_IMPLEMENTED;
}