SWDEV-401678: Fixed Generated Record IDs missed between different threads

Change-Id: I7f78224dcc317668ee3c54279435f253121ad539
This commit is contained in:
Ammar ELWazir
2023-05-22 17:14:11 +00:00
والد 31c9bc44e1
کامیت b6bcb5cd50
@@ -236,9 +236,7 @@ template <activity_domain_t domain> struct ApiTracer {
}; };
static void Exit(OperationId operation_id, TraceData* trace_data) { static void Exit(OperationId operation_id, TraceData* trace_data) {
uint64_t record_id = 0;
if (rocmtools::GetROCMToolObj()) { if (rocmtools::GetROCMToolObj()) {
record_id = rocmtools::GetROCMToolObj()->GetUniqueRecordId();
if (auto pool = activity_table.Get(operation_id)) { if (auto pool = activity_table.Get(operation_id)) {
if (rocmtools::GetROCMToolObj() && if (rocmtools::GetROCMToolObj() &&
rocmtools::GetROCMToolObj()->GetSession((*pool)->session_id) && rocmtools::GetROCMToolObj()->GetSession((*pool)->session_id) &&
@@ -255,8 +253,9 @@ template <activity_domain_t domain> struct ApiTracer {
->GetBufferLock()); ->GetBufferLock());
assert(trace_data != nullptr); assert(trace_data != nullptr);
rocprofiler_record_tracer_t record{}; rocprofiler_record_tracer_t record{};
record.header = rocprofiler_record_header_t{ROCPROFILER_TRACER_RECORD, record.header = rocprofiler_record_header_t{
rocprofiler_record_id_t{record_id}}; ROCPROFILER_TRACER_RECORD,
rocprofiler_record_id_t{rocmtools::GetROCMToolObj()->GetUniqueRecordId()}};
record.domain = domain; record.domain = domain;
record.operation_id = rocprofiler_tracer_operation_id_t{operation_id}; record.operation_id = rocprofiler_tracer_operation_id_t{operation_id};
record.correlation_id = record.correlation_id =
@@ -269,8 +268,9 @@ template <activity_domain_t domain> struct ApiTracer {
if (auto external_id = ExternalCorrelationId()) { if (auto external_id = ExternalCorrelationId()) {
rocprofiler_record_tracer_t ext_record{}; rocprofiler_record_tracer_t ext_record{};
ext_record.header = rocprofiler_record_header_t{ROCPROFILER_TRACER_RECORD, ext_record.header = rocprofiler_record_header_t{
rocprofiler_record_id_t{record_id}}; ROCPROFILER_TRACER_RECORD,
rocprofiler_record_id_t{rocmtools::GetROCMToolObj()->GetUniqueRecordId()}};
ext_record.domain = ACTIVITY_DOMAIN_EXT_API; ext_record.domain = ACTIVITY_DOMAIN_EXT_API;
ext_record.operation_id = ext_record.operation_id =
rocprofiler_tracer_operation_id_t{ACTIVITY_EXT_OP_EXTERN_ID}; rocprofiler_tracer_operation_id_t{ACTIVITY_EXT_OP_EXTERN_ID};
@@ -377,7 +377,6 @@ int TracerCallback(activity_domain_t domain, uint32_t operation_id, void* data)
// If the record is for a kernel dispatch, write the kernel name in the pool's data, // If the record is for a kernel dispatch, write the kernel name in the pool's data,
// and make the record point to it. Older HIP runtimes do not provide a kernel name, // and make the record point to it. Older HIP runtimes do not provide a kernel name,
// so record.kernel_name might be null. // so record.kernel_name might be null.
uint64_t record_id = 0;
if (!rocmtools::GetROCMToolObj()) return 0; if (!rocmtools::GetROCMToolObj()) return 0;
if (rocmtools::GetROCMToolObj() && if (rocmtools::GetROCMToolObj() &&
rocmtools::GetROCMToolObj()->GetSession((*pool)->session_id) && rocmtools::GetROCMToolObj()->GetSession((*pool)->session_id) &&
@@ -388,10 +387,10 @@ int TracerCallback(activity_domain_t domain, uint32_t operation_id, void* data)
->GetSession((*pool)->session_id) ->GetSession((*pool)->session_id)
->GetBuffer((*pool)->buffer_id) ->GetBuffer((*pool)->buffer_id)
->GetBufferLock()); ->GetBufferLock());
record_id = rocmtools::GetROCMToolObj()->GetUniqueRecordId();
rocprofiler_record_tracer_t rocprofiler_record{}; rocprofiler_record_tracer_t rocprofiler_record{};
rocprofiler_record.header = rocprofiler_record_header_t{ rocprofiler_record.header = rocprofiler_record_header_t{
ROCPROFILER_TRACER_RECORD, rocprofiler_record_id_t{record_id}}; ROCPROFILER_TRACER_RECORD,
rocprofiler_record_id_t{rocmtools::GetROCMToolObj()->GetUniqueRecordId()}};
rocprofiler_record.domain = domain; rocprofiler_record.domain = domain;
rocprofiler_record.external_id = rocprofiler_tracer_external_id_t{}; rocprofiler_record.external_id = rocprofiler_tracer_external_id_t{};
rocprofiler_record.operation_id = rocprofiler_tracer_operation_id_t{record->kind}; rocprofiler_record.operation_id = rocprofiler_tracer_operation_id_t{record->kind};
@@ -445,7 +444,6 @@ int TracerCallback(activity_domain_t domain, uint32_t operation_id, void* data)
case ACTIVITY_DOMAIN_HSA_OPS: case ACTIVITY_DOMAIN_HSA_OPS:
if (auto pool = hsa_ops_activity_table.Get(operation_id)) { if (auto pool = hsa_ops_activity_table.Get(operation_id)) {
if (auto record = static_cast<activity_record_t*>(data)) { if (auto record = static_cast<activity_record_t*>(data)) {
uint64_t record_id = 0;
if (!rocmtools::GetROCMToolObj()) return 0; if (!rocmtools::GetROCMToolObj()) return 0;
if (rocmtools::GetROCMToolObj() && if (rocmtools::GetROCMToolObj() &&
rocmtools::GetROCMToolObj()->GetSession((*pool)->session_id) && rocmtools::GetROCMToolObj()->GetSession((*pool)->session_id) &&
@@ -456,10 +454,10 @@ int TracerCallback(activity_domain_t domain, uint32_t operation_id, void* data)
->GetSession((*pool)->session_id) ->GetSession((*pool)->session_id)
->GetBuffer((*pool)->buffer_id) ->GetBuffer((*pool)->buffer_id)
->GetBufferLock()); ->GetBufferLock());
record_id = rocmtools::GetROCMToolObj()->GetUniqueRecordId();
rocprofiler_record_tracer_t rocprofiler_record{}; rocprofiler_record_tracer_t rocprofiler_record{};
rocprofiler_record.header = rocprofiler_record_header_t{ rocprofiler_record.header = rocprofiler_record_header_t{
ROCPROFILER_TRACER_RECORD, rocprofiler_record_id_t{record_id}}; ROCPROFILER_TRACER_RECORD,
rocprofiler_record_id_t{rocmtools::GetROCMToolObj()->GetUniqueRecordId()}};
rocprofiler_record.domain = domain; rocprofiler_record.domain = domain;
rocprofiler_record.external_id = rocprofiler_tracer_external_id_t{0}; rocprofiler_record.external_id = rocprofiler_tracer_external_id_t{0};
rocprofiler_record.operation_id = rocprofiler_tracer_operation_id_t{record->op}; rocprofiler_record.operation_id = rocprofiler_tracer_operation_id_t{record->op};
@@ -794,7 +792,9 @@ static std::string getKernelNameMultiKernelMultiDevice(hipLaunchParams* launchPa
return name_str.str(); return name_str.str();
} }
template <typename... Ts> struct Overloaded : Ts... { using Ts::operator()...; }; template <typename... Ts> struct Overloaded : Ts... {
using Ts::operator()...;
};
template <class... Ts> Overloaded(Ts...) -> Overloaded<Ts...>; template <class... Ts> Overloaded(Ts...) -> Overloaded<Ts...>;
std::optional<std::string> GetHipKernelName(uint32_t cid, hip_api_data_t* data) { std::optional<std::string> GetHipKernelName(uint32_t cid, hip_api_data_t* data) {