Skip to content

Commit 2af3820

Browse files
author
Raghuveer Devulapalli
committed
Make num_unroll a compile time constant
1 parent 250dbe5 commit 2af3820

File tree

3 files changed

+7
-6
lines changed

3 files changed

+7
-6
lines changed

src/avx512-32bit-qsort.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -648,7 +648,7 @@ qsort_32bit_(type_t *arr, int64_t left, int64_t right, int64_t max_iters)
648648
type_t pivot = get_pivot_32bit<vtype>(arr, left, right);
649649
type_t smallest = vtype::type_max();
650650
type_t biggest = vtype::type_min();
651-
int64_t pivot_index = partition_avx512_unrolled<vtype>(
651+
int64_t pivot_index = partition_avx512_unrolled<vtype,2>(
652652
arr, left, right + 1, pivot, &smallest, &biggest);
653653
if (pivot != smallest)
654654
qsort_32bit_<vtype>(arr, left, pivot_index - 1, max_iters - 1);
@@ -680,7 +680,7 @@ qselect_32bit_(type_t *arr, int64_t pos,
680680
type_t pivot = get_pivot_32bit<vtype>(arr, left, right);
681681
type_t smallest = vtype::type_max();
682682
type_t biggest = vtype::type_min();
683-
int64_t pivot_index = partition_avx512<vtype>(
683+
int64_t pivot_index = partition_avx512_unrolled<vtype,2>(
684684
arr, left, right + 1, pivot, &smallest, &biggest);
685685
if ((pivot != smallest) && (pos < pivot_index))
686686
qselect_32bit_<vtype>(arr, pos, left, pivot_index - 1, max_iters - 1);

src/avx512-64bit-qsort.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -742,7 +742,7 @@ qsort_64bit_(type_t *arr, int64_t left, int64_t right, int64_t max_iters)
742742
type_t pivot = get_pivot_64bit<vtype>(arr, left, right);
743743
type_t smallest = vtype::type_max();
744744
type_t biggest = vtype::type_min();
745-
int64_t pivot_index = partition_avx512_unrolled<vtype>(
745+
int64_t pivot_index = partition_avx512_unrolled<vtype, 8>(
746746
arr, left, right + 1, pivot, &smallest, &biggest);
747747
if (pivot != smallest)
748748
qsort_64bit_<vtype>(arr, left, pivot_index - 1, max_iters - 1);
@@ -774,7 +774,7 @@ qselect_64bit_(type_t *arr, int64_t pos,
774774
type_t pivot = get_pivot_64bit<vtype>(arr, left, right);
775775
type_t smallest = vtype::type_max();
776776
type_t biggest = vtype::type_min();
777-
int64_t pivot_index = partition_avx512<vtype>(
777+
int64_t pivot_index = partition_avx512_unrolled<vtype, 8>(
778778
arr, left, right + 1, pivot, &smallest, &biggest);
779779
if ((pivot != smallest) && (pos < pivot_index))
780780
qselect_64bit_<vtype>(arr, pos, left, pivot_index - 1, max_iters - 1);

src/avx512-common-qsort.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,15 +260,16 @@ static inline int64_t partition_avx512(type_t *arr,
260260
return l_store;
261261
}
262262

263-
template <typename vtype, typename type_t>
263+
template <typename vtype,
264+
int num_unroll,
265+
typename type_t = typename vtype::type_t>
264266
static inline int64_t partition_avx512_unrolled(type_t *arr,
265267
int64_t left,
266268
int64_t right,
267269
type_t pivot,
268270
type_t *smallest,
269271
type_t *biggest)
270272
{
271-
const int num_unroll = 8;
272273
if (right - left <= 2 * num_unroll * vtype::numlanes) {
273274
return partition_avx512<vtype>(
274275
arr, left, right, pivot, smallest, biggest);

0 commit comments

Comments
 (0)