@@ -11,7 +11,8 @@ using namespace sycl::ext::oneapi;
1111
1212template <template <typename , memory_order, memory_scope, access::address_space>
1313 class AtomicRef ,
14- typename T, typename Difference = T>
14+ access::address_space address_space, typename T,
15+ typename Difference = T>
1516void add_fetch_test (queue q, size_t N) {
1617 T sum = 0 ;
1718 std::vector<T> output (N);
@@ -27,7 +28,7 @@ void add_fetch_test(queue q, size_t N) {
2728 cgh.parallel_for (range<1 >(N), [=](item<1 > it) {
2829 int gid = it.get_id (0 );
2930 auto atm = AtomicRef<T, memory_order::relaxed, memory_scope::device,
30- access:: address_space::global_space >(sum[0 ]);
31+ address_space>(sum[0 ]);
3132 out[gid] = atm.fetch_add (Difference (1 ));
3233 });
3334 });
@@ -48,7 +49,8 @@ void add_fetch_test(queue q, size_t N) {
4849
4950template <template <typename , memory_order, memory_scope, access::address_space>
5051 class AtomicRef ,
51- typename T, typename Difference = T>
52+ access::address_space address_space, typename T,
53+ typename Difference = T>
5254void add_plus_equal_test (queue q, size_t N) {
5355 T sum = 0 ;
5456 std::vector<T> output (N);
@@ -64,7 +66,7 @@ void add_plus_equal_test(queue q, size_t N) {
6466 cgh.parallel_for (range<1 >(N), [=](item<1 > it) {
6567 int gid = it.get_id (0 );
6668 auto atm = AtomicRef<T, memory_order::relaxed, memory_scope::device,
67- access:: address_space::global_space >(sum[0 ]);
69+ address_space>(sum[0 ]);
6870 out[gid] = atm += Difference (1 );
6971 });
7072 });
@@ -85,7 +87,8 @@ void add_plus_equal_test(queue q, size_t N) {
8587
8688template <template <typename , memory_order, memory_scope, access::address_space>
8789 class AtomicRef ,
88- typename T, typename Difference = T>
90+ access::address_space address_space, typename T,
91+ typename Difference = T>
8992void add_pre_inc_test (queue q, size_t N) {
9093 T sum = 0 ;
9194 std::vector<T> output (N);
@@ -101,7 +104,7 @@ void add_pre_inc_test(queue q, size_t N) {
101104 cgh.parallel_for (range<1 >(N), [=](item<1 > it) {
102105 int gid = it.get_id (0 );
103106 auto atm = AtomicRef<T, memory_order::relaxed, memory_scope::device,
104- access:: address_space::global_space >(sum[0 ]);
107+ address_space>(sum[0 ]);
105108 out[gid] = ++atm;
106109 });
107110 });
@@ -122,7 +125,8 @@ void add_pre_inc_test(queue q, size_t N) {
122125
123126template <template <typename , memory_order, memory_scope, access::address_space>
124127 class AtomicRef ,
125- typename T, typename Difference = T>
128+ access::address_space address_space, typename T,
129+ typename Difference = T>
126130void add_post_inc_test (queue q, size_t N) {
127131 T sum = 0 ;
128132 std::vector<T> output (N);
@@ -138,7 +142,7 @@ void add_post_inc_test(queue q, size_t N) {
138142 cgh.parallel_for (range<1 >(N), [=](item<1 > it) {
139143 int gid = it.get_id (0 );
140144 auto atm = AtomicRef<T, memory_order::relaxed, memory_scope::device,
141- access:: address_space::global_space >(sum[0 ]);
145+ address_space>(sum[0 ]);
142146 out[gid] = atm++;
143147 });
144148 });
@@ -159,12 +163,34 @@ void add_post_inc_test(queue q, size_t N) {
159163
160164template <typename T, typename Difference = T>
161165void add_test (queue q, size_t N) {
162- add_fetch_test<::sycl::ext::oneapi::atomic_ref, T, Difference>(q, N);
163- add_fetch_test<::sycl::atomic_ref, T, Difference>(q, N);
164- add_plus_equal_test<::sycl::ext::oneapi::atomic_ref, T, Difference>(q, N);
165- add_plus_equal_test<::sycl::atomic_ref, T, Difference>(q, N);
166- add_pre_inc_test<::sycl::ext::oneapi::atomic_ref, T, Difference>(q, N);
167- add_pre_inc_test<::sycl::atomic_ref, T, Difference>(q, N);
168- add_post_inc_test<::sycl::ext::oneapi::atomic_ref, T, Difference>(q, N);
169- add_post_inc_test<::sycl::atomic_ref, T, Difference>(q, N);
166+ add_fetch_test<::sycl::ext::oneapi::atomic_ref,
167+ access::address_space::global_space, T, Difference>(q, N);
168+ add_fetch_test<::sycl::atomic_ref, access::address_space::global_space, T,
169+ Difference>(q, N);
170+ add_plus_equal_test<::sycl::ext::oneapi::atomic_ref,
171+ access::address_space::global_space, T, Difference>(q, N);
172+ add_plus_equal_test<::sycl::atomic_ref, access::address_space::global_space,
173+ T, Difference>(q, N);
174+ add_pre_inc_test<::sycl::ext::oneapi::atomic_ref,
175+ access::address_space::global_space, T, Difference>(q, N);
176+ add_pre_inc_test<::sycl::atomic_ref, access::address_space::global_space, T,
177+ Difference>(q, N);
178+ add_post_inc_test<::sycl::ext::oneapi::atomic_ref,
179+ access::address_space::global_space, T, Difference>(q, N);
180+ add_post_inc_test<::sycl::atomic_ref, access::address_space::global_space, T,
181+ Difference>(q, N);
182+ }
183+
184+ template <typename T, typename Difference = T>
185+ void add_generic_test (queue q, size_t N) {
186+ add_fetch_test<::sycl::atomic_ref, access::address_space::generic_space, T,
187+ Difference>(q, N);
188+ add_plus_equal_test<::sycl::atomic_ref, access::address_space::generic_space,
189+ T, Difference>(q, N);
190+ add_pre_inc_test<::sycl::atomic_ref, access::address_space::generic_space, T,
191+ Difference>(q, N);
192+ add_post_inc_test<::sycl::atomic_ref, access::address_space::generic_space, T,
193+ Difference>(q, N);
194+ add_post_inc_test<::sycl::atomic_ref, access::address_space::global_space, T,
195+ Difference>(q, N);
170196}
0 commit comments