Skip to content

Commit aadca4c

Browse files
author
Raghuveer Devulapalli
committed
Revert "Changed from boolean descending flag to enum"
This reverts commit 9d508c1.
1 parent 93b625e commit aadca4c

13 files changed

+101
-186
lines changed

benchmarks/bench-qsort.hpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,7 @@ static void simd_revsort(benchmark::State &state, Args &&...args)
6767
std::vector<T> arr_bkp = arr;
6868
// benchmark
6969
for (auto _ : state) {
70-
x86simdsort::qsort(arr.data(),
71-
arrsize,
72-
false,
73-
x86simdsort::sort_order::sort_descending);
70+
x86simdsort::qsort(arr.data(), arrsize, false, true);
7471
state.PauseTiming();
7572
arr = arr_bkp;
7673
state.ResumeTiming();

lib/x86simdsort-avx2.cpp

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,31 +5,23 @@
55
#include "xss-common-argsort.h"
66
#include "x86simdsort-internal.h"
77

8-
using x86simdsort::sort_order;
9-
108
#define DEFINE_ALL_METHODS(type) \
119
template <> \
12-
void qsort(type *arr, size_t arrsize, bool hasnan, sort_order order) \
10+
void qsort(type *arr, size_t arrsize, bool hasnan, bool descending) \
1311
{ \
14-
avx2_qsort(arr, arrsize, hasnan, order); \
12+
avx2_qsort(arr, arrsize, hasnan, descending); \
1513
} \
1614
template <> \
17-
void qselect(type *arr, \
18-
size_t k, \
19-
size_t arrsize, \
20-
bool hasnan, \
21-
sort_order order) \
15+
void qselect( \
16+
type *arr, size_t k, size_t arrsize, bool hasnan, bool descending) \
2217
{ \
23-
avx2_qselect(arr, k, arrsize, hasnan, order); \
18+
avx2_qselect(arr, k, arrsize, hasnan, descending); \
2419
} \
2520
template <> \
26-
void partial_qsort(type *arr, \
27-
size_t k, \
28-
size_t arrsize, \
29-
bool hasnan, \
30-
sort_order order) \
21+
void partial_qsort( \
22+
type *arr, size_t k, size_t arrsize, bool hasnan, bool descending) \
3123
{ \
32-
avx2_partial_qsort(arr, k, arrsize, hasnan, order); \
24+
avx2_partial_qsort(arr, k, arrsize, hasnan, descending); \
3325
} \
3426
template <> \
3527
std::vector<size_t> argsort(type *arr, size_t arrsize, bool hasnan) \

lib/x86simdsort-icl.cpp

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,55 +2,53 @@
22
#include "avx512-16bit-qsort.hpp"
33
#include "x86simdsort-internal.h"
44

5-
using x86simdsort::sort_order;
6-
75
namespace xss {
86
namespace avx512 {
97
template <>
10-
void qsort(uint16_t *arr, size_t size, bool hasnan, sort_order order)
8+
void qsort(uint16_t *arr, size_t size, bool hasnan, bool descending)
119
{
12-
avx512_qsort(arr, size, hasnan, order);
10+
avx512_qsort(arr, size, hasnan, descending);
1311
}
1412
template <>
1513
void qselect(uint16_t *arr,
1614
size_t k,
1715
size_t arrsize,
1816
bool hasnan,
19-
sort_order order)
17+
bool descending)
2018
{
21-
avx512_qselect(arr, k, arrsize, hasnan, order);
19+
avx512_qselect(arr, k, arrsize, hasnan, descending);
2220
}
2321
template <>
2422
void partial_qsort(uint16_t *arr,
2523
size_t k,
2624
size_t arrsize,
2725
bool hasnan,
28-
sort_order order)
26+
bool descending)
2927
{
30-
avx512_partial_qsort(arr, k, arrsize, hasnan, order);
28+
avx512_partial_qsort(arr, k, arrsize, hasnan, descending);
3129
}
3230
template <>
33-
void qsort(int16_t *arr, size_t size, bool hasnan, sort_order order)
31+
void qsort(int16_t *arr, size_t size, bool hasnan, bool descending)
3432
{
35-
avx512_qsort(arr, size, hasnan, order);
33+
avx512_qsort(arr, size, hasnan, descending);
3634
}
3735
template <>
3836
void qselect(int16_t *arr,
3937
size_t k,
4038
size_t arrsize,
4139
bool hasnan,
42-
sort_order order)
40+
bool descending)
4341
{
44-
avx512_qselect(arr, k, arrsize, hasnan, order);
42+
avx512_qselect(arr, k, arrsize, hasnan, descending);
4543
}
4644
template <>
4745
void partial_qsort(int16_t *arr,
4846
size_t k,
4947
size_t arrsize,
5048
bool hasnan,
51-
sort_order order)
49+
bool descending)
5250
{
53-
avx512_partial_qsort(arr, k, arrsize, hasnan, order);
51+
avx512_partial_qsort(arr, k, arrsize, hasnan, descending);
5452
}
5553
} // namespace avx512
5654
} // namespace xss

