rocDecode Buffer Tracing Support (#315)

* Added buffer tracing support for rocdecode and updated tests to work with buffer tracing

* Updated perfetto to output args individually rather than as a string list

* Updated docstrings and operation type, changed OTF2 code to remove warning due to change in operation type

* Updated tests for review comments

* Test args exist and return value

* Updated to use string entry

* Change function name

* Updated PR to reflect review comments

* Updated for PR review comments

* Change function name
This commit is contained in:
Trowbridge, Ian
2025-04-11 16:56:36 -05:00
committato da GitHub
parent 379d760fc1
commit 077723337a
28 ha cambiato i file con 391 aggiunte e 146 eliminazioni
+34 -3
Vedi File
@@ -908,8 +908,10 @@ auto corr_id_retire_records =
std::deque<rocprofiler_buffer_tracing_correlation_id_retirement_record_t>{};
auto rccl_api_bf_records = std::deque<rocprofiler_buffer_tracing_rccl_api_record_t>{};
auto rocdecode_api_bf_records = std::deque<rocprofiler_buffer_tracing_rocdecode_api_record_t>{};
auto rocjpeg_api_bf_records = std::deque<rocprofiler_buffer_tracing_rocjpeg_api_record_t>{};
auto ompt_bf_records = std::deque<rocprofiler_buffer_tracing_ompt_record_t>{};
auto rocdecode_api_ext_bf_records =
std::deque<rocprofiler_buffer_tracing_rocdecode_api_ext_record_t>{};
auto rocjpeg_api_bf_records = std::deque<rocprofiler_buffer_tracing_rocjpeg_api_record_t>{};
auto ompt_bf_records = std::deque<rocprofiler_buffer_tracing_ompt_record_t>{};
void
tool_tracing_buffered(rocprofiler_context_id_t /*context*/,
@@ -1043,6 +1045,13 @@ tool_tracing_buffered(rocprofiler_context_id_t /*context*/,
rocdecode_api_bf_records.emplace_back(*record);
}
else if(header->kind == ROCPROFILER_BUFFER_TRACING_ROCDECODE_API_EXT)
{
auto* record = static_cast<rocprofiler_buffer_tracing_rocdecode_api_ext_record_t*>(
header->payload);
rocdecode_api_ext_bf_records.emplace_back(*record);
}
else if(header->kind == ROCPROFILER_BUFFER_TRACING_ROCJPEG_API)
{
auto* record =
@@ -1150,6 +1159,7 @@ rocprofiler_context_id_t runtime_init_callback_ctx = {};
rocprofiler_context_id_t runtime_init_buffered_ctx = {};
rocprofiler_context_id_t rocdecode_api_callback_ctx = {0};
rocprofiler_context_id_t rocdecode_api_buffered_ctx = {0};
rocprofiler_context_id_t rocdecode_api_ext_buffered_ctx = {0};
rocprofiler_context_id_t rocjpeg_api_callback_ctx = {0};
rocprofiler_context_id_t rocjpeg_api_buffered_ctx = {0};
@@ -1167,6 +1177,7 @@ rocprofiler_buffer_id_t scratch_memory_buffer = {};
rocprofiler_buffer_id_t corr_id_retire_buffer = {};
rocprofiler_buffer_id_t rccl_api_buffered_buffer = {};
rocprofiler_buffer_id_t rocdecode_api_buffer = {};
rocprofiler_buffer_id_t rocdecode_api_ext_buffer = {};
rocprofiler_buffer_id_t rocjpeg_api_buffer = {};
rocprofiler_buffer_id_t ompt_buffered_buffer = {};
@@ -1195,12 +1206,13 @@ auto contexts = std::unordered_map<std::string_view, rocprofiler_context_id_t*>{
{"RCCL_API_BUFFERED", &rccl_api_buffered_ctx},
{"ROCDECODE_API_CALLBACK", &rocdecode_api_callback_ctx},
{"ROCDECODE_API_BUFFERED", &rocdecode_api_buffered_ctx},
{"ROCDECODE_API_EXT_BUFFERED", &rocdecode_api_ext_buffered_ctx},
{"ROCJPEG_API_CALLBACK", &rocjpeg_api_callback_ctx},
{"ROCJPEG_API_BUFFERED", &rocjpeg_api_buffered_ctx},
{"OMPT_BUFFERED", &ompt_buffered_ctx},
};
auto buffers = std::array<rocprofiler_buffer_id_t*, 15>{&runtime_init_buffered_buffer,
auto buffers = std::array<rocprofiler_buffer_id_t*, 16>{&runtime_init_buffered_buffer,
&hsa_api_buffered_buffer,
&hip_api_buffered_buffer,
&marker_api_buffered_buffer,
@@ -1214,6 +1226,7 @@ auto buffers = std::array<rocprofiler_buffer_id_t*, 15>{&runtime_init_buffered_b
&rccl_api_buffered_buffer,
&ompt_buffered_buffer,
&rocdecode_api_buffer,
&rocdecode_api_ext_buffer,
&rocjpeg_api_buffer};
auto agents = std::vector<rocprofiler_agent_t>{};
@@ -1526,6 +1539,14 @@ tool_init(rocprofiler_client_finalize_t fini_func, void* tool_data)
tool_data,
&rocdecode_api_buffer),
"buffer creation");
ROCPROFILER_CALL(rocprofiler_create_buffer(rocdecode_api_ext_buffered_ctx,
buffer_size,
watermark,
ROCPROFILER_BUFFER_POLICY_LOSSLESS,
tool_tracing_buffered,
tool_data,
&rocdecode_api_ext_buffer),
"buffer creation");
ROCPROFILER_CALL(rocprofiler_create_buffer(rocjpeg_api_buffered_ctx,
buffer_size,
@@ -1668,6 +1689,14 @@ tool_init(rocprofiler_client_finalize_t fini_func, void* tool_data)
rocdecode_api_buffer),
"buffer tracing service for rocdecode api configure");
ROCPROFILER_CALL(
rocprofiler_configure_buffer_tracing_service(rocdecode_api_ext_buffered_ctx,
ROCPROFILER_BUFFER_TRACING_ROCDECODE_API_EXT,
nullptr,
0,
rocdecode_api_ext_buffer),
"buffer tracing service for rocdecode ext api configure");
ROCPROFILER_CALL(
rocprofiler_configure_buffer_tracing_service(rocjpeg_api_buffered_ctx,
ROCPROFILER_BUFFER_TRACING_ROCJPEG_API,
@@ -1847,6 +1876,7 @@ tool_fini(void* tool_data)
<< ", counter_collection_value_records=" << counter_collection_bf_records.size()
<< ", rocdecode_api_callback_records=" << rocdecode_api_cb_records.size()
<< ", rocdecode_api_bf_records=" << rocdecode_api_bf_records.size()
<< ", rocdecode_api_ext_bf_records=" << rocdecode_api_ext_bf_records.size()
<< ", rocjpeg_api_callback_records=" << rocjpeg_api_cb_records.size()
<< ", rocjpeg_api_bf_records=" << rocjpeg_api_bf_records.size() << "...\n"
<< std::flush;
@@ -1973,6 +2003,7 @@ write_json(call_stack_t* _call_stack)
json_ar(cereal::make_nvp("retired_correlation_ids", corr_id_retire_records));
json_ar(cereal::make_nvp("counter_collection", counter_collection_bf_records));
json_ar(cereal::make_nvp("rocdecode_api_traces", rocdecode_api_bf_records));
json_ar(cereal::make_nvp("rocdecode_api_ext_traces", rocdecode_api_ext_bf_records));
json_ar(cereal::make_nvp("rocjpeg_api_traces", rocjpeg_api_bf_records));
} catch(std::exception& e)
{