[SWDEV-509876] Remove buffer requirement from device counting service (#132)
* [SWDEV-509876] Remove buffer requirement from device counting service
No longer require a buffer to be given when setting up device counting
service. This is to reduce performance overhead in cases where immediate
return of counting samples is being used (synchronous mode).
* Missed file
* Update source/include/rocprofiler-sdk/device_counting_service.h
Co-authored-by: Madsen, Jonathan <Jonathan.Madsen@amd.com>
* Update source/lib/rocprofiler-sdk/counters/controller.cpp
Co-authored-by: Madsen, Jonathan <Jonathan.Madsen@amd.com>
* Update source/lib/rocprofiler-sdk/counters/device_counting.cpp
Co-authored-by: Madsen, Jonathan <Jonathan.Madsen@amd.com>
* Fixes for build
---------
Co-authored-by: Benjamin Welton <ben@amd.com>
Co-authored-by: Madsen, Jonathan <Jonathan.Madsen@amd.com>
Co-authored-by: Benjamin Welton <bewelton@amd.com>
[ROCm/rocprofiler-sdk commit: 0c4a56c6bb]
Bu işleme şunda yer alıyor:
işlemeyi yapan:
GitHub
ebeveyn
4282aa31d9
işleme
f615e85f71
+3
-1
@@ -76,7 +76,9 @@ typedef void (*rocprofiler_device_counting_service_callback_t)(
|
||||
* @param [in] context_id context id
|
||||
* @param [in] buffer_id id of the buffer to use for the counting service. When
|
||||
* rocprofiler_sample_device_counting_service is called, counter data will be written
|
||||
* to this buffer.
|
||||
* to this buffer. If the input buffer id is null (i.e. `rocprofiler_buffer_id_t{.handle = 0}`), the
|
||||
* counter data will not be written to a buffer and will only be returned in the output_records of
|
||||
* rocprofiler_sample_device_counting_service
|
||||
* @param [in] agent_id agent to configure profiling on.
|
||||
* @param [in] cb Callback called when the context is started for the tool to specify what
|
||||
* counters to collect (rocprofiler_profile_config_id_t).
|
||||
|
||||
@@ -82,7 +82,8 @@ CounterController::configure_agent_collection(rocprofiler_context_id_t context_i
|
||||
// cannot coexist in the same context for now.
|
||||
if(ctx.pc_sampler) return ROCPROFILER_STATUS_ERROR_CONTEXT_CONFLICT;
|
||||
|
||||
if(!rocprofiler::buffer::get_buffer(buffer_id.handle))
|
||||
if(!rocprofiler::buffer::get_buffer(buffer_id) &&
|
||||
buffer_id != rocprofiler_buffer_id_t{.handle = 0})
|
||||
{
|
||||
return ROCPROFILER_STATUS_ERROR_BUFFER_NOT_FOUND;
|
||||
}
|
||||
|
||||
+4
-3
@@ -132,7 +132,7 @@ agent_async_handler(hsa_signal_value_t /*signal_v*/, void* data)
|
||||
*prof_config->agent, prof_config->required_special_counters, decoded_pkt);
|
||||
|
||||
auto* buf = buffer::get_buffer(callback_data.buffer.handle);
|
||||
if(!buf)
|
||||
if(!buf && callback_data.buffer != rocprofiler_buffer_id_t{.handle = 0})
|
||||
{
|
||||
ROCP_FATAL << fmt::format("Buffer {} destroyed before record was written",
|
||||
callback_data.buffer.handle);
|
||||
@@ -160,8 +160,9 @@ agent_async_handler(hsa_signal_value_t /*signal_v*/, void* data)
|
||||
{
|
||||
callback_data.cached_counters->push_back(val);
|
||||
}
|
||||
buf->emplace(
|
||||
ROCPROFILER_BUFFER_CATEGORY_COUNTERS, ROCPROFILER_COUNTER_RECORD_VALUE, val);
|
||||
if(buf)
|
||||
buf->emplace(
|
||||
ROCPROFILER_BUFFER_CATEGORY_COUNTERS, ROCPROFILER_COUNTER_RECORD_VALUE, val);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Yeni konuda referans
Bir kullanıcı engelle