8000 Merge pull request #24498 from r-devulap/qsort-16bit-dispatch · numpy/numpy@54238c7 · GitHub
[go: up one dir, main page]

Skip to content

Commit 54238c7

Browse files
authored
Merge pull request #24498 from r-devulap/qsort-16bit-dispatch
MAINT: Re-write 16-bit qsort dispatch
2 parents da8cdcf + 0064937 commit 54238c7

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

numpy/core/src/npysort/simd_qsort_16bit.dispatch.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,23 @@
99

1010
#if defined(NPY_HAVE_AVX512_SPR) && !defined(_MSC_VER)
1111
#include "x86-simd-sort/src/avx512fp16-16bit-qsort.hpp"
12+
/*
13+
* Wrapper function declarations to avoid multiple definitions of
14+
* avx512_qsort<uint16_t> and avx512_qsort<int16_t>
15+
*/
16+
void avx512_qsort_uint16(uint16_t*, intptr_t);
17+
void avx512_qsort_int16(int16_t*, intptr_t);
1218
#elif defined(NPY_HAVE_AVX512_ICL) && !defined(_MSC_VER)
1319
#include "x86-simd-sort/src/avx512-16bit-qsort.hpp"
20+
/* Wrapper function defintions here: */
21+
void avx512_qsort_uint16(uint16_t* arr, intptr_t size)
22+
{
23+
avx512_qsort(arr, size);
24+
}
25+
void avx512_qsort_int16(int16_t* arr, intptr_t size)
26+
{
27+
avx512_qsort(arr, size);
28+
}
1429
#endif
1530

1631
namespace np { namespace qsort_simd {
@@ -27,11 +42,19 @@ template<> void NPY_CPU_DISPATCH_CURFX(QSort)(Half *arr, intptr_t size)
2742
}
2843
template<> void NPY_CPU_DISPATCH_CURFX(QSort)(uint16_t *arr, intptr_t size)
2944
{
45+
#if defined(NPY_HAVE_AVX512_SPR)
46+
avx512_qsort_uint16(arr, size);
47+
#else
3048
avx512_qsort(arr, size);
49+
#endif
3150
}
3251
template<> void NPY_CPU_DISPATCH_CURFX(QSort)(int16_t *arr, intptr_t size)
3352
{
53+
#if defined(NPY_HAVE_AVX512_SPR)
54+
avx512_qsort_int16(arr, size);
55+
#else
3456
avx512_qsort(arr, size);
57+
#endif
3558
}
3659
#endif // NPY_HAVE_AVX512_ICL || SPR
3760
#endif // _MSC_VER

0 commit comments

Comments
 (0)
0