Skip to content

Commit 2d42d77

Browse files
authored
Merge pull request #1229 from oneapi-src/revert-1228-revert-984-ext_oneapi_queue_priority-hip
Revert "Revert "[HIP] Implement ext_oneapi_queue_priority""
2 parents 9f14fed + 2a960ba commit 2d42d77

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

source/adapters/hip/queue.cpp

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ hipStream_t ur_queue_handle_t_::getNextComputeStream(uint32_t *StreamToken) {
3838
// The second check is done after mutex is locked so other threads can not
3939
// change NumComputeStreams after that
4040
if (NumComputeStreams < ComputeStreams.size()) {
41-
UR_CHECK_ERROR(hipStreamCreateWithFlags(
42-
&ComputeStreams[NumComputeStreams++], Flags));
41+
UR_CHECK_ERROR(hipStreamCreateWithPriority(
42+
&ComputeStreams[NumComputeStreams++], Flags, Priority));
4343
}
4444
}
4545
Token = ComputeStreamIdx++;
@@ -97,8 +97,8 @@ hipStream_t ur_queue_handle_t_::getNextTransferStream() {
9797
// The second check is done after mutex is locked so other threads can not
9898
// change NumTransferStreams after that
9999
if (NumTransferStreams < TransferStreams.size()) {
100-
UR_CHECK_ERROR(hipStreamCreateWithFlags(
101-
&TransferStreams[NumTransferStreams++], Flags));
100+
UR_CHECK_ERROR(hipStreamCreateWithPriority(
101+
&TransferStreams[NumTransferStreams++], Flags, Priority));
102102
}
103103
}
104104
uint32_t Stream_i = TransferStreamIdx++ % TransferStreams.size();
@@ -118,6 +118,19 @@ urQueueCreate(ur_context_handle_t hContext, ur_device_handle_t hDevice,
118118
std::unique_ptr<ur_queue_handle_t_> QueueImpl{nullptr};
119119

120120
unsigned int Flags = 0;
121+
ur_queue_flags_t URFlags = 0;
122+
int Priority = 0; // Not guaranteed, but, in ROCm 5.0-6.0, 0 is the default
123+
124+
if (pProps && pProps->stype == UR_STRUCTURE_TYPE_QUEUE_PROPERTIES) {
125+
URFlags = pProps->flags;
126+
if (URFlags & UR_QUEUE_FLAG_PRIORITY_HIGH) {
127+
ScopedContext Active(hDevice);
128+
UR_CHECK_ERROR(hipDeviceGetStreamPriorityRange(nullptr, &Priority));
129+
} else if (URFlags & UR_QUEUE_FLAG_PRIORITY_LOW) {
130+
ScopedContext Active(hDevice);
131+
UR_CHECK_ERROR(hipDeviceGetStreamPriorityRange(&Priority, nullptr));
132+
}
133+
}
121134

122135
const bool IsOutOfOrder =
123136
pProps ? pProps->flags & UR_QUEUE_FLAG_OUT_OF_ORDER_EXEC_MODE_ENABLE
@@ -130,7 +143,7 @@ urQueueCreate(ur_context_handle_t hContext, ur_device_handle_t hDevice,
130143

131144
QueueImpl = std::unique_ptr<ur_queue_handle_t_>(new ur_queue_handle_t_{
132145
std::move(ComputeHipStreams), std::move(TransferHipStreams), hContext,
133-
hDevice, Flags, pProps ? pProps->flags : 0});
146+
hDevice, Flags, pProps ? pProps->flags : 0, Priority});
134147

135148
*phQueue = QueueImpl.release();
136149

@@ -293,6 +306,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urQueueCreateWithNativeHandle(
293306
hDevice,
294307
HIPFlags,
295308
Flags,
309+
/*priority*/ 0,
296310
/*backend_owns*/ pProperties->isNativeHandleOwned};
297311
(*phQueue)->NumComputeStreams = 1;
298312

source/adapters/hip/queue.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ struct ur_queue_handle_t_ {
4444
unsigned int LastSyncTransferStreams;
4545
unsigned int Flags;
4646
ur_queue_flags_t URFlags;
47+
int Priority;
4748
// When ComputeStreamSyncMutex and ComputeStreamMutex both need to be
4849
// locked at the same time, ComputeStreamSyncMutex should be locked first
4950
// to avoid deadlocks
@@ -56,7 +57,7 @@ struct ur_queue_handle_t_ {
5657
ur_queue_handle_t_(std::vector<native_type> &&ComputeStreams,
5758
std::vector<native_type> &&TransferStreams,
5859
ur_context_handle_t Context, ur_device_handle_t Device,
59-
unsigned int Flags, ur_queue_flags_t URFlags,
60+
unsigned int Flags, ur_queue_flags_t URFlags, int Priority,
6061
bool BackendOwns = true)
6162
: ComputeStreams{std::move(ComputeStreams)}, TransferStreams{std::move(
6263
TransferStreams)},
@@ -66,7 +67,7 @@ struct ur_queue_handle_t_ {
6667
Device{Device}, RefCount{1}, EventCount{0}, ComputeStreamIdx{0},
6768
TransferStreamIdx{0}, NumComputeStreams{0}, NumTransferStreams{0},
6869
LastSyncComputeStreams{0}, LastSyncTransferStreams{0}, Flags(Flags),
69-
URFlags(URFlags), HasOwnership{BackendOwns} {
70+
URFlags(URFlags), Priority(Priority), HasOwnership{BackendOwns} {
7071
urContextRetain(Context);
7172
urDeviceRetain(Device);
7273
}

0 commit comments

Comments
 (0)