Skip to content

Commit e769fcb

Browse files
committed
Add e2e test for arrays of pointers as free function kernel argument
1 parent d1967aa commit e769fcb

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

sycl/test-e2e/KernelAndProgram/free_function_kernels.cpp

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,62 @@ bool test_5(queue Queue) {
371371
return PassA && PassB;
372372
}
373373

374+
constexpr int TestArrSize = 3;
375+
376+
template <int ArrSize>
377+
struct KArgWithPtrArray {
378+
int *data[ArrSize];
379+
int start[ArrSize];
380+
int end[ArrSize];
381+
constexpr int getArrSize() { return ArrSize; }
382+
};
383+
384+
template <int ArrSize>
385+
SYCL_EXT_ONEAPI_FUNCTION_PROPERTY(
386+
(ext::oneapi::experimental::single_task_kernel))
387+
void ff_6(KArgWithPtrArray<ArrSize> KArg) {
388+
for (int j = 0; j < ArrSize; j++)
389+
for (int i = KArg.start[j]; i <= KArg.end[j]; i++)
390+
KArg.data[j][i] = KArg.start[j] + KArg.end[j];
391+
}
392+
393+
template void ff_6(KArgWithPtrArray<TestArrSize> KArg);
394+
395+
bool test_6(queue Queue) {
396+
constexpr int Range = 10;
397+
KArgWithPtrArray<TestArrSize> KArg;
398+
for (int i = 0; i < TestArrSize; ++i) {
399+
KArg.data[i] = malloc_shared<int>(Range, Queue);
400+
memset(KArg.data[i], 0, Range * sizeof(int));
401+
KArg.start[i]= 3;
402+
KArg.end[i] = 5;
403+
}
404+
int Result[Range] = {0, 0, 0, 8, 8, 8, 0, 0, 0, 0};
405+
range<1> R1{Range};
406+
407+
bool Pass = true;
408+
#ifndef __SYCL_DEVICE_ONLY__
409+
kernel_bundle Bundle =
410+
get_kernel_bundle<bundle_state::executable>(Queue.get_context());
411+
kernel_id Kernel_id = ext::oneapi::experimental::get_kernel_id<(
412+
void (*)(KArgWithPtrArray<TestArrSize>))ff_6<TestArrSize>>();
413+
kernel Kernel = Bundle.get_kernel(Kernel_id);
414+
Queue.submit([&](handler &Handler) {
415+
Handler.set_arg(0, KArg);
416+
Handler.single_task(Kernel);
417+
});
418+
Queue.wait();
419+
for (int i = 0; i < TestArrSize; ++i) {
420+
Pass &= checkUSM(KArg.data[i], Range, Result);
421+
std::cout << "Test 6, array: " << i << (Pass ? " PASS" : " FAIL")
422+
<< std::endl;
423+
free(KArg.data[i], Queue);
424+
}
425+
426+
#endif
427+
return Pass;
428+
}
429+
374430
int main() {
375431
queue Queue;
376432

@@ -381,6 +437,7 @@ int main() {
381437
Pass &= test_3(Queue);
382438
Pass &= test_4(Queue);
383439
Pass &= test_5(Queue);
440+
Pass &= test_6(Queue);
384441

385442
return Pass ? 0 : 1;
386443
}

0 commit comments

Comments
 (0)