2
2
3
3
C++ header file library for SIMD based 16-bit, 32-bit and 64-bit data type
4
4
sorting 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
7
7
sort. The following API's are currently supported:
8
8
9
9
#### Quicksort
@@ -30,8 +30,8 @@ Equivalent to `std::nth_element` in
30
30
31
31
32
32
``` 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 );
35
35
```
36
36
Supported datatypes: ` uint16_t ` , ` int16_t ` , ` _Float16 ` , ` uint32_t ` , ` int32_t ` ,
37
37
` float ` , ` uint64_t ` , ` int64_t ` and ` double ` . AVX2 versions currently support
@@ -46,8 +46,8 @@ Equivalent to `std::partial_sort` in
46
46
47
47
48
48
``` 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 )
51
51
```
52
52
Supported datatypes: ` uint16_t ` , ` int16_t ` , ` _Float16 ` , ` uint32_t ` , ` int32_t ` ,
53
53
` float ` , ` uint64_t ` , ` int64_t ` and ` double ` . AVX2 versions currently support
@@ -61,8 +61,8 @@ Equivalent to `np.argsort` in
61
61
[ NumPy] ( https://numpy.org/doc/stable/reference/generated/numpy.argsort.html ) .
62
62
63
63
``` cpp
64
- std::vector<size_t > arg = avx512_argsort<T>(T* arr, size_t arrsize, bool hasnan = false , bool descending = false );
65
64
void 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 );
66
66
```
67
67
Supported datatypes: ` uint32_t ` , ` int32_t ` , ` float ` , ` uint64_t ` , ` int64_t ` and
68
68
` double ` .
@@ -74,8 +74,8 @@ Equivalent to `np.argselect` in
74
74
[ NumPy] ( https://numpy.org/doc/stable/reference/generated/numpy.argpartition.html ) .
75
75
76
76
``` cpp
77
- std::vector<size_t > arg = avx512_argselect<T>(T* arr, size_t k, size_t arrsize);
78
77
void 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);
79
79
```
80
80
Supported datatypes: ` uint32_t ` , ` int32_t ` , ` float ` , ` uint64_t ` , ` int64_t ` and
81
81
` double ` .
@@ -84,9 +84,10 @@ The algorithm resorts to scalar `std::sort` if the array contains NaNs.
84
84
85
85
#### Key-value sort
86
86
``` 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);
88
89
```
89
- Supported datatypes: ` uint64_t, int64_t and double `
90
+ Supported datatypes: ` uint64_t ` , ` int64_t ` and ` double ` .
90
91
91
92
## Algorithm details
92
93
@@ -105,6 +106,8 @@ source code associated with that paper [3].
105
106
### Sample code ` main.cpp `
106
107
107
108
``` cpp
109
+ #include " src/xss-common-includes.h"
110
+ #include " src/xss-common-qsort.h"
108
111
#include " src/avx512-32bit-qsort.hpp"
109
112
110
113
int main () {
0 commit comments