From 6535f35710daa50fd08cf657d4c815b0fcfc5f44 Mon Sep 17 00:00:00 2001 From: "Hu, Peisen" Date: Tue, 28 Oct 2025 06:40:56 -0700 Subject: [PATCH 1/2] [SYCL] Update enqueue_functions.hpp Signed-off-by: Hu, Peisen --- .../ext/oneapi/experimental/enqueue_functions.hpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/sycl/include/sycl/ext/oneapi/experimental/enqueue_functions.hpp b/sycl/include/sycl/ext/oneapi/experimental/enqueue_functions.hpp index e393bd626d4d6..a6754550a5de8 100644 --- a/sycl/include/sycl/ext/oneapi/experimental/enqueue_functions.hpp +++ b/sycl/include/sycl/ext/oneapi/experimental/enqueue_functions.hpp @@ -251,8 +251,15 @@ template void nd_launch(handler &CGH, nd_range Range, const KernelType &KernelObj, ReductionsT &&...Reductions) { - CGH.parallel_for(Range, std::forward(Reductions)..., - KernelObj); + if constexpr (ext::oneapi::experimental::detail::HasKernelPropertiesGetMethod< + const KernelType &>::value) { + CGH.parallel_for( + Range, KernelObj.get(ext::oneapi::experimental::properties_tag{}), + std::forward(Reductions)..., KernelObj); + } else { + CGH.parallel_for( + Range, std::forward(Reductions)..., KernelObj); + } } template Date: Tue, 28 Oct 2025 07:55:09 -0700 Subject: [PATCH 2/2] [SYCL] Revise tset case Signed-off-by: Hu, Peisen --- .../properties_kernel_device_has.cpp | 102 ++++++++++++------ 1 file changed, 69 insertions(+), 33 deletions(-) diff --git a/sycl/test/check_device_code/extensions/properties/properties_kernel_device_has.cpp b/sycl/test/check_device_code/extensions/properties/properties_kernel_device_has.cpp index 3d1c528744afd..018115a0ef2b5 100644 --- a/sycl/test/check_device_code/extensions/properties/properties_kernel_device_has.cpp +++ b/sycl/test/check_device_code/extensions/properties/properties_kernel_device_has.cpp @@ -27,6 +27,37 @@ static constexpr auto device_has_all = device_has< aspect::usm_host_allocations, aspect::usm_shared_allocations, aspect::ext_intel_free_memory, aspect::ext_intel_device_id>; +struct TestKernelHasDevice { + void operator()() const {} + auto get(properties_tag) const { return properties{device_has_all}; } +}; + +struct TestKernelHasDevice_id1 { + void operator()(id<1>) const {} + auto get(properties_tag) const { return properties{device_has_all}; } +}; + +struct TestKernelHasDevice_id1_1 { + template void operator()(id<1>, T1 &) const {} + auto get(properties_tag) const { return properties{device_has_all}; } +}; + +struct TestKernelHasDevice_nd_item1 { + void operator()(nd_item<1>) const {} + auto get(properties_tag) const { return properties{device_has_all}; } +}; + +struct TestKernelHasDevice_nd_item1_1 { + template void operator()(nd_item<1>, T1 &) const {} + auto get(properties_tag) const { return properties{device_has_all}; } +}; + +struct TestKernelHasDevice_nd_item1_2 { + template + void operator()(nd_item<1>, T1 &, T2 &) const {} + auto get(properties_tag) const { return properties{device_has_all}; } +}; + int main() { queue Q; event Ev; @@ -40,18 +71,18 @@ int main() { auto Redu2 = reduction(nullptr, multiplies()); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel0(){{.*}} #[[DHAttr1:[0-9]+]] - Q.single_task(Props, []() {}); + Q.single_task(TestKernelHasDevice{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel1(){{.*}} #[[DHAttr1]] - Q.single_task(Ev, Props, []() {}); + Q.single_task(Ev, TestKernelHasDevice{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel2(){{.*}} #[[DHAttr1]] - Q.single_task({Ev}, Props, []() {}); + Q.single_task({Ev}, TestKernelHasDevice{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel3(){{.*}} #[[DHAttr2:[0-9]+]] - Q.parallel_for(R1, Props, [](id<1>) {}); + Q.parallel_for(R1, TestKernelHasDevice_id1{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel4(){{.*}} #[[DHAttr2]] - Q.parallel_for(R1, Ev, Props, [](id<1>) {}); + Q.parallel_for(R1, Ev, TestKernelHasDevice_id1{}); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel5(){{.*}} #[[DHAttr2]] - Q.parallel_for(R1, {Ev}, Props, [](id<1>) {}); + Q.parallel_for(R1, {Ev}, TestKernelHasDevice_id1{}); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel6{{.*}}{{.*}} #[[DHAttr2:[0-9]+]] Q.parallel_for(R1, Props, Redu1, [](id<1>, auto &) {}); @@ -70,57 +101,62 @@ int main() { Q.parallel_for(NDR1, {Ev}, Props, [](nd_item<1>) {}); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel12{{.*}}{{.*}} #[[DHAttr2]] - Q.parallel_for(NDR1, Props, Redu1, - [](nd_item<1>, auto &) {}); + nd_launch(Q, NDR1, TestKernelHasDevice_nd_item1_1{}, + Redu1); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel13{{.*}}{{.*}} #[[DHAttr2]] - Q.parallel_for(NDR1, Ev, Props, Redu1, - [](nd_item<1>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR1, TestKernelHasDevice_nd_item1_1{}, + Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel14{{.*}}{{.*}} #[[DHAttr2]] - Q.parallel_for(NDR1, {Ev}, Props, Redu1, - [](nd_item<1>, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR1, TestKernelHasDevice_nd_item1_1{}, + Redu1); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel15{{.*}}{{.*}} #[[DHAttr2]] - Q.parallel_for(NDR1, Props, Redu1, Redu2, - [](nd_item<1>, auto &, auto &) {}); + nd_launch(Q, NDR1, TestKernelHasDevice_nd_item1_2{}, + Redu1, Redu2); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel16{{.*}}{{.*}} #[[DHAttr2]] - Q.parallel_for(NDR1, Ev, Props, Redu1, Redu2, - [](nd_item<1>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on(Ev); + nd_launch(CGH, NDR1, TestKernelHasDevice_nd_item1_2{}, + Redu1, Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel17{{.*}}{{.*}} #[[DHAttr2]] - Q.parallel_for(NDR1, {Ev}, Props, Redu1, Redu2, - [](nd_item<1>, auto &, auto &) {}); + Q.submit([&](sycl::handler &CGH) { + CGH.depends_on({Ev}); + nd_launch(CGH, NDR1, TestKernelHasDevice_nd_item1_2{}, + Redu1, Redu2); + }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel18(){{.*}} #[[DHAttr1]] Q.submit([&](handler &CGH) { - CGH.single_task(Props, []() {}); + CGH.single_task(TestKernelHasDevice{}); }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel19(){{.*}} #[[DHAttr2]] Q.submit([&](handler &CGH) { - CGH.parallel_for(R1, Props, [](id<1>) {}); + CGH.parallel_for(R1, TestKernelHasDevice_id1{}); }); // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel20{{.*}}{{.*}} #[[DHAttr2]] Q.submit([&](handler &CGH) { - CGH.parallel_for(R1, Props, Redu1, - [](id<1>, auto &) {}); + CGH.parallel_for(R1, Props, Redu1, [](id<1>, auto &) { + }); // note: this one still doesn't work }); // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel21(){{.*}} #[[DHAttr2]] Q.submit([&](handler &CGH) { - CGH.parallel_for(NDR1, Props, [](nd_item<1>) {}); + CGH.parallel_for(NDR1, + TestKernelHasDevice_nd_item1{}); }); - // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel22{{.*}}{{.*}} #[[DHAttr2]] - Q.submit([&](handler &CGH) { - CGH.parallel_for(NDR1, Props, Redu1, - [](nd_item<1>, auto &) {}); - }); + // DUPLICATE, REMOVED - // CHECK-IR: spir_kernel void @{{.*}}MainKrn{{.*}}WGSizeKernel23{{.*}}{{.*}} #[[DHAttr2]] - Q.submit([&](handler &CGH) { - CGH.parallel_for(NDR1, Props, Redu1, Redu2, - [](nd_item<1>, auto &, auto &) {}); - }); + // DUPLICATE, REMOVED // CHECK-IR: spir_kernel void @{{.*}}WGSizeKernel24(){{.*}} #[[DHAttr2]] Q.submit([&](handler &CGH) {