|
| 1 | +// REQUIRES: aspect-usm_shared_allocations |
| 2 | +// RUN: %{build} -o %t.out |
| 3 | +// RUN: %{run} %t.out |
| 4 | + |
| 5 | +// This test checks whether the free function command launch grouped reduce is |
| 6 | +// valid. |
| 7 | + |
| 8 | +#define __DPCPP_ENABLE_UNFINISHED_KHR_EXTENSIONS |
| 9 | + |
| 10 | +#include <sycl/detail/core.hpp> |
| 11 | +#include <sycl/ext/khr/free_function_commands.hpp> |
| 12 | +#include <sycl/reduction.hpp> |
| 13 | +#include <sycl/usm.hpp> |
| 14 | + |
| 15 | +#include "helpers.hpp" |
| 16 | + |
| 17 | +int main() { |
| 18 | + |
| 19 | + int Failed = 0; |
| 20 | + sycl::queue Queue; |
| 21 | + |
| 22 | + { |
| 23 | + int Result = 0; |
| 24 | + constexpr size_t Dim = 8; |
| 25 | + constexpr size_t N = Dim * Dim * Dim - 1; |
| 26 | + constexpr int ExpectedResult = N * (N + 1) / 2; |
| 27 | + { |
| 28 | + sycl::buffer<int> sumBuf{&Result, 1}; |
| 29 | + Queue.submit([&](sycl::handler &Handler) { |
| 30 | + sycl::khr::launch_grouped_reduce( |
| 31 | + Handler, sycl::range<3>(Dim, Dim, Dim), sycl::range<3>(8, 8, 8), |
| 32 | + [=](sycl::nd_item<3> Item, auto &Sum) { |
| 33 | + Sum += Item.get_local_linear_id(); |
| 34 | + }, |
| 35 | + sycl::reduction(sumBuf, Handler, sycl::plus<>())); |
| 36 | + }); |
| 37 | + } |
| 38 | + Failed += |
| 39 | + Check(Result, ExpectedResult, "launch_grouped_reduce_with_buffer"); |
| 40 | + } |
| 41 | + |
| 42 | + { |
| 43 | + int *Result = sycl::malloc_shared<int>(1, Queue); |
| 44 | + Result[0] = 0; |
| 45 | + constexpr size_t N = 1024; |
| 46 | + constexpr int ExpectedResult = ((N - 1) * N) / 2; |
| 47 | + |
| 48 | + sycl::event Event = |
| 49 | + sycl::khr::submit_tracked(Queue, [&](sycl::handler &Handler) { |
| 50 | + sycl::khr::launch_grouped_reduce( |
| 51 | + Handler, sycl::range<3>(8, 8, N / 64), sycl::range<3>(8, 8, 8), |
| 52 | + [=](sycl::nd_item<3> Item, auto &Sum) { Sum += 1; }, |
| 53 | + sycl::reduction(Result, sycl::plus<>())); |
| 54 | + }); |
| 55 | + |
| 56 | + sycl::khr::submit(Queue, [&](sycl::handler &Handler) { |
| 57 | + Handler.depends_on(Event); |
| 58 | + sycl::khr::launch_grouped_reduce( |
| 59 | + Handler, sycl::range<2>(16, N / 16), sycl::range<2>(8, 8), |
| 60 | + [=](sycl::nd_item<2> Item, auto &Sum) { Sum += 1; }, |
| 61 | + sycl::reduction(Result, sycl::plus<>())); |
| 62 | + }); |
| 63 | + Queue.wait(); |
| 64 | + Failed += Check(Result[0], N * 2, "launch_grouped_reduce_with_usm"); |
| 65 | + |
| 66 | + Result[0] = 0; |
| 67 | + sycl::khr::launch_grouped_reduce( |
| 68 | + Queue, sycl::range<1>(N), sycl::range<1>(8), |
| 69 | + [=](sycl::nd_item<1> Item, auto &Sum) { |
| 70 | + Sum += Item.get_global_linear_id(); |
| 71 | + }, |
| 72 | + sycl::reduction(Result, sycl::plus<>())); |
| 73 | + |
| 74 | + Queue.wait(); |
| 75 | + Failed += Check(Result[0], ExpectedResult, |
| 76 | + "launch_grouped_reduce_shortcut_with_usm"); |
| 77 | + sycl::free(Result, Queue); |
| 78 | + } |
| 79 | + |
| 80 | + return Failed; |
| 81 | +} |
0 commit comments