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

Commit f779c7e

Browse files
authored
Reduce the test scope for sort.cpp (#670)
This test takes ~50 sec to run in CI system, whereas most of other tests executed in < 5 sec. There should be no value in running multiple problem sizes to validate that sort works.
1 parent 3d47daa commit f779c7e

File tree

1 file changed

+29
-30
lines changed

1 file changed

+29
-30
lines changed

SYCL/GroupAlgorithm/SYCL2020/sort.cpp

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,16 @@
22
// RUN: %CPU_RUN_PLACEHOLDER %t.out
33
// RUN: %GPU_RUN_PLACEHOLDER %t.out
44
// RUN: %ACC_RUN_PLACEHOLDER %t.out
5-
//
6-
// RUNx: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -I . -o %t13.out
75

86
#include "support.h"
9-
#include <CL/sycl.hpp>
7+
#include <sycl/sycl.hpp>
108

119
#include <algorithm>
1210
#include <iostream>
1311
#include <random>
1412
#include <vector>
1513

16-
namespace my_sycl = sycl::ext::oneapi::experimental;
14+
namespace oneapi_exp = sycl::ext::oneapi::experimental;
1715

1816
auto async_handler_ = [](sycl::exception_list ex_list) {
1917
for (auto &ex : ex_list) {
@@ -38,14 +36,11 @@ struct CustomFunctor {
3836
}
3937
};
4038

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-
4439
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;
4641
}
4742
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;
4944
}
5045

5146
template <typename T>
@@ -105,8 +100,9 @@ int test_sort_over_group(sycl::queue &q, std::size_t local,
105100

106101
sycl::range<dim> local_range = get_range<dim>(local);
107102

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);
110106

111107
if (local_memory_size >
112108
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,
129125
case 0:
130126
if constexpr (std::is_same_v<Compare, std::less<T>> &&
131127
!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(
134130
id.get_group(),
135131
sycl::span{&scratch[0], local_memory_size}),
136132
aI1[local_id]);
137133
break;
138134
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(
141137
id.get_group(),
142138
sycl::span{&scratch[0], local_memory_size}),
143139
aI1[local_id], comp);
144140
break;
145141
case 2:
146-
aI1[local_id] = my_sycl::sort_over_group(
142+
aI1[local_id] = oneapi_exp::sort_over_group(
147143
id.get_group(), aI1[local_id],
148-
my_sycl::default_sorter<Compare>(
144+
oneapi_exp::default_sorter<Compare>(
149145
sycl::span{&scratch[0], local_memory_size}));
150146
break;
151147
}
@@ -160,8 +156,9 @@ int test_joint_sort(sycl::queue &q, std::size_t n_items, std::size_t local,
160156
auto n = bufI1.size();
161157
auto n_groups = (n - 1) / n_items + 1;
162158

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);
165162
if (local_memory_size >
166163
q.get_device().template get_info<sycl::info::device::local_mem_size>())
167164
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,
187184
case 0:
188185
if constexpr (std::is_same_v<Compare, std::less<T>> &&
189186
!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(
192189
id.get_group(),
193190
sycl::span{&scratch[0], local_memory_size}),
194191
ptr_keys,
195192
ptr_keys + sycl::min(n_items, n - group_id * n_items));
196193
break;
197194
case 1:
198-
my_sycl::joint_sort(
199-
my_sycl::group_with_scratchpad(
195+
oneapi_exp::joint_sort(
196+
oneapi_exp::group_with_scratchpad(
200197
id.get_group(),
201198
sycl::span{&scratch[0], local_memory_size}),
202199
ptr_keys,
203200
ptr_keys + sycl::min(n_items, n - group_id * n_items), comp);
204201
break;
205202
case 2:
206-
my_sycl::joint_sort(
203+
oneapi_exp::joint_sort(
207204
id.get_group(), ptr_keys,
208205
ptr_keys + sycl::min(n_items, n - group_id * n_items),
209-
my_sycl::default_sorter<Compare>(
206+
oneapi_exp::default_sorter<Compare>(
210207
sycl::span{&scratch[0], local_memory_size}));
211208
break;
212209
}
@@ -217,7 +214,7 @@ int test_joint_sort(sycl::queue &q, std::size_t n_items, std::size_t local,
217214

218215
template <typename T, typename Compare>
219216
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;
221218
auto n = bufI1.size();
222219
if (n > local)
223220
return -1;
@@ -230,7 +227,7 @@ int test_custom_sorter(sycl::queue &q, sycl::buffer<T> &bufI1, Compare comp) {
230227
sycl::nd_range<2>({local, 1}, {local, 1}), [=](sycl::nd_item<2> id) {
231228
auto ptr = aI1.get_pointer();
232229

233-
my_sycl::joint_sort(
230+
oneapi_exp::joint_sort(
234231
id.get_group(), ptr, ptr + n,
235232
bubble_sorter<Compare>{comp, id.get_local_linear_id()});
236233
});
@@ -243,9 +240,11 @@ void run_sort(sycl::queue &q, std::vector<T> &in, std::size_t size,
243240
Compare comp, int test_case, int sort_case) {
244241
std::vector<T> in2(in.begin(), in.begin() + size);
245242
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,
247246
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>());
249248
local = std::min(local, size);
250249
auto n_items = items_per_work_item * local;
251250

@@ -354,7 +353,7 @@ int main(int argc, char *argv[]) {
354353
return 0;
355354
}
356355

357-
std::vector<int> sizes{1, 2, 64, 256, 1024, 2048, 4096};
356+
std::vector<int> sizes{1, 12, 32};
358357

359358
for (int i = 0; i < sizes.size(); ++i) {
360359
test_sort_by_type<std::int8_t>(q, sizes[i]);

0 commit comments

Comments
 (0)