Skip to content

Commit e5c0557

Browse files
Diptorup Deboleksandr-pavlyk
authored andcommitted
Refactor SubmitRange/SubmitNdRange to fix warning.
1 parent 472afd0 commit e5c0557

File tree

1 file changed

+104
-55
lines changed

1 file changed

+104
-55
lines changed

libsyclinterface/source/dpctl_sycl_queue_interface.cpp

Lines changed: 104 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,17 @@ typedef struct complex
5151
uint64_t imag;
5252
} complexNumber;
5353

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+
5465
/*!
5566
* @brief Set the kernel arg object
5667
*
@@ -107,6 +118,21 @@ bool set_kernel_arg(handler &cgh,
107118
return arg_set;
108119
}
109120

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+
110136
std::unique_ptr<property_list> create_property_list(int properties)
111137
{
112138
std::unique_ptr<property_list> propList;
@@ -341,39 +367,52 @@ DPCTLQueue_SubmitRange(__dpctl_keep const DPCTLSyclKernelRef KRef,
341367
event e;
342368

343369
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);
357377
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);
360387
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);
363397
cgh.parallel_for(range<3>{Range[0], Range[1], Range[2]},
364398
*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+
}
371408
} 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);
373414
return nullptr;
374415
}
375-
376-
return wrap<event>(new event(std::move(e)));
377416
}
378417

379418
__dpctl_give DPCTLSyclEventRef
@@ -393,46 +432,56 @@ DPCTLQueue_SubmitNDRange(__dpctl_keep const DPCTLSyclKernelRef KRef,
393432
event e;
394433

395434
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);
412442
cgh.parallel_for(nd_range<1>{{gRange[0]}, {lRange[0]}},
413443
*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);
416453
cgh.parallel_for(
417454
nd_range<2>{{gRange[0], gRange[1]}, {lRange[0], lRange[1]}},
418455
*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);
421465
cgh.parallel_for(nd_range<3>{{gRange[0], gRange[1], gRange[2]},
422466
{lRange[0], lRange[1], lRange[2]}},
423467
*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+
}
430477
} 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);
432483
return nullptr;
433484
}
434-
435-
return wrap<event>(new event(std::move(e)));
436485
}
437486

438487
void DPCTLQueue_Wait(__dpctl_keep DPCTLSyclQueueRef QRef)

0 commit comments

Comments
 (0)