@@ -38,8 +38,8 @@ hipStream_t ur_queue_handle_t_::getNextComputeStream(uint32_t *StreamToken) {
38
38
// The second check is done after mutex is locked so other threads can not
39
39
// change NumComputeStreams after that
40
40
if (NumComputeStreams < ComputeStreams.size ()) {
41
- UR_CHECK_ERROR (hipStreamCreateWithFlags (
42
- &ComputeStreams[NumComputeStreams++], Flags));
41
+ UR_CHECK_ERROR (hipStreamCreateWithPriority (
42
+ &ComputeStreams[NumComputeStreams++], Flags, Priority ));
43
43
}
44
44
}
45
45
Token = ComputeStreamIdx++;
@@ -97,8 +97,8 @@ hipStream_t ur_queue_handle_t_::getNextTransferStream() {
97
97
// The second check is done after mutex is locked so other threads can not
98
98
// change NumTransferStreams after that
99
99
if (NumTransferStreams < TransferStreams.size ()) {
100
- UR_CHECK_ERROR (hipStreamCreateWithFlags (
101
- &TransferStreams[NumTransferStreams++], Flags));
100
+ UR_CHECK_ERROR (hipStreamCreateWithPriority (
101
+ &TransferStreams[NumTransferStreams++], Flags, Priority ));
102
102
}
103
103
}
104
104
uint32_t Stream_i = TransferStreamIdx++ % TransferStreams.size ();
@@ -118,6 +118,19 @@ urQueueCreate(ur_context_handle_t hContext, ur_device_handle_t hDevice,
118
118
std::unique_ptr<ur_queue_handle_t_> QueueImpl{nullptr };
119
119
120
120
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
+ }
121
134
122
135
const bool IsOutOfOrder =
123
136
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,
130
143
131
144
QueueImpl = std::unique_ptr<ur_queue_handle_t_>(new ur_queue_handle_t_{
132
145
std::move (ComputeHipStreams), std::move (TransferHipStreams), hContext,
133
- hDevice, Flags, pProps ? pProps->flags : 0 });
146
+ hDevice, Flags, pProps ? pProps->flags : 0 , Priority });
134
147
135
148
*phQueue = QueueImpl.release ();
136
149
@@ -293,6 +306,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urQueueCreateWithNativeHandle(
293
306
hDevice,
294
307
HIPFlags,
295
308
Flags,
309
+ /* priority*/ 0 ,
296
310
/* backend_owns*/ pProperties->isNativeHandleOwned };
297
311
(*phQueue)->NumComputeStreams = 1 ;
298
312
0 commit comments