@@ -347,6 +347,7 @@ template <typename vtype1,
347
347
X86_SIMD_SORT_INLINE void
348
348
heap_sort (type1_t *keys, type2_t *indexes, arrsize_t size)
349
349
{
350
+ if (size <= 1 ) return ;
350
351
for (arrsize_t i = size / 2 - 1 ;; i--) {
351
352
heapify<vtype1, vtype2>(keys, indexes, i, size);
352
353
if (i == 0 ) { break ; }
@@ -366,13 +367,12 @@ X86_SIMD_SORT_INLINE void qsort_64bit_(type1_t *keys,
366
367
type2_t *indexes,
367
368
arrsize_t left,
368
369
arrsize_t right,
369
- arrsize_t max_iters)
370
+ int max_iters)
370
371
{
371
372
/*
372
373
* Resort to std::sort if quicksort isnt making any progress
373
374
*/
374
375
if (max_iters <= 0 ) {
375
- // std::sort(keys+left,keys+right+1);
376
376
heap_sort<vtype1, vtype2>(
377
377
keys + left, indexes + left, right - left + 1 );
378
378
return ;
@@ -416,28 +416,29 @@ avx512_qsort_kv(T1 *keys, T2 *indexes, arrsize_t arrsize, bool hasnan = false)
416
416
&& sizeof (T2) == sizeof (int32_t ),
417
417
ymm_vector<T2>,
418
418
zmm_vector<T2>>::type;
419
+ /*
420
+ * Enable testing the heapsort key-value sort in the CI:
421
+ */
422
+ #ifdef XSS_TEST_KEYVALUE_BASE_CASE
423
+ int maxiters = -1 ;
424
+ bool minarrsize = true ;
425
+ #else
426
+ int maxiters = 2 * log2 (arrsize);
427
+ bool minarrsize = arrsize > 1 ? true : false ;
428
+ #endif // XSS_TEST_KEYVALUE_BASE_CASE
419
429
420
- if (arrsize > 1 ) {
430
+ if (minarrsize) {
431
+ arrsize_t nan_count = 0 ;
421
432
if constexpr (xss::fp::is_floating_point_v<T1>) {
422
- arrsize_t nan_count = 0 ;
423
433
if (UNLIKELY (hasnan)) {
424
434
nan_count = replace_nan_with_inf<zmm_vector<T1>>(keys, arrsize);
425
435
}
426
- qsort_64bit_<keytype, valtype>(keys,
427
- indexes,
428
- 0 ,
429
- arrsize - 1 ,
430
- 2 * (arrsize_t )log2 (arrsize));
431
- replace_inf_with_nan (keys, arrsize, nan_count);
432
436
}
433
437
else {
434
438
UNUSED (hasnan);
435
- qsort_64bit_<keytype, valtype>(keys,
436
- indexes,
437
- 0 ,
438
- arrsize - 1 ,
439
- 2 * (arrsize_t )log2 (arrsize));
440
439
}
440
+ qsort_64bit_<keytype, valtype>(keys, indexes, 0 , arrsize - 1 , maxiters);
441
+ replace_inf_with_nan (keys, arrsize, nan_count);
441
442
}
442
443
}
443
444
#endif // AVX512_QSORT_64BIT_KV
0 commit comments