| // REQUIRES: any-device |
| // RUN: %clangxx -fsycl %s -o %t.out |
| // RUN: %t.out |
| |
| #include <sycl/sycl.hpp> |
| |
| #include <cassert> |
| |
| int main() { |
| sycl::queue Q; |
| |
| constexpr uint32_t Outer = 2; |
| constexpr uint32_t Inner = 8; |
| constexpr uint32_t Size = Outer * Inner; |
| |
| int *Output = sycl::malloc_shared<int>(Size, Q); |
| for (uint32_t I = 0; I < Size; ++I) |
| Output[I] = -1; |
| |
| Q.parallel_for<class linear_sub_group>( |
| sycl::nd_range<2>(sycl::range<2>(Outer, Inner), |
| sycl::range<2>(Outer, Inner)), |
| [=](sycl::nd_item<2> It) { |
| sycl::sub_group SG = It.get_sub_group(); |
| Output[It.get_global_linear_id()] = |
| SG.get_group_linear_id() * SG.get_local_linear_range() + |
| SG.get_local_linear_id(); |
| }); |
| |
| Q.wait(); |
| |
| for (uint32_t I = 0; I < Size; ++I) |
| assert(Output[I] == static_cast<int>(I)); |
| |
| sycl::free(Output, Q); |
| return 0; |
| } |