22
33C++ header file library for SIMD based 16-bit, 32-bit and 64-bit data type
44sorting algorithms on x86 processors. We currently have AVX-512 and AVX2
5- (32-bit and 64-bit only) based implementation of quicksort, quickselect &
6- partialsort and AVX-512 implementations of argsort, argselect and key-value
5+ (32-bit and 64-bit only) based implementation of quicksort, quickselect,
6+ partialsort, argsort, argselect & key-value
77sort. The following API's are currently supported:
88
99#### Quicksort
@@ -30,8 +30,8 @@ Equivalent to `std::nth_element` in
3030
3131
3232``` cpp
33- void avx512_qselect<T>(T* arr, size_t arrsize, bool hasnan = false , bool descending = false );
34- void avx2_qselect<T>(T* arr, size_t arrsize, bool hasnan = false , bool descending = false );
33+ void avx512_qselect<T>(T* arr, size_t k, size_t arrsize, bool hasnan = false , bool descending = false );
34+ void avx2_qselect<T>(T* arr, size_t k, size_t arrsize, bool hasnan = false , bool descending = false );
3535```
3636Supported datatypes: ` uint16_t ` , ` int16_t ` , ` _Float16 ` , ` uint32_t ` , ` int32_t ` ,
3737` float ` , ` uint64_t ` , ` int64_t ` and ` double ` . AVX2 versions currently support
@@ -46,8 +46,8 @@ Equivalent to `std::partial_sort` in
4646
4747
4848``` cpp
49- void avx512_partial_qsort<T>(T* arr, size_t arrsize, bool hasnan = false , bool descending = false )
50- void avx2_partial_qsort<T>(T* arr, size_t arrsize, bool hasnan = false , bool descending = false )
49+ void avx512_partial_qsort<T>(T* arr, size_t k, size_t arrsize, bool hasnan = false , bool descending = false )
50+ void avx2_partial_qsort<T>(T* arr, size_t k, size_t arrsize, bool hasnan = false , bool descending = false )
5151```
5252Supported datatypes: ` uint16_t ` , ` int16_t ` , ` _Float16 ` , ` uint32_t ` , ` int32_t ` ,
5353` float ` , ` uint64_t ` , ` int64_t ` and ` double ` . AVX2 versions currently support
@@ -61,8 +61,8 @@ Equivalent to `np.argsort` in
6161[ NumPy] ( https://numpy.org/doc/stable/reference/generated/numpy.argsort.html ) .
6262
6363``` cpp
64- std::vector<size_t > arg = avx512_argsort<T>(T* arr, size_t arrsize, bool hasnan = false , bool descending = false );
6564void avx512_argsort<T>(T* arr, size_t *arg, size_t arrsize, bool hasnan = false , bool descending = false );
65+ void avx2_argsort<T>(T* arr, size_t *arg, size_t arrsize, bool hasnan = false , bool descending = false );
6666```
6767Supported datatypes: ` uint32_t ` , ` int32_t ` , ` float ` , ` uint64_t ` , ` int64_t ` and
6868` double ` .
@@ -74,8 +74,8 @@ Equivalent to `np.argselect` in
7474[ NumPy] ( https://numpy.org/doc/stable/reference/generated/numpy.argpartition.html ) .
7575
7676``` cpp
77- std::vector<size_t > arg = avx512_argselect<T>(T* arr, size_t k, size_t arrsize);
7877void avx512_argselect<T>(T* arr, size_t *arg, size_t k, size_t arrsize);
78+ void avx2_argselect<T>(T* arr, size_t *arg, size_t k, size_t arrsize);
7979```
8080Supported datatypes: ` uint32_t ` , ` int32_t ` , ` float ` , ` uint64_t ` , ` int64_t ` and
8181` double ` .
@@ -84,9 +84,10 @@ The algorithm resorts to scalar `std::sort` if the array contains NaNs.
8484
8585#### Key-value sort
8686``` cpp
87- void avx512_qsort_kv<T>(T1* key, T2* value , size_t arrsize)
87+ void avx512_qsort_kv<T1, T2>(T1* key, T2* value, size_t arrsize);
88+ void avx2_qsort_kv<T1, T2>(T1* key, T2* value, size_t arrsize);
8889```
89- Supported datatypes: ` uint64_t, int64_t and double `
90+ Supported datatypes: ` uint64_t ` , ` int64_t ` and ` double ` .
9091
9192## Algorithm details
9293
@@ -105,6 +106,8 @@ source code associated with that paper [3].
105106### Sample code ` main.cpp `
106107
107108``` cpp
109+ #include " src/xss-common-includes.h"
110+ #include " src/xss-common-qsort.h"
108111#include " src/avx512-32bit-qsort.hpp"
109112
110113int main () {
0 commit comments