1
- // UNSUPPORTED: hip
2
1
// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.out
3
2
// RUN: %CPU_RUN_PLACEHOLDER %t.out
4
3
// RUN: %GPU_RUN_PLACEHOLDER %t.out
@@ -11,28 +10,57 @@ int main() {
11
10
sycl::device dev{sycl::default_selector_v};
12
11
sycl::queue q{dev};
13
12
14
- int *x = sycl::malloc_shared<int >(1 , q);
15
- int *y = sycl::malloc_shared<int >(1 , q);
13
+ unsigned long long *x = sycl::malloc_shared<unsigned long long >(1 , q);
14
+
15
+ int error = 0 ;
16
+
17
+ // test barrier without arguments
16
18
*x = 0 ;
17
- *y = 0 ;
19
+ for (int i = 0 ; i < 64 ; i++) {
20
+ q.single_task ([=]() {
21
+ // do some busywork
22
+ volatile float y = *x;
23
+ for (int j = 0 ; j < 100 ; j++) {
24
+ y = sycl::cos (y);
25
+ }
26
+ // update the value
27
+ *x *= 2 ;
28
+ });
29
+ q.ext_oneapi_submit_barrier ();
30
+ q.single_task ([=]() { *x += 1 ; });
31
+ q.ext_oneapi_submit_barrier ();
32
+ }
18
33
19
- q. single_task < class kernel1 >([=] { *x = 1 ; }) ;
34
+ std::cout << std::bitset< 8 * sizeof ( unsigned long long )>(*x) << std::endl ;
20
35
21
- q.ext_oneapi_submit_barrier ();
36
+ q.wait_and_throw ();
37
+ error |= (*x != (unsigned long long )-1 );
22
38
23
- q.single_task <class kernel2 >([=] {
24
- if (*x == 1 ) {
25
- *y = 2 ;
26
- }
27
- });
39
+ // test barrier when events are passed arguments
40
+ *x = 0 ;
41
+ for (int i = 0 ; i < 64 ; i++) {
42
+ sycl::event e = q.single_task ([=]() {
43
+ // do some busywork
44
+ volatile float y = *x;
45
+ for (int j = 0 ; j < 100 ; j++) {
46
+ y = sycl::cos (y);
47
+ }
48
+ // update the value
49
+ *x *= 2 ;
50
+ });
51
+ q.ext_oneapi_submit_barrier ({e});
52
+ e = q.single_task ([=]() { *x += 1 ; });
53
+ q.ext_oneapi_submit_barrier ({e});
54
+ }
28
55
29
56
q.wait_and_throw ();
57
+ error |= (*x != (unsigned long long )-1 );
58
+
59
+ std::cout << std::bitset<8 * sizeof (unsigned long long )>(*x) << std::endl;
30
60
31
- int error = (*x != 1 || *y != 2 ) ? 1 : 0 ;
32
61
std::cout << (error ? " failed\n " : " passed\n " );
33
62
34
63
sycl::free (x, q);
35
- sycl::free (y, q);
36
64
37
65
return error;
38
66
}
0 commit comments