Skip to content
This repository was archived by the owner on Mar 28, 2023. It is now read-only.

Commit 0d28d5f

Browse files
[SYCL] Add a test for in-order queue event dependencies (#79)
1 parent 182e444 commit 0d28d5f

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

SYCL/Scheduler/InOrderQueueDeps.cpp

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.out
2+
// RUN: env %HOST_RUN_PLACEHOLDER %t.out
3+
// RUN: env SYCL_PI_TRACE=2 %CPU_RUN_PLACEHOLDER %t.out 2>&1 %CPU_CHECK_PLACEHOLDER
4+
// RUN: env SYCL_PI_TRACE=2 %GPU_RUN_PLACEHOLDER %t.out 2>&1 %GPU_CHECK_PLACEHOLDER
5+
// RUN: env SYCL_PI_TRACE=2 %ACC_RUN_PLACEHOLDER %t.out 2>&1 %ACC_CHECK_PLACEHOLDER
6+
7+
//==----------------------- InOrderQueueDeps.cpp ---------------------------==//
8+
//
9+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
10+
// See https://llvm.org/LICENSE.txt for license information.
11+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
12+
//
13+
//===----------------------------------------------------------------------===//
14+
15+
#include <CL/sycl.hpp>
16+
17+
class KernelA;
18+
19+
using namespace cl;
20+
21+
void submitKernel(sycl::queue &Queue, sycl::buffer<int, 1> &Buf) {
22+
Queue.submit([&](sycl::handler &Cgh) {
23+
auto BufAcc = Buf.get_access<sycl::access::mode::read_write>(Cgh);
24+
Cgh.single_task<KernelA>([=]() { (void)BufAcc[0]; });
25+
});
26+
}
27+
28+
int main() {
29+
int val;
30+
sycl::buffer<int, 1> Buf{&val, sycl::range<1>(1)};
31+
32+
sycl::default_selector DeviceSelector;
33+
sycl::device Dev = DeviceSelector.select_device();
34+
sycl::context Ctx{Dev};
35+
36+
sycl::queue InOrderQueueA{Ctx, Dev, sycl::property::queue::in_order()};
37+
sycl::queue InOrderQueueB{Ctx, Dev, sycl::property::queue::in_order()};
38+
39+
// Sequential submissions to the same in-order queue should not result in any
40+
// event dependencies.
41+
// CHECK: piEnqueueKernelLaunch
42+
// CHECK-NEXT: :
43+
// CHECK-NEXT: :
44+
// CHECK-NEXT: :
45+
// CHECK-NEXT: :
46+
// CHECK-NEXT: :
47+
// CHECK-NEXT: :
48+
// CHECK-NEXT: : 0
49+
submitKernel(InOrderQueueA, Buf);
50+
// CHECK: piEnqueueKernelLaunch
51+
// CHECK-NEXT: :
52+
// CHECK-NEXT: :
53+
// CHECK-NEXT: :
54+
// CHECK-NEXT: :
55+
// CHECK-NEXT: :
56+
// CHECK-NEXT: :
57+
// CHECK-NEXT: : 0
58+
submitKernel(InOrderQueueA, Buf);
59+
// Submisssion to a different in-order queue should explicitly depend on the
60+
// previous command group.
61+
// CHECK: piEnqueueKernelLaunch
62+
// CHECK-NEXT: :
63+
// CHECK-NEXT: :
64+
// CHECK-NEXT: :
65+
// CHECK-NEXT: :
66+
// CHECK-NEXT: :
67+
// CHECK-NEXT: :
68+
// CHECK-NEXT: : 1
69+
submitKernel(InOrderQueueB, Buf);
70+
71+
return 0;
72+
}

0 commit comments

Comments
 (0)