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.
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
5e1643cf81
Коммит
4a5b1d98c2
@@ -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";
|
||||
}
|
||||
|
||||
|
||||
Ссылка в новой задаче
Block a user