SDK: counter collection serialization per device (#1157)

Migrates profiler_serializer class in QueueController to have an instance per-agent instead of one globally. Other changes in this commit are to allow for maps of the queues associated with each agent to be passed to profiler_serializer when it is turned on/off. Existing test cases cover whether or not the kernels are serialized (multistream app). New test case added to show that this serialization only occurs on a per device level with a kernel launched on one device waiting for a value to be set on the other.
Этот коммит содержится в:
Benjamin Welton
2024-10-25 13:13:36 -07:00
коммит произвёл GitHub
родитель 5e1643cf81
Коммит 4a5b1d98c2
13 изменённых файлов: 275 добавлений и 51 удалений
+5 -5
Просмотреть файл
@@ -36,7 +36,7 @@ profiler_serializer_ready_signal_handler(hsa_signal_value_t /* signal_value */,
auto* hsa_queue = static_cast<hsa_queue_t*>(data);
const auto* queue = CHECK_NOTNULL(get_queue_controller())->get_queue(*hsa_queue);
CHECK(queue);
CHECK_NOTNULL(get_queue_controller())->serializer().wlock([&](auto& serializer) {
CHECK_NOTNULL(get_queue_controller())->serializer(queue).wlock([&](auto& serializer) {
serializer.queue_ready(hsa_queue, *queue);
});
return true;
@@ -242,7 +242,7 @@ profiler_serializer::destroy_queue(hsa_queue_t* id, const Queue& queue)
// Enable the serializer
void
profiler_serializer::enable(const queue_map_t& queues)
profiler_serializer::enable(const hsa_barrier::queue_map_ptr_t& queues)
{
if(_serializer_status == Status::ENABLED) return;
@@ -257,14 +257,14 @@ profiler_serializer::enable(const queue_map_t& queues)
std::make_unique<hsa_barrier>(
[] {}, CHECK_NOTNULL(get_queue_controller())->get_core_table()));
_serializer_status = Status::ENABLED;
_barrier.back().barrier->set_barrier(queues);
_barrier.back().barrier->set_barrier(queues);
ROCP_INFO << "Profiler serialization enabled";
}
// Disable the serializer
void
profiler_serializer::disable(const queue_map_t& queues)
profiler_serializer::disable(const hsa_barrier::queue_map_ptr_t& queues)
{
if(_serializer_status == Status::DISABLED) return;
@@ -279,8 +279,8 @@ profiler_serializer::disable(const queue_map_t& queues)
std::make_unique<hsa_barrier>(
[] {}, CHECK_NOTNULL(get_queue_controller())->get_core_table()));
_serializer_status = Status::DISABLED;
_barrier.back().barrier->set_barrier(queues);
_barrier.back().barrier->set_barrier(queues);
ROCP_INFO << "Profiler serialization disabled";
}