lib/x86simdsort-internal.h

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,12 @@
44
#include <stdint.h>
55
#include <vector>
66

7-
using x86simdsort::sort_order;
8-
97
namespace xss {
108
namespace avx512 {
119
// quicksort
1210
template <typename T>
13-
XSS_HIDE_SYMBOL void qsort(T *arr,
14-
size_t arrsize,
15-
bool hasnan = false,
16-
sort_order order = sort_order::sort_ascending);
11+
XSS_HIDE_SYMBOL void
12+
qsort(T *arr, size_t arrsize, bool hasnan = false, bool descending = false);
1713
// key-value quicksort
1814
template <typename T1, typename T2>
1915
XSS_EXPORT_SYMBOL void
@@ -24,15 +20,14 @@ namespace avx512 {
2420
size_t k,
2521
size_t arrsize,
2622
bool hasnan = false,
27-
sort_order order = sort_order::sort_ascending);
23+
bool descending = false);
2824
// partial sort
2925
template <typename T>
3026
XSS_HIDE_SYMBOL void partial_qsort(T *arr,
3127
size_t k,
3228
size_t arrsize,
3329
bool hasnan = false,
34-
sort_order order
35-
= sort_order::sort_ascending);
30+
bool descending = false);
3631
// argsort
3732
template <typename T>
3833
XSS_HIDE_SYMBOL std::vector<size_t>
@@ -45,10 +40,8 @@ namespace avx512 {
4540
namespace avx2 {
4641
// quicksort
4742
template <typename T>
48-
XSS_HIDE_SYMBOL void qsort(T *arr,
49-
size_t arrsize,
50-
bool hasnan = false,
51-
sort_order order = sort_order::sort_ascending);
43+
XSS_HIDE_SYMBOL void
44+
qsort(T *arr, size_t arrsize, bool hasnan = false, bool descending = false);
5245
// key-value quicksort
5346
template <typename T1, typename T2>
5447
XSS_EXPORT_SYMBOL void
@@ -59,15 +52,14 @@ namespace avx2 {
5952
size_t k,
6053
size_t arrsize,
6154
bool hasnan = false,
62-
sort_order order = sort_order::sort_ascending);
55+
bool descending = false);
6356
// partial sort
6457
template <typename T>
6558
XSS_HIDE_SYMBOL void partial_qsort(T *arr,
6659
size_t k,
6760
size_t arrsize,
6861
bool hasnan = false,
69-
sort_order order
70-
= sort_order::sort_ascending);
62+
bool descending = false);
7163
// argsort
7264
template <typename T>
7365
XSS_HIDE_SYMBOL std::vector<size_t>

lib/x86simdsort-orders.h

Lines changed: 0 additions & 10 deletions
This file was deleted.

lib/x86simdsort-scalar.h

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
#include <algorithm>
33
#include <numeric>
44

