diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 9c619048..b4854e98 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -135,7 +135,7 @@ jobs: - name: Run test suite on SPR run: sde -spr -- ./builddir/testexe - SPR-gcc13-min-networksort: + SPR-gcc13-special-cases: runs-on: intel-ubuntu-latest @@ -156,7 +156,7 @@ jobs: - name: Build env: CXX: g++-13 - CXXFLAGS: -DXSS_MINIMAL_NETWORK_SORT + CXXFLAGS: "-DXSS_MINIMAL_NETWORK_SORT -DXSS_TEST_KEYVALUE_BASE_CASE" run: | make clean meson setup -Dbuild_tests=true --warnlevel 2 --werror --buildtype release builddir diff --git a/src/avx512-64bit-keyvaluesort.hpp b/src/avx512-64bit-keyvaluesort.hpp index 61046cae..9c4f1459 100644 --- a/src/avx512-64bit-keyvaluesort.hpp +++ b/src/avx512-64bit-keyvaluesort.hpp @@ -347,6 +347,7 @@ template (keys, indexes, i, size); if (i == 0) { break; } @@ -366,13 +367,12 @@ X86_SIMD_SORT_INLINE void qsort_64bit_(type1_t *keys, type2_t *indexes, arrsize_t left, arrsize_t right, - arrsize_t max_iters) + int max_iters) { /* * Resort to std::sort if quicksort isnt making any progress */ if (max_iters <= 0) { - //std::sort(keys+left,keys+right+1); heap_sort( keys + left, indexes + left, right - left + 1); return; @@ -416,28 +416,29 @@ avx512_qsort_kv(T1 *keys, T2 *indexes, arrsize_t arrsize, bool hasnan = false) && sizeof(T2) == sizeof(int32_t), ymm_vector, zmm_vector>::type; +/* + * Enable testing the heapsort key-value sort in the CI: + */ +#ifdef XSS_TEST_KEYVALUE_BASE_CASE + int maxiters = -1; + bool minarrsize = true; +#else + int maxiters = 2 * log2(arrsize); + bool minarrsize = arrsize > 1 ? true : false; +#endif // XSS_TEST_KEYVALUE_BASE_CASE - if (arrsize > 1) { + if (minarrsize) { + arrsize_t nan_count = 0; if constexpr (xss::fp::is_floating_point_v) { - arrsize_t nan_count = 0; if (UNLIKELY(hasnan)) { nan_count = replace_nan_with_inf>(keys, arrsize); } - qsort_64bit_(keys, - indexes, - 0, - arrsize - 1, - 2 * (arrsize_t)log2(arrsize)); - replace_inf_with_nan(keys, arrsize, nan_count); } else { UNUSED(hasnan); - qsort_64bit_(keys, - indexes, - 0, - arrsize - 1, - 2 * (arrsize_t)log2(arrsize)); } + qsort_64bit_(keys, indexes, 0, arrsize - 1, maxiters); + replace_inf_with_nan(keys, arrsize, nan_count); } } #endif // AVX512_QSORT_64BIT_KV