|
8 | 8 |
|
9 | 9 | constexpr size_t N = 1024;
|
10 | 10 |
|
11 |
| -int main() { |
12 |
| - sycl::context Ctx; |
13 |
| - sycl::device Dev = Ctx.get_devices()[0]; |
14 |
| - |
15 |
| - sycl::queue Q1{Ctx, Dev, {sycl::property::queue::in_order{}}}; |
16 |
| - sycl::queue Q2{Ctx, Dev, {sycl::property::queue::in_order{}}}; |
| 11 | +int check_work(sycl::queue &Q1, sycl::queue &Q2) { |
| 12 | + std::cout << "Checking ext_oneapi_set_external_event for a workload." |
| 13 | + << std::endl; |
17 | 14 |
|
18 | 15 | sycl::buffer<int> DevDataBuf{sycl::range{N}};
|
19 | 16 | sycl::accessor DevData{DevDataBuf};
|
20 |
| - int *HostData = (int *)malloc(N * sizeof(int) * 10); |
| 17 | + int *HostData = new int[N * 10]; |
21 | 18 |
|
22 | 19 | for (size_t I = 0; I < 10; ++I) {
|
23 | 20 | Q1.fill(DevData, 0);
|
@@ -52,6 +49,55 @@ int main() {
|
52 | 49 | }
|
53 | 50 | }
|
54 | 51 | }
|
55 |
| - free(HostData); |
| 52 | + delete[] HostData; |
| 53 | + return Failures; |
| 54 | +} |
| 55 | + |
| 56 | +int check_wait(sycl::queue &Q1, sycl::queue &Q2) { |
| 57 | + std::cout << "Checking ext_oneapi_set_external_event with wait on queue." |
| 58 | + << std::endl; |
| 59 | + |
| 60 | + sycl::buffer<int> DevDataBuf{sycl::range{N}}; |
| 61 | + sycl::accessor DevData{DevDataBuf}; |
| 62 | + int *HostData = new int[N]; |
| 63 | + |
| 64 | + Q1.fill(DevData, 0); |
| 65 | + for (size_t I = 0; I < 10; ++I) { |
| 66 | + Q1.submit([&](sycl::handler &h) { |
| 67 | + h.require(DevData); |
| 68 | + h.parallel_for(N, [=](sycl::item<1> Idx) { ++DevData[Idx]; }); |
| 69 | + }); |
| 70 | + } |
| 71 | + sycl::event E = Q1.copy(DevData, HostData); |
| 72 | + |
| 73 | + Q2.ext_oneapi_set_external_event(E); |
| 74 | + Q2.wait_and_throw(); |
| 75 | + |
| 76 | + int Failures = 0; |
| 77 | + for (size_t I = 0; I < N; ++I) { |
| 78 | + int Expected = 10; |
| 79 | + int Actual = HostData[I]; |
| 80 | + if (Expected != Actual) { |
| 81 | + std::cout << "Result not matching the expected value at index " << I |
| 82 | + << ": " << Expected << " != " << Actual << std::endl; |
| 83 | + ++Failures; |
| 84 | + } |
| 85 | + } |
| 86 | + delete[] HostData; |
| 87 | + return Failures; |
| 88 | +} |
| 89 | + |
| 90 | +int main() { |
| 91 | + sycl::context Ctx; |
| 92 | + sycl::device Dev = Ctx.get_devices()[0]; |
| 93 | + |
| 94 | + sycl::queue Q1{Ctx, Dev, {sycl::property::queue::in_order{}}}; |
| 95 | + sycl::queue Q2{Ctx, Dev, {sycl::property::queue::in_order{}}}; |
| 96 | + |
| 97 | + int Failures = 0; |
| 98 | + |
| 99 | + Failures += check_work(Q1, Q2); |
| 100 | + Failures += check_wait(Q1, Q2); |
| 101 | + |
56 | 102 | return Failures;
|
57 | 103 | }
|
0 commit comments