@@ -51,6 +51,17 @@ typedef struct complex
51
51
uint64_t imag;
52
52
} complexNumber;
53
53
54
+ void set_dependent_events (handler &cgh,
55
+ __dpctl_keep const DPCTLSyclEventRef *DepEvents,
56
+ size_t NDepEvents)
57
+ {
58
+ for (auto i = 0ul ; i < NDepEvents; ++i) {
59
+ auto ei = unwrap<event>(DepEvents[i]);
60
+ if (ei)
61
+ cgh.depends_on (*ei);
62
+ }
63
+ }
64
+
54
65
/* !
55
66
* @brief Set the kernel arg object
56
67
*
@@ -107,6 +118,21 @@ bool set_kernel_arg(handler &cgh,
107
118
return arg_set;
108
119
}
109
120
121
+ void set_kernel_args (handler &cgh,
122
+ __dpctl_keep void **Args,
123
+ __dpctl_keep const DPCTLKernelArgType *ArgTypes,
124
+ size_t NArgs)
125
+ {
126
+ for (auto i = 0ul ; i < NArgs; ++i) {
127
+ if (!set_kernel_arg (cgh, i, Args[i], ArgTypes[i])) {
128
+ error_handler (" Kernel argument could not be created." , __FILE__,
129
+ __func__, __LINE__);
130
+ throw std::invalid_argument (
131
+ " Kernel argument could not be created." );
132
+ }
133
+ }
134
+ }
135
+
110
136
std::unique_ptr<property_list> create_property_list (int properties)
111
137
{
112
138
std::unique_ptr<property_list> propList;
@@ -341,39 +367,52 @@ DPCTLQueue_SubmitRange(__dpctl_keep const DPCTLSyclKernelRef KRef,
341
367
event e;
342
368
343
369
try {
344
- e = Queue->submit ([&](handler &cgh) {
345
- // Depend on any event that was specified by the caller.
346
- if (NDepEvents)
347
- for (auto i = 0ul ; i < NDepEvents; ++i)
348
- cgh.depends_on (*unwrap<event>(DepEvents[i]));
349
-
350
- for (auto i = 0ul ; i < NArgs; ++i) {
351
- // \todo add support for Sycl buffers
352
- if (!set_kernel_arg (cgh, i, Args[i], ArgTypes[i]))
353
- exit (1 );
354
- }
355
- switch (NDims) {
356
- case 1 :
370
+ switch (NDims) {
371
+ case 1 :
372
+ {
373
+ e = Queue->submit ([&](handler &cgh) {
374
+ // Depend on any event that was specified by the caller.
375
+ set_dependent_events (cgh, DepEvents, NDepEvents);
376
+ set_kernel_args (cgh, Args, ArgTypes, NArgs);
357
377
cgh.parallel_for (range<1 >{Range[0 ]}, *Kernel);
358
- break ;
359
- case 2 :
378
+ });
379
+ return wrap<event>(new event (std::move (e)));
380
+ }
381
+ case 2 :
382
+ {
383
+ e = Queue->submit ([&](handler &cgh) {
384
+ // Depend on any event that was specified by the caller.
385
+ set_dependent_events (cgh, DepEvents, NDepEvents);
386
+ set_kernel_args (cgh, Args, ArgTypes, NArgs);
360
387
cgh.parallel_for (range<2 >{Range[0 ], Range[1 ]}, *Kernel);
361
- break ;
362
- case 3 :
388
+ });
389
+ return wrap<event>(new event (std::move (e)));
390
+ }
391
+ case 3 :
392
+ {
393
+ e = Queue->submit ([&](handler &cgh) {
394
+ // Depend on any event that was specified by the caller.
395
+ set_dependent_events (cgh, DepEvents, NDepEvents);
396
+ set_kernel_args (cgh, Args, ArgTypes, NArgs);
363
397
cgh.parallel_for (range<3 >{Range[0 ], Range[1 ], Range[2 ]},
364
398
*Kernel);
365
- break ;
366
- default :
367
- throw std::runtime_error (" Range cannot be greater than three "
368
- " dimensions." );
369
- }
370
- });
399
+ });
400
+ return wrap<event>(new event (std::move (e)));
401
+ }
402
+ default :
403
+ error_handler (" Range cannot be greater than three "
404
+ " dimensions." ,
405
+ __FILE__, __func__, __LINE__, error_level::error);
406
+ return nullptr ;
407
+ }
371
408
} catch (std::exception const &e) {
372
- error_handler (e, __FILE__, __func__, __LINE__);
409
+ error_handler (e, __FILE__, __func__, __LINE__, error_level::error);
410
+ return nullptr ;
411
+ } catch (...) {
412
+ error_handler (" Unknown exception encountered" , __FILE__, __func__,
413
+ __LINE__, error_level::error);
373
414
return nullptr ;
374
415
}
375
-
376
- return wrap<event>(new event (std::move (e)));
377
416
}
378
417
379
418
__dpctl_give DPCTLSyclEventRef
@@ -393,46 +432,56 @@ DPCTLQueue_SubmitNDRange(__dpctl_keep const DPCTLSyclKernelRef KRef,
393
432
event e;
394
433
395
434
try {
396
- e = Queue->submit ([&](handler &cgh) {
397
- // Depend on any event that was specified by the caller.
398
- if (DepEvents)
399
- for (auto i = 0ul ; i < NDepEvents; ++i) {
400
- auto ei = unwrap<event>(DepEvents[i]);
401
- if (ei)
402
- cgh.depends_on (*ei);
403
- }
404
-
405
- for (auto i = 0ul ; i < NArgs; ++i) {
406
- // \todo add support for Sycl buffers
407
- if (!set_kernel_arg (cgh, i, Args[i], ArgTypes[i]))
408
- exit (1 );
409
- }
410
- switch (NDims) {
411
- case 1 :
435
+ switch (NDims) {
436
+ case 1 :
437
+ {
438
+ e = Queue->submit ([&](handler &cgh) {
439
+ // Depend on any event that was specified by the caller.
440
+ set_dependent_events (cgh, DepEvents, NDepEvents);
441
+ set_kernel_args (cgh, Args, ArgTypes, NArgs);
412
442
cgh.parallel_for (nd_range<1 >{{gRange [0 ]}, {lRange[0 ]}},
413
443
*Kernel);
414
- break ;
415
- case 2 :
444
+ });
445
+ return wrap<event>(new event (std::move (e)));
446
+ }
447
+ case 2 :
448
+ {
449
+ e = Queue->submit ([&](handler &cgh) {
450
+ // Depend on any event that was specified by the caller.
451
+ set_dependent_events (cgh, DepEvents, NDepEvents);
452
+ set_kernel_args (cgh, Args, ArgTypes, NArgs);
416
453
cgh.parallel_for (
417
454
nd_range<2 >{{gRange [0 ], gRange [1 ]}, {lRange[0 ], lRange[1 ]}},
418
455
*Kernel);
419
- break ;
420
- case 3 :
456
+ });
457
+ return wrap<event>(new event (std::move (e)));
458
+ }
459
+ case 3 :
460
+ {
461
+ e = Queue->submit ([&](handler &cgh) {
462
+ // Depend on any event that was specified by the caller.
463
+ set_dependent_events (cgh, DepEvents, NDepEvents);
464
+ set_kernel_args (cgh, Args, ArgTypes, NArgs);
421
465
cgh.parallel_for (nd_range<3 >{{gRange [0 ], gRange [1 ], gRange [2 ]},
422
466
{lRange[0 ], lRange[1 ], lRange[2 ]}},
423
467
*Kernel);
424
- break ;
425
- default :
426
- throw std::runtime_error (" Range cannot be greater than three "
427
- " dimensions." );
428
- }
429
- });
468
+ });
469
+ return wrap<event>(new event (std::move (e)));
470
+ }
471
+ default :
472
+ error_handler (" Range cannot be greater than three "
473
+ " dimensions." ,
474
+ __FILE__, __func__, __LINE__, error_level::error);
475
+ return nullptr ;
476
+ }
430
477
} catch (std::exception const &e) {
431
- error_handler (e, __FILE__, __func__, __LINE__);
478
+ error_handler (e, __FILE__, __func__, __LINE__, error_level::error);
479
+ return nullptr ;
480
+ } catch (...) {
481
+ error_handler (" Unknown exception encountered" , __FILE__, __func__,
482
+ __LINE__, error_level::error);
432
483
return nullptr ;
433
484
}
434
-
435
- return wrap<event>(new event (std::move (e)));
436
485
}
437
486
438
487
void DPCTLQueue_Wait (__dpctl_keep DPCTLSyclQueueRef QRef)
0 commit comments