SWDEV-408509: Added MPI awareness, dispatch ID and buffer size to ATT API. Fixed wrong dispatch ID on kernel.txt. Readme fixes.

Change-Id: Ib1e2d515d14419097d73dc28648e47ca752d95a6
Αυτή η υποβολή περιλαμβάνεται σε:
Giovanni LB
2023-06-30 21:34:35 -03:00
υποβλήθηκε από Giovanni Baraldi
γονέας 4f88f712c4
υποβολή e935632769
13 αρχεία άλλαξαν με 403 προσθήκες και 256 διαγραφές
@@ -20,6 +20,7 @@
#include "att.h"
#include <cassert>
#include <atomic>
namespace rocprofiler {
@@ -42,9 +43,11 @@ void AttTracer::AddPendingSignals(uint32_t writer_id, uint64_t kernel_object,
sessions_pending_signals_.at(writer_id).emplace_back(
att_pending_signal_t{kernel_object, original_completion_signal, new_completion_signal, session_id_, buffer_id, profile,
kernel_properties, thread_id, queue_index});
std::atomic_thread_fence(std::memory_order_release);
}
const std::vector<att_pending_signal_t>& AttTracer::GetPendingSignals(uint32_t writer_id) {
std::atomic_thread_fence(std::memory_order_acquire);
std::lock_guard<std::mutex> lock(sessions_pending_signals_lock_);
assert(sessions_pending_signals_.find(writer_id) != sessions_pending_signals_.end() &&
"writer_id is not found in the pending_signals");
@@ -192,6 +192,11 @@ void Filter::SetProperty(rocprofiler_filter_property_t property) {
}
break;
}
case ROCPROFILER_FILTER_DISPATCH_IDS:
dispatch_id_filter_.clear();
for (uint32_t j = 0; j < property.data_count; j++)
dispatch_id_filter_.emplace_back(property.dispatch_ids[j]);
break;
default:
break;
// TODO(aelwazir): Check for empty property
@@ -200,9 +205,9 @@ void Filter::SetProperty(rocprofiler_filter_property_t property) {
// "profiler mode!\n");
}
}
std::variant<std::vector<std::string>, uint32_t*> Filter::GetProperty(
std::variant<std::vector<std::string>, uint32_t*, std::vector<uint64_t>> Filter::GetProperty(
rocprofiler_filter_property_kind_t kind) {
std::variant<std::vector<std::string>, uint32_t*> property;
std::variant<std::vector<std::string>, uint32_t*, std::vector<uint64_t>> property;
switch (kind) {
case ROCPROFILER_FILTER_GPU_NAME: {
property = agent_names_;
@@ -224,6 +229,10 @@ std::variant<std::vector<std::string>, uint32_t*> Filter::GetProperty(
property = hip_tracer_api_calls_;
break;
}
case ROCPROFILER_FILTER_DISPATCH_IDS: {
property = dispatch_id_filter_;
break;
}
default:
fatal(
"Error: ROCProfiler filter specified is not supported for the given "
@@ -261,6 +270,9 @@ size_t Filter::GetPropertiesCount(rocprofiler_filter_property_kind_t kind) {
case ROCPROFILER_FILTER_HIP_TRACER_API_FUNCTIONS: {
return hip_tracer_api_calls_.size();
}
case ROCPROFILER_FILTER_DISPATCH_IDS: {
return dispatch_id_filter_.size();
}
}
fatal(
"Error: ROCProfiler filter specified is not supported for the given "
@@ -53,8 +53,12 @@ class Filter {
bool HasCallback();
void SetProperty(rocprofiler_filter_property_t property);
std::variant<std::vector<std::string>, uint32_t*> GetProperty(
rocprofiler_filter_property_kind_t kind);
std::variant<
std::vector<std::string>,
uint32_t*,
std::vector<uint64_t>
> GetProperty(rocprofiler_filter_property_kind_t kind);
size_t GetPropertiesCount(rocprofiler_filter_property_kind_t kind);
rocprofiler_spm_parameter_t* GetSpmParameterData();
rocprofiler_counters_sampler_parameters_t GetCountersSamplerParameterData();
@@ -75,6 +79,7 @@ class Filter {
rocprofiler_spm_parameter_t* spm_parameter_; // spm parameter
std::vector<rocprofiler_att_parameter_t> att_parameters_; // ATT Parameters
rocprofiler_counters_sampler_parameters_t counters_sampler_parameters_; // sampled counters parameters
std::vector<uint64_t> dispatch_id_filter_;
bool has_sync_callback_{false};
rocprofiler_sync_callback_t callback_;
@@ -133,7 +133,7 @@ void Profiler::AddPendingSignals(
std::lock_guard<std::mutex> lock(sessions_pending_signals_lock_);
if (sessions_pending_signals_->find(writer_id) == sessions_pending_signals_->end())
sessions_pending_signals_->emplace(writer_id, std::vector<pending_signal_t*>());
sessions_pending_signals_->at(writer_id).emplace_back(new pending_signal_t{
sessions_pending_signals_->at(writer_id).emplace_back(new pending_signal_t{
kernel_object, original_completion_signal, new_completion_signal, session_id_, buffer_id, context, session_data_count,
profile, kernel_properties, thread_id, queue_index, correlation_id});
}