2
2
// RUN: %CPU_RUN_PLACEHOLDER %t.out
3
3
// RUN: %GPU_RUN_PLACEHOLDER %t.out
4
4
// RUN: %ACC_RUN_PLACEHOLDER %t.out
5
- //
6
- // RUNx: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -I . -o %t13.out
7
5
8
6
#include " support.h"
9
- #include < CL /sycl.hpp>
7
+ #include < sycl /sycl.hpp>
10
8
11
9
#include < algorithm>
12
10
#include < iostream>
13
11
#include < random>
14
12
#include < vector>
15
13
16
- namespace my_sycl = sycl::ext::oneapi::experimental;
14
+ namespace oneapi_exp = sycl::ext::oneapi::experimental;
17
15
18
16
auto async_handler_ = [](sycl::exception_list ex_list) {
19
17
for (auto &ex : ex_list) {
@@ -38,14 +36,11 @@ struct CustomFunctor {
38
36
}
39
37
};
40
38
41
- // we need it since using std::abs leads to compilation error
42
- template <typename T> T my_abs (T x) { return x >= 0 ? x : -x; }
43
-
44
39
template <typename T> bool check (T lhs, T rhs, float epsilon) {
45
- return my_abs (lhs - rhs) > epsilon;
40
+ return sycl::abs (lhs - rhs) > epsilon;
46
41
}
47
42
bool check (CustomType lhs, CustomType rhs, float epsilon) {
48
- return my_abs (lhs.x - rhs.x ) > epsilon;
43
+ return sycl::abs (lhs.x - rhs.x ) > epsilon;
49
44
}
50
45
51
46
template <typename T>
@@ -105,8 +100,9 @@ int test_sort_over_group(sycl::queue &q, std::size_t local,
105
100
106
101
sycl::range<dim> local_range = get_range<dim>(local);
107
102
108
- std::size_t local_memory_size = my_sycl::default_sorter<>::memory_required<T>(
109
- sycl::memory_scope::work_group, local_range);
103
+ std::size_t local_memory_size =
104
+ oneapi_exp::default_sorter<>::memory_required<T>(
105
+ sycl::memory_scope::work_group, local_range);
110
106
111
107
if (local_memory_size >
112
108
q.get_device ().template get_info <sycl::info::device::local_mem_size>())
@@ -129,23 +125,23 @@ int test_sort_over_group(sycl::queue &q, std::size_t local,
129
125
case 0 :
130
126
if constexpr (std::is_same_v<Compare, std::less<T>> &&
131
127
!std::is_same_v<T, CustomType>)
132
- aI1[local_id] = my_sycl ::sort_over_group (
133
- my_sycl ::group_with_scratchpad (
128
+ aI1[local_id] = oneapi_exp ::sort_over_group (
129
+ oneapi_exp ::group_with_scratchpad (
134
130
id.get_group (),
135
131
sycl::span{&scratch[0 ], local_memory_size}),
136
132
aI1[local_id]);
137
133
break ;
138
134
case 1 :
139
- aI1[local_id] = my_sycl ::sort_over_group (
140
- my_sycl ::group_with_scratchpad (
135
+ aI1[local_id] = oneapi_exp ::sort_over_group (
136
+ oneapi_exp ::group_with_scratchpad (
141
137
id.get_group (),
142
138
sycl::span{&scratch[0 ], local_memory_size}),
143
139
aI1[local_id], comp);
144
140
break ;
145
141
case 2 :
146
- aI1[local_id] = my_sycl ::sort_over_group (
142
+ aI1[local_id] = oneapi_exp ::sort_over_group (
147
143
id.get_group (), aI1[local_id],
148
- my_sycl ::default_sorter<Compare>(
144
+ oneapi_exp ::default_sorter<Compare>(
149
145
sycl::span{&scratch[0 ], local_memory_size}));
150
146
break ;
151
147
}
@@ -160,8 +156,9 @@ int test_joint_sort(sycl::queue &q, std::size_t n_items, std::size_t local,
160
156
auto n = bufI1.size ();
161
157
auto n_groups = (n - 1 ) / n_items + 1 ;
162
158
163
- std::size_t local_memory_size = my_sycl::default_sorter<>::memory_required<T>(
164
- sycl::memory_scope::work_group, n);
159
+ std::size_t local_memory_size =
160
+ oneapi_exp::default_sorter<>::memory_required<T>(
161
+ sycl::memory_scope::work_group, n);
165
162
if (local_memory_size >
166
163
q.get_device ().template get_info <sycl::info::device::local_mem_size>())
167
164
std::cout << " local_memory_size = " << local_memory_size << " , available = "
@@ -187,26 +184,26 @@ int test_joint_sort(sycl::queue &q, std::size_t n_items, std::size_t local,
187
184
case 0 :
188
185
if constexpr (std::is_same_v<Compare, std::less<T>> &&
189
186
!std::is_same_v<T, CustomType>)
190
- my_sycl ::joint_sort (
191
- my_sycl ::group_with_scratchpad (
187
+ oneapi_exp ::joint_sort (
188
+ oneapi_exp ::group_with_scratchpad (
192
189
id.get_group (),
193
190
sycl::span{&scratch[0 ], local_memory_size}),
194
191
ptr_keys,
195
192
ptr_keys + sycl::min (n_items, n - group_id * n_items));
196
193
break ;
197
194
case 1 :
198
- my_sycl ::joint_sort (
199
- my_sycl ::group_with_scratchpad (
195
+ oneapi_exp ::joint_sort (
196
+ oneapi_exp ::group_with_scratchpad (
200
197
id.get_group (),
201
198
sycl::span{&scratch[0 ], local_memory_size}),
202
199
ptr_keys,
203
200
ptr_keys + sycl::min (n_items, n - group_id * n_items), comp);
204
201
break ;
205
202
case 2 :
206
- my_sycl ::joint_sort (
203
+ oneapi_exp ::joint_sort (
207
204
id.get_group (), ptr_keys,
208
205
ptr_keys + sycl::min (n_items, n - group_id * n_items),
209
- my_sycl ::default_sorter<Compare>(
206
+ oneapi_exp ::default_sorter<Compare>(
210
207
sycl::span{&scratch[0 ], local_memory_size}));
211
208
break ;
212
209
}
@@ -217,7 +214,7 @@ int test_joint_sort(sycl::queue &q, std::size_t n_items, std::size_t local,
217
214
218
215
template <typename T, typename Compare>
219
216
int test_custom_sorter (sycl::queue &q, sycl::buffer<T> &bufI1, Compare comp) {
220
- std::size_t local = 256 ;
217
+ std::size_t local = 4 ;
221
218
auto n = bufI1.size ();
222
219
if (n > local)
223
220
return -1 ;
@@ -230,7 +227,7 @@ int test_custom_sorter(sycl::queue &q, sycl::buffer<T> &bufI1, Compare comp) {
230
227
sycl::nd_range<2 >({local, 1 }, {local, 1 }), [=](sycl::nd_item<2 > id) {
231
228
auto ptr = aI1.get_pointer ();
232
229
233
- my_sycl ::joint_sort (
230
+ oneapi_exp ::joint_sort (
234
231
id.get_group (), ptr, ptr + n,
235
232
bubble_sorter<Compare>{comp, id.get_local_linear_id ()});
236
233
});
@@ -243,9 +240,11 @@ void run_sort(sycl::queue &q, std::vector<T> &in, std::size_t size,
243
240
Compare comp, int test_case, int sort_case) {
244
241
std::vector<T> in2 (in.begin (), in.begin () + size);
245
242
std::vector<T> expected (in.begin (), in.begin () + size);
246
- std::size_t local =
243
+ constexpr size_t work_size_limit = 4 ;
244
+ std::size_t local = std::min (
245
+ work_size_limit,
247
246
q.get_device ()
248
- .template get_info <sycl::info::device::max_work_group_size>();
247
+ .template get_info <sycl::info::device::max_work_group_size>()) ;
249
248
local = std::min (local, size);
250
249
auto n_items = items_per_work_item * local;
251
250
@@ -354,7 +353,7 @@ int main(int argc, char *argv[]) {
354
353
return 0 ;
355
354
}
356
355
357
- std::vector<int > sizes{1 , 2 , 64 , 256 , 1024 , 2048 , 4096 };
356
+ std::vector<int > sizes{1 , 12 , 32 };
358
357
359
358
for (int i = 0 ; i < sizes.size (); ++i) {
360
359
test_sort_by_type<std::int8_t >(q, sizes[i]);
0 commit comments