SWDEV-378008: Adding changes to serialize the kernels in rocprofV2
Change-Id: I82353ba94b3a15fdc5991e6129fe47f6765a9f74
[ROCm/rocprofiler commit: 54f6e2afb7]
This commit is contained in:
committed by
Ammar Elwazir
parent
00962f5862
commit
a157bb93b7
@@ -1,3 +1,4 @@
|
||||
|
||||
/* Copyright (c) 2022 Advanced Micro Devices, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
@@ -135,8 +136,6 @@ rocprofiler_session_id_t ROCProfiler_Singleton::CreateSession(
|
||||
}
|
||||
|
||||
void ROCProfiler_Singleton::DestroySession(rocprofiler_session_id_t session_id) {
|
||||
while (GetCurrentActiveInterruptSignalsCount() != 0) {
|
||||
}
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(session_map_lock_);
|
||||
ASSERTM(sessions_.find(session_id.handle) != sessions_.end(),
|
||||
@@ -145,7 +144,7 @@ void ROCProfiler_Singleton::DestroySession(rocprofiler_session_id_t session_id)
|
||||
sessions_.erase(session_id.handle);
|
||||
}
|
||||
}
|
||||
|
||||
profiler_serializer_t& ROCProfiler_Singleton::GetSerializer() { return profiler_serializer; }
|
||||
bool ROCProfiler_Singleton::FindDeviceProfilingSession(rocprofiler_session_id_t session_id) {
|
||||
std::lock_guard<std::mutex> lock(device_profiling_session_map_lock_);
|
||||
return dev_profiling_sessions_.find(session_id.handle) != dev_profiling_sessions_.end();
|
||||
|
||||
@@ -42,8 +42,28 @@
|
||||
#include "src/core/session/session.h"
|
||||
#include "src/core/session/device_profiling.h"
|
||||
#include "src/core/hardware/hsa_info.h"
|
||||
|
||||
#include "src/core/hsa/queues/queue.h"
|
||||
namespace rocprofiler {
|
||||
/*This is a profiler serializer. It should be instantiated
|
||||
only once for the profiler. The following is the
|
||||
description of each field.
|
||||
1. dispatch_queue - The queue to which the currently dispatched kernel
|
||||
belongs to.
|
||||
At any given time, in serialization only one kernel
|
||||
can be executing.
|
||||
2. dispatch_ready- It is a software data structure which holds
|
||||
the queues which have a kernel ready to be dispatched.
|
||||
This stores the queues in FIFO order.
|
||||
3. serializer_mutex - The mutex is used for thread synchronization
|
||||
while accessing the singleton instance of this structure.
|
||||
Currently, in case of profiling kernels are serialized by default.
|
||||
*/
|
||||
struct profiler_serializer_t {
|
||||
queue::Queue* dispatch_queue{nullptr};
|
||||
std::vector<rocprofiler::queue::Queue*> dispatch_ready;
|
||||
std::mutex serializer_mutex;
|
||||
};
|
||||
|
||||
|
||||
class ROCProfiler_Singleton {
|
||||
public:
|
||||
@@ -79,7 +99,7 @@ class ROCProfiler_Singleton {
|
||||
int cpu_agent_index, int gpu_agent_index);
|
||||
void DestroyDeviceProfilingSession(rocprofiler_session_id_t session_id);
|
||||
DeviceProfileSession* GetDeviceProfilingSession(rocprofiler_session_id_t session_id);
|
||||
|
||||
profiler_serializer_t& GetSerializer();
|
||||
|
||||
// Generic
|
||||
bool CheckFilterData(rocprofiler_filter_kind_t filter_kind,
|
||||
@@ -99,7 +119,7 @@ class ROCProfiler_Singleton {
|
||||
std::unordered_map<uint64_t, Agent::DeviceInfo> agent_device_map_;
|
||||
ROCProfiler_Singleton();
|
||||
~ROCProfiler_Singleton();
|
||||
|
||||
profiler_serializer_t profiler_serializer;
|
||||
/*
|
||||
* XXX: Associating PC samples with a running kernel requires an identifier
|
||||
* that will be unique across all kernel executions. It is not enough to use
|
||||
|
||||
Reference in New Issue
Block a user