Skip to content

Commit e0534f2

Browse files
committed
[HIP] Implement ext_oneapi_queue_priority
1 parent be53fb3 commit e0534f2

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

source/adapters/hip/queue.cpp

Lines changed: 18 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();
@@ -119,6 +119,19 @@ urQueueCreate(ur_context_handle_t hContext, ur_device_handle_t hDevice,
119119
}
120120

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

123136
const bool IsOutOfOrder =
124137
pProps ? pProps->flags & UR_QUEUE_FLAG_OUT_OF_ORDER_EXEC_MODE_ENABLE
@@ -131,7 +144,7 @@ urQueueCreate(ur_context_handle_t hContext, ur_device_handle_t hDevice,
131144

132145
QueueImpl = std::unique_ptr<ur_queue_handle_t_>(new ur_queue_handle_t_{
133146
std::move(ComputeHipStreams), std::move(TransferHipStreams), hContext,
134-
hDevice, Flags, pProps ? pProps->flags : 0});
147+
hDevice, Flags, pProps ? pProps->flags : 0, Priority});
135148

136149
*phQueue = QueueImpl.release();
137150

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)