5-
using x86simdsort::sort_order;
6-
75
namespace xss {
86
namespace utils {
97
/*
@@ -26,21 +24,17 @@ namespace utils {
2624
}
2725
}
2826
template <typename T>
29-
decltype(auto) get_cmp_func(bool hasnan, sort_order order)
27+
decltype(auto) get_cmp_func(bool hasnan, bool reverse)
3028
{
3129
std::function<bool(T, T)> cmp;
3230
if (hasnan) {
33-
if (order == sort_order::sort_descending) {
34-
cmp = compare<T, std::greater<T>>();
35-
}
31+
if (reverse == true) { cmp = compare<T, std::greater<T>>(); }
3632
else {
3733
cmp = compare<T, std::less<T>>();
3834
}
3935
}
4036
else {
41-
if (order == sort_order::sort_descending) {
42-
cmp = std::greater<T>();
43-
}
37+
if (reverse == true) { cmp = std::greater<T>(); }
4438
else {
4539
cmp = std::less<T>();
4640
}
@@ -51,29 +45,29 @@ namespace utils {
5145

5246
namespace scalar {
5347
template <typename T>
54-
void qsort(T *arr, size_t arrsize, bool hasnan, sort_order order)
48+
void qsort(T *arr, size_t arrsize, bool hasnan, bool reversed)
5549
{
56-
std::sort(
57-
arr, arr + arrsize, xss::utils::get_cmp_func<T>(hasnan, order));
50+
std::sort(arr,
51+
arr + arrsize,
52+
xss::utils::get_cmp_func<T>(hasnan, reversed));
5853
}
5954

6055
template <typename T>
61-
void
62-
qselect(T *arr, size_t k, size_t arrsize, bool hasnan, sort_order order)
56+
void qselect(T *arr, size_t k, size_t arrsize, bool hasnan, bool reversed)
6357
{
6458
std::nth_element(arr,
6559
arr + k,
6660
arr + arrsize,
67-
xss::utils::get_cmp_func<T>(hasnan, order));
61+
xss::utils::get_cmp_func<T>(hasnan, reversed));
6862
}
6963
template <typename T>
70-
void partial_qsort(
71-
T *arr, size_t k, size_t arrsize, bool hasnan, sort_order order)
64+
void
65+
partial_qsort(T *arr, size_t k, size_t arrsize, bool hasnan, bool reversed)
7266
{
7367
std::partial_sort(arr,
7468
arr + k,
7569
arr + arrsize,
76-
xss::utils::get_cmp_func<T>(hasnan, order));
70+
xss::utils::get_cmp_func<T>(hasnan, reversed));
7771
}
7872
template <typename T>
7973
std::vector<size_t> argsort(T *arr, size_t arrsize, bool hasnan)

lib/x86simdsort-skx.cpp

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,31 +5,23 @@
55
#include "avx512-64bit-qsort.hpp"
66
#include "x86simdsort-internal.h"
77

8-
using x86simdsort::sort_order;
9-
108
#define DEFINE_ALL_METHODS(type) \
119
template <> \
12-
void qsort(type *arr, size_t arrsize, bool hasnan, sort_order order) \
10+
void qsort(type *arr, size_t arrsize, bool hasnan, bool descending) \
1311
{ \
14-
avx512_qsort(arr, arrsize, hasnan, order); \
12+
avx512_qsort(arr, arrsize, hasnan, descending); \
1513
} \
1614
template <> \
17-
void qselect(type *arr, \
18-
size_t k, \
19-
size_t arrsize, \
20-
bool hasnan, \
21-
sort_order order) \
15+
void qselect( \
16+
type *arr, size_t k, size_t arrsize, bool hasnan, bool descending) \
2217
{ \
23-
avx512_qselect(arr, k, arrsize, hasnan, order); \
18+
avx512_qselect(arr, k, arrsize, hasnan, descending); \
2419
} \
2520
template <> \
26-
void partial_qsort(type *arr, \
27-
size_t k, \
28-
size_t arrsize, \
29-
bool hasnan, \
30-
sort_order order) \
21+
void partial_qsort( \
22+
type *arr, size_t k, size_t arrsize, bool hasnan, bool descending) \
3123
{ \
32-
avx512_partial_qsort(arr, k, arrsize, hasnan, order); \
24+
avx512_partial_qsort(arr, k, arrsize, hasnan, descending); \
3325
} \
3426
template <> \
3527
std::vector<size_t> argsort(type *arr, size_t arrsize, bool hasnan) \

lib/x86simdsort-spr.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,30 @@
22
#include "avx512fp16-16bit-qsort.hpp"
33
#include "x86simdsort-internal.h"
44

5-
using x86simdsort::sort_order;
6-
75
namespace xss {
86
namespace avx512 {
97
template <>
10-
void qsort(_Float16 *arr, size_t size, bool hasnan, sort_order order)
8+
void qsort(_Float16 *arr, size_t size, bool hasnan, bool descending)
119
{
12-
avx512_qsort(arr, size, hasnan, order);
10+
avx512_qsort(arr, size, hasnan, descending);
1311
}
1412
template <>
1513
void qselect(_Float16 *arr,
1614
size_t k,
1715
size_t arrsize,
1816
bool hasnan,
19-
sort_order order)
17+
bool descending)
2018
{
21-
avx512_qselect(arr, k, arrsize, hasnan, order);
19+
avx512_qselect(arr, k, arrsize, hasnan, descending);
2220
}
2321
template <>
2422
void partial_qsort(_Float16 *arr,
2523
size_t k,
2624
size_t arrsize,
2725
bool hasnan,
28-
sort_order order)
26+
bool descending)
2927
{
30-
avx512_partial_qsort(arr, k, arrsize, hasnan, order);
28+
avx512_partial_qsort(arr, k, arrsize, hasnan, descending);
3129
}
3230
} // namespace avx512
3331
} // namespace xss

0 commit comments

Comments
 (0)