[Openmp-commits] [PATCH] D156996: [OpenMP][AMDGPU] Add Envar for controlling HSA busy queue tracking
Michael Halkenhäuser via Phabricator via Openmp-commits
openmp-commits at lists.llvm.org
Thu Aug 3 05:59:20 PDT 2023
mhalk created this revision.
Herald added subscribers: kerbowa, guansong, tpr, dstuttard, yaxunl, jvesely, kzhuravl.
Herald added a project: All.
mhalk requested review of this revision.
Herald added subscribers: openmp-commits, jplehr, sstefan1, wdng.
Herald added a reviewer: jdoerfert.
Herald added a project: OpenMP.
If the Envar is set to true (default), busy HSA queues will be
actively avoided when assigning a queue to a Stream.
Otherwise, we will initialize a new HSA queue for each requested
Stream, then default to round robin once the set maximum has been
reached.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D156996
Files:
openmp/libomptarget/plugins-nextgen/amdgpu/src/rtl.cpp
Index: openmp/libomptarget/plugins-nextgen/amdgpu/src/rtl.cpp
===================================================================
--- openmp/libomptarget/plugins-nextgen/amdgpu/src/rtl.cpp
+++ openmp/libomptarget/plugins-nextgen/amdgpu/src/rtl.cpp
@@ -1461,12 +1461,15 @@
using ResourcePoolTy = GenericDeviceResourceManagerTy<ResourceRef>;
AMDGPUStreamManagerTy(GenericDeviceTy &Device, hsa_agent_t HSAAgent)
- : GenericDeviceResourceManagerTy(Device), NextQueue(0), Agent(HSAAgent) {}
+ : GenericDeviceResourceManagerTy(Device),
+ OMPX_QueueTracking("LIBOMPTARGET_AMDGPU_HSA_QUEUE_BUSY_TRACKING", true),
+ NextQueue(0), Agent(HSAAgent) {}
Error init(uint32_t InitialSize, int NumHSAQueues, int HSAQueueSize) {
Queues = std::vector<AMDGPUQueueTy>(NumHSAQueues);
QueueSize = HSAQueueSize;
MaxNumQueues = NumHSAQueues;
+ OMPX_QueueTracking = OMPX_QueueTracking.get();
// Initialize one queue eagerly
if (auto Err = Queues.front().init(Agent, QueueSize))
return Err;
@@ -1508,14 +1511,15 @@
uint32_t StartIndex = NextQueue % MaxNumQueues;
AMDGPUQueueTy *Q = nullptr;
- for (int i = 0; i < MaxNumQueues; ++i) {
- Q = &Queues[StartIndex++];
- if (StartIndex == MaxNumQueues)
- StartIndex = 0;
+ if (OMPX_QueueTracking || NextQueue < MaxNumQueues)
+ for (int i = 0; i < MaxNumQueues; ++i) {
+ Q = &Queues[StartIndex++];
+ if (StartIndex == MaxNumQueues)
+ StartIndex = 0;
+
+ if (OMPX_QueueTracking && Q->isBusy())
+ continue;
- if (Q->isBusy())
- continue;
- else {
if (auto Err = Q->init(Agent, QueueSize))
return Err;
@@ -1523,7 +1527,6 @@
Stream->Queue = Q;
return Plugin::success();
}
- }
// All queues busy: Round robin (StartIndex has the initial value again)
Queues[StartIndex].addUser();
@@ -1532,6 +1535,9 @@
return Plugin::success();
}
+ /// Envar for controlling the tracking of busy HSA queues.
+ BoolEnvar OMPX_QueueTracking;
+
/// The next queue index to use for round robin selection.
uint32_t NextQueue;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D156996.546822.patch
Type: text/x-patch
Size: 2167 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20230803/c5e706bf/attachment-0001.bin>
More information about the Openmp-commits
mailing list