| // REQUIRES: any-device | |
| // RUN: %clangxx -fsycl %s -o %t.out | |
| // RUN: %t.out | |
| #include <sycl/sycl.hpp> | |
| #include <cassert> | |
| template <int Dims> class group_local_id_kernel; | |
| template <int Dims> | |
| bool runGroupLocalIdCase(sycl::queue &Q, sycl::nd_range<Dims> ExecRange, | |
| size_t Count) { | |
| int *Out = sycl::malloc_shared<int>(Count, Q); | |
| for (size_t I = 0; I < Count; ++I) | |
| Out[I] = -1; | |
| Q.parallel_for<group_local_id_kernel<Dims>>( | |
| ExecRange, [=](sycl::nd_item<Dims> Item) { | |
| Out[Item.get_global_linear_id()] = | |
| (Item.get_local_id() == Item.get_group().get_local_id()); | |
| }); | |
| Q.wait(); | |
| bool Match = true; | |
| for (size_t I = 0; I < Count; ++I) | |
| Match &= (Out[I] == 1); | |
| sycl::free(Out, Q); | |
| return !Match; | |
| } | |
| int main() { | |
| sycl::queue Q; | |
| constexpr size_t N = 8; | |
| bool Failure = runGroupLocalIdCase<1>( | |
| Q, sycl::nd_range<1>{sycl::range<1>{N}, sycl::range<1>{N}}, N); | |
| Failure |= runGroupLocalIdCase<2>( | |
| Q, sycl::nd_range<2>{sycl::range<2>{N, N}, sycl::range<2>{N, N}}, N * N); | |
| Failure |= runGroupLocalIdCase<3>( | |
| Q, sycl::nd_range<3>{sycl::range<3>{N, N, N}, sycl::range<3>{N, N, N}}, | |
| N * N * N); | |
| return Failure; | |
| } |