@@ -123,7 +123,7 @@ class QMgrHelper
123
123
124
124
static bool isCurrentQueue (__dppl_keep const DPPLSyclQueueRef QRef);
125
125
126
- static void
126
+ static __dppl_give DPPLSyclQueueRef
127
127
setAsDefaultQueue (enum DPPLSyclBEType BETy,
128
128
enum DPPLSyclDeviceType DeviceTy,
129
129
size_t DNum);
@@ -162,7 +162,7 @@ DPPLSyclQueueRef QMgrHelper::getCurrentQueue ()
162
162
* for deallocating it. The helper function DPPLQueue_Delete should
163
163
* be used for that purpose.
164
164
*/
165
- DPPLSyclQueueRef
165
+ __dppl_give DPPLSyclQueueRef
166
166
QMgrHelper::getQueue (enum DPPLSyclBEType BETy,
167
167
enum DPPLSyclDeviceType DeviceTy,
168
168
size_t DNum)
@@ -241,57 +241,65 @@ bool QMgrHelper::isCurrentQueue (__dppl_keep const DPPLSyclQueueRef QRef)
241
241
* Changes the first entry into the stack, i.e., the default queue to a new
242
242
* sycl::queue corresponding to the device type and device number.
243
243
*/
244
- void
244
+ __dppl_give DPPLSyclQueueRef
245
245
QMgrHelper::setAsDefaultQueue (enum DPPLSyclBEType BETy,
246
246
enum DPPLSyclDeviceType DeviceTy,
247
247
size_t DNum)
248
248
{
249
- if (get_active_queues ().empty ()) {
249
+ queue *QRef = nullptr ;
250
+ auto &activeQ = get_active_queues ();
251
+ if (activeQ.empty ()) {
250
252
std::cerr << " active queue vector is corrupted.\n " ;
251
- return ;
253
+ return nullptr ;
252
254
}
253
255
254
256
switch (BETy|DeviceTy)
255
257
{
256
258
case DPPLSyclBEType::DPPL_OPENCL | DPPLSyclDeviceType::DPPL_CPU:
257
259
{
258
- if (DNum >= get_opencl_cpu_queues ().size ()) {
260
+ auto oclcpu_q = get_opencl_cpu_queues ();
261
+ if (DNum >= oclcpu_q.size ()) {
259
262
// \todo handle error
260
263
std::cerr << " OpenCL CPU device " << DNum
261
264
<< " not found on system\n ." ;
262
- break ;
265
+ return nullptr ;
263
266
}
264
- get_active_queues () [0 ] = get_opencl_cpu_queues () [DNum];
267
+ activeQ [0 ] = oclcpu_q [DNum];
265
268
break ;
266
269
}
267
270
case DPPLSyclBEType::DPPL_OPENCL | DPPLSyclDeviceType::DPPL_GPU:
268
271
{
269
- if (DNum >= get_opencl_gpu_queues ().size ()) {
272
+ auto oclgpu_q = get_opencl_gpu_queues ();
273
+ if (DNum >= oclgpu_q.size ()) {
270
274
// \todo handle error
271
275
std::cerr << " OpenCL GPU device " << DNum
272
276
<< " not found on system\n ." ;
273
- break ;
277
+ return nullptr ;
274
278
}
275
- get_active_queues () [0 ] = get_opencl_gpu_queues () [DNum];
279
+ activeQ [0 ] = oclgpu_q [DNum];
276
280
break ;
277
281
}
278
282
case DPPLSyclBEType::DPPL_LEVEL_ZERO | DPPLSyclDeviceType::DPPL_GPU:
279
283
{
280
- if (DNum >= get_level0_gpu_queues ().size ()) {
284
+ auto l0gpu_q = get_level0_gpu_queues ();
285
+ if (DNum >= l0gpu_q.size ()) {
281
286
// \todo handle error
282
287
std::cerr << " Level-0 GPU device " << DNum
283
288
<< " not found on system\n ." ;
284
- break ;
289
+ return nullptr ;
285
290
}
286
- get_active_queues () [0 ] = get_level0_gpu_queues () [DNum];
291
+ activeQ [0 ] = l0gpu_q [DNum];
287
292
break ;
288
293
}
289
294
default :
290
295
{
291
296
std::cerr << " Unsupported device type.\n " ;
292
- return ;
297
+ return nullptr ;
293
298
}
294
299
}
300
+
301
+ QRef = new queue (activeQ[0 ]);
302
+ return wrap (QRef);
295
303
}
296
304
297
305
/* !
@@ -300,13 +308,14 @@ QMgrHelper::setAsDefaultQueue (enum DPPLSyclBEType BETy,
300
308
* cleaned up. The helper function DPPLDeleteSyclQueue() can be used is for that
301
309
* purpose.
302
310
*/
303
- DPPLSyclQueueRef
311
+ __dppl_give DPPLSyclQueueRef
304
312
QMgrHelper::pushSyclQueue (enum DPPLSyclBEType BETy,
305
313
enum DPPLSyclDeviceType DeviceTy,
306
314
size_t DNum)
307
315
{
308
316
queue *QRef = nullptr ;
309
- if (get_active_queues ().empty ()) {
317
+ auto &activeQ = get_active_queues ();
318
+ if (activeQ.empty ()) {
310
319
std::cerr << " Why is there no previous global context?\n " ;
311
320
return nullptr ;
312
321
}
@@ -321,8 +330,8 @@ QMgrHelper::pushSyclQueue (enum DPPLSyclBEType BETy,
321
330
<< " not found on system\n ." ;
322
331
return nullptr ;
323
332
}
324
- get_active_queues () .emplace_back (get_opencl_cpu_queues ()[DNum]);
325
- QRef = new queue (get_active_queues ()[ get_active_queues () .size ()-1 ]);
333
+ activeQ .emplace_back (get_opencl_cpu_queues ()[DNum]);
334
+ QRef = new queue (activeQ[activeQ .size ()-1 ]);
326
335
break ;
327
336
}
328
337
case DPPLSyclBEType::DPPL_OPENCL | DPPLSyclDeviceType::DPPL_GPU:
@@ -333,8 +342,8 @@ QMgrHelper::pushSyclQueue (enum DPPLSyclBEType BETy,
333
342
<< " not found on system\n ." ;
334
343
return nullptr ;
335
344
}
336
- get_active_queues () .emplace_back (get_opencl_gpu_queues ()[DNum]);
337
- QRef = new queue (get_active_queues () [get_active_queues ().size ()-1 ]);
345
+ activeQ .emplace_back (get_opencl_gpu_queues ()[DNum]);
346
+ QRef = new queue (activeQ [get_active_queues ().size ()-1 ]);
338
347
break ;
339
348
}
340
349
case DPPLSyclBEType::DPPL_LEVEL_ZERO | DPPLSyclDeviceType::DPPL_GPU:
@@ -345,8 +354,8 @@ QMgrHelper::pushSyclQueue (enum DPPLSyclBEType BETy,
345
354
<< " not found on system\n ." ;
346
355
return nullptr ;
347
356
}
348
- get_active_queues () .emplace_back (get_level0_gpu_queues ()[DNum]);
349
- QRef = new queue (get_active_queues () [get_active_queues ().size ()-1 ]);
357
+ activeQ .emplace_back (get_level0_gpu_queues ()[DNum]);
358
+ QRef = new queue (activeQ [get_active_queues ().size ()-1 ]);
350
359
break ;
351
360
}
352
361
default :
@@ -455,12 +464,13 @@ bool DPPLQueueMgr_IsCurrentQueue (__dppl_keep const DPPLSyclQueueRef QRef)
455
464
/* !
456
465
* The function sets the global queue, i.e., the sycl::queue object at
457
466
* QMgrHelper::active_queues[0] vector to the sycl::queue corresponding to the
458
- * specified device type and id. A runtime_error gets thrown if no such device
459
- * exists .
467
+ * specified device type and id. If not queue was found for the backend and
468
+ * device, Null is returned .
460
469
*/
461
- void DPPLQueueMgr_SetAsDefaultQueue (enum DPPLSyclBEType BETy,
462
- enum DPPLSyclDeviceType DeviceTy,
463
- size_t DNum)
470
+ __dppl_give DPPLSyclQueueRef
471
+ DPPLQueueMgr_SetAsDefaultQueue (enum DPPLSyclBEType BETy,
472
+ enum DPPLSyclDeviceType DeviceTy,
473
+ size_t DNum)
464
474
{
465
475
QMgrHelper::setAsDefaultQueue (BETy, DeviceTy, DNum);
466
476
}
0 commit comments