Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion benchmarks/bench.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#define MY_BENCHMARK_CAPTURE(func, T, test_case_name, ...) \
BENCHMARK_PRIVATE_DECLARE(func) \
= (::benchmark::internal::RegisterBenchmarkInternal( \
std::unique_ptr<benchmark::internal::Benchmark>( \
std::unique_ptr<::benchmark::Benchmark>( \
new ::benchmark::internal::FunctionBenchmark( \
#func "/" #test_case_name "/" #T, \
[](::benchmark::State &st) { \
Expand Down
3 changes: 1 addition & 2 deletions lib/x86simdsort-avx2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@
bool descending, \
bool nans_last) \
{ \
x86simdsortStatic::qsort( \
arr, arrsize, hasnan, descending, nans_last); \
x86simdsortStatic::qsort(arr, arrsize, hasnan, descending, nans_last); \
} \
template <> \
void qselect(type *arr, \
Expand Down
7 changes: 2 additions & 5 deletions lib/x86simdsort-scalar.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,8 @@ namespace utils {

namespace scalar {
template <typename T>
void qsort(T *arr,
size_t arrsize,
bool hasnan,
bool reversed,
bool nans_last)
void
qsort(T *arr, size_t arrsize, bool hasnan, bool reversed, bool nans_last)
{
std::sort(arr,
arr + arrsize,
Expand Down
3 changes: 1 addition & 2 deletions lib/x86simdsort-skx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@
bool descending, \
bool nans_last) \
{ \
x86simdsortStatic::qsort( \
arr, arrsize, hasnan, descending, nans_last); \
x86simdsortStatic::qsort(arr, arrsize, hasnan, descending, nans_last); \
} \
template <> \
void qselect(type *arr, \
Expand Down
11 changes: 6 additions & 5 deletions lib/x86simdsort.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,7 @@ namespace x86simdsort {
bool nans_last) \
{ \
if (internal_qsort##TYPE == NULL) { CAT(resolve_qsort, TYPE)(); } \
(*internal_qsort##TYPE)( \
arr, arrsize, hasnan, descending, nans_last); \
(*internal_qsort##TYPE)(arr, arrsize, hasnan, descending, nans_last); \
}

#define DECLARE_INTERNAL_qselect(TYPE) \
Expand Down Expand Up @@ -202,8 +201,7 @@ namespace x86simdsort {
bool descending, \
bool nans_last) \
{ \
(*internal_qsort##TYPE)( \
arr, arrsize, hasnan, descending, nans_last); \
(*internal_qsort##TYPE)(arr, arrsize, hasnan, descending, nans_last); \
}

#define DECLARE_INTERNAL_qselect(TYPE) \
Expand Down Expand Up @@ -520,7 +518,10 @@ void keyvalue_qsort_uint32_uint64(uint32_t *key, uint64_t *val, size_t size)
x86simdsort::keyvalue_qsort(key, val, size, true);
}
XSS_EXPORT_SYMBOL
void keyvalue_partialsort_float_int32(float *key, int32_t *val, size_t size, size_t k)
void keyvalue_partialsort_float_int32(float *key,
int32_t *val,
size_t size,
size_t k)
{
x86simdsort::keyvalue_partial_sort(key, val, size, k);
}
Expand Down
31 changes: 11 additions & 20 deletions src/x86simdsort-static-incl.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,11 +90,8 @@ X86_SIMD_SORT_FINLINE void keyvalue_partial_sort(T1 *key,

#define XSS_METHODS(ISA) \
template <typename T> \
X86_SIMD_SORT_FINLINE void x86simdsortStatic::qsort(T *arr, \
size_t size, \
bool hasnan, \
bool descending, \
bool nans_last) \
X86_SIMD_SORT_FINLINE void x86simdsortStatic::qsort( \
T *arr, size_t size, bool hasnan, bool descending, bool nans_last) \
{ \
ISA##_qsort(arr, size, hasnan, descending, nans_last); \
} \
Expand Down Expand Up @@ -144,14 +141,13 @@ X86_SIMD_SORT_FINLINE void keyvalue_partial_sort(T1 *key,
return indices; \
} \
template <typename T> \
X86_SIMD_SORT_FINLINE void x86simdsortStatic::argselect( \
const T *arr, \
size_t *arg, \
size_t k, \
size_t size, \
bool hasnan, \
bool descending, \
bool nans_last) \
X86_SIMD_SORT_FINLINE void x86simdsortStatic::argselect(const T *arr, \
size_t *arg, \
size_t k, \
size_t size, \
bool hasnan, \
bool descending, \
bool nans_last) \
{ \
ISA##_argselect(arr, arg, k, size, hasnan, descending, nans_last); \
} \
Expand All @@ -166,13 +162,8 @@ X86_SIMD_SORT_FINLINE void keyvalue_partial_sort(T1 *key,
{ \
std::vector<size_t> indices(size); \
std::iota(indices.begin(), indices.end(), 0); \
x86simdsortStatic::argselect(arr, \
indices.data(), \
k, \
size, \
hasnan, \
descending, \
nans_last); \
x86simdsortStatic::argselect( \
arr, indices.data(), k, size, hasnan, descending, nans_last); \
return indices; \
} \
template <typename T1, typename T2> \
Expand Down
23 changes: 11 additions & 12 deletions src/xss-common-argsort.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,18 +43,17 @@ X86_SIMD_SORT_INLINE void std_argsort_withnan(const T *arr,
bool nans_last = true,
bool descending = false)
{
std::sort(
arg + left,
arg + right,
[arr, nans_last, descending](arrsize_t a, arrsize_t b) -> bool {
bool a_nan = std::isnan(arr[a]);
bool b_nan = std::isnan(arr[b]);
if (!a_nan && !b_nan) {
return descending ? arr[a] > arr[b] : arr[a] < arr[b];
}
if (a_nan && b_nan) { return false; }
return nans_last ? !a_nan : a_nan;
});
std::sort(arg + left,
arg + right,
[arr, nans_last, descending](arrsize_t a, arrsize_t b) -> bool {
bool a_nan = std::isnan(arr[a]);
bool b_nan = std::isnan(arr[b]);
if (!a_nan && !b_nan) {
return descending ? arr[a] > arr[b] : arr[a] < arr[b];
}
if (a_nan && b_nan) { return false; }
return nans_last ? !a_nan : a_nan;
});
}

/* argsort using std::sort */
Expand Down
3 changes: 1 addition & 2 deletions src/xss-common-qsort.h
Original file line number Diff line number Diff line change
Expand Up @@ -720,8 +720,7 @@ X86_SIMD_SORT_INLINE void xss_partial_qsort(T *arr,
bool nans_last = true)
{
if (k == 0) return;
xss_qselect<vtype, T, descending>(
arr, k - 1, arrsize, hasnan, nans_last);
xss_qselect<vtype, T, descending>(arr, k - 1, arrsize, hasnan, nans_last);
xss_qsort<vtype, T, descending>(arr, k - 1, hasnan, nans_last);
}

Expand Down
Loading