|
1 |
| -// REQUIRES: linux |
2 |
| -// RUN: %{build} %device_asan_flags -O2 -fsanitize-ignorelist=%p/ignorelist.txt -o %t |
3 |
| -// RUN: %{run} %t 2>&1 | FileCheck %s |
4 |
| -// RUN: %{build} %device_asan_flags %if cpu %{ -fsycl-targets=spir64_x86_64 %} %if gpu %{ -fsycl-targets=spir64_gen -Xsycl-target-backend=spir64_gen %gpu_aot_target_opts %} -O2 -fsanitize-ignorelist=%p/ignorelist.txt -o %t2 |
| 1 | +// REQUIRES: linux, cpu || (gpu && level_zero) |
| 2 | +// RUN: %{build} %device_asan_flags -O2 -fsanitize-ignorelist=%p/ignorelist.txt -o %t1 |
| 3 | +// RUN: %{run} %t1 2>&1 | FileCheck %s |
| 4 | +// RUN: %{build} %device_asan_aot_flags -O2 -fsanitize-ignorelist=%p/ignorelist.txt -o %t2 |
5 | 5 | // RUN: %{run} %t2 2>&1 | FileCheck %s
|
6 | 6 |
|
7 | 7 | #include <sycl/detail/core.hpp>
|
8 | 8 | #include <sycl/usm.hpp>
|
9 | 9 |
|
10 | 10 | int main() {
|
| 11 | + constexpr std::size_t N = 8; |
| 12 | + constexpr std::size_t group_size = 4; |
| 13 | + |
11 | 14 | sycl::queue Q;
|
12 |
| - constexpr std::size_t N = 16; |
| 15 | + |
13 | 16 | auto *array = sycl::malloc_device<int>(N, Q);
|
14 | 17 |
|
| 18 | + std::vector<int> v(N); |
| 19 | + sycl::buffer<int, 1> buf(v.data(), v.size()); |
| 20 | + |
15 | 21 | Q.submit([&](sycl::handler &h) {
|
16 |
| - h.parallel_for<class MyKernel>( |
17 |
| - sycl::nd_range<1>(N + 1, 1), |
18 |
| - [=](sycl::nd_item<1> item) { ++array[item.get_global_id(0)]; }); |
| 22 | + auto buf_acc = buf.get_access<sycl::access::mode::read_write>(h); |
| 23 | + auto loc_acc = sycl::local_accessor<int>(group_size, h); |
| 24 | + h.parallel_for<class NoSanitized>( |
| 25 | + sycl::nd_range<1>(N, group_size), [=](sycl::nd_item<1> item) { |
| 26 | + auto gid = item.get_global_id(0); |
| 27 | + auto lid = item.get_local_id(0); |
| 28 | + array[gid] = buf_acc[gid] + loc_acc[lid]; |
| 29 | + }); |
| 30 | + }); |
| 31 | + Q.wait(); |
| 32 | + // CHECK-NOT: ERROR: DeviceSanitizer: out-of-bounds-access |
| 33 | + |
| 34 | + Q.submit([&](sycl::handler &h) { |
| 35 | + auto buf_acc = buf.get_access<sycl::access::mode::read_write>(h); |
| 36 | + auto loc_acc = sycl::local_accessor<int>(group_size, h); |
| 37 | + h.parallel_for<class Sanitized>(sycl::nd_range<1>(N, group_size), |
| 38 | + [=](sycl::nd_item<1> item) { |
| 39 | + auto gid = item.get_global_id(0); |
| 40 | + auto lid = item.get_local_id(0); |
| 41 | + array[gid] = buf_acc[gid] + loc_acc[lid]; |
| 42 | + }); |
19 | 43 | });
|
20 | 44 | Q.wait();
|
21 | 45 |
|
22 | 46 | sycl::free(array, Q);
|
23 | 47 | std::cout << "PASS" << std::endl;
|
| 48 | + // CHECK: PASS |
| 49 | + |
24 | 50 | return 0;
|
25 | 51 | }
|
26 |
| - |
27 |
| -// CHECK: PASS |
|
0 commit comments