Skip to content

Commit 1f2dab3

Browse files
author
Raghuveer Devulapalli
committed
MAINT: use macro to reduce duplicate code
1 parent c1cf2da commit 1f2dab3

File tree

3 files changed

+44
-119
lines changed

3 files changed

+44
-119
lines changed

numpy/_core/src/npysort/highway_qsort.dispatch.cpp

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,20 @@
22
#define VQSORT_ONLY_STATIC 1
33
#include "hwy/contrib/sort/vqsort-inl.h"
44

5+
#define DISPATCH_VQSORT(TYPE) \
6+
template<> void NPY_CPU_DISPATCH_CURFX(QSort)(TYPE *arr, intptr_t size) \
7+
{ \
8+
hwy::HWY_NAMESPACE::VQSortStatic(arr, size, hwy::SortAscending()); \
9+
} \
10+
511
namespace np { namespace highway { namespace qsort_simd {
612

7-
template<> void NPY_CPU_DISPATCH_CURFX(QSort)(int32_t *arr, intptr_t size)
8-
{
9-
hwy::HWY_NAMESPACE::VQSortStatic(arr, size, hwy::SortAscending());
10-
}
11-
template<> void NPY_CPU_DISPATCH_CURFX(QSort)(uint32_t *arr, intptr_t size)
12-
{
13-
hwy::HWY_NAMESPACE::VQSortStatic(arr, size, hwy::SortAscending());
14-
}
15-
template<> void NPY_CPU_DISPATCH_CURFX(QSort)(int64_t *arr, intptr_t size)
16-
{
17-
hwy::HWY_NAMESPACE::VQSortStatic(arr, size, hwy::SortAscending());
18-
}
19-
template<> void NPY_CPU_DISPATCH_CURFX(QSort)(uint64_t *arr, intptr_t size)
20-
{
21-
hwy::HWY_NAMESPACE::VQSortStatic(arr, size, hwy::SortAscending());
22-
}
23-
template<> void NPY_CPU_DISPATCH_CURFX(QSort)(float *arr, intptr_t size)
24-
{
25-
hwy::HWY_NAMESPACE::VQSortStatic(arr, size, hwy::SortAscending());
26-
}
27-
template<> void NPY_CPU_DISPATCH_CURFX(QSort)(double *arr, intptr_t size)
28-
{
29-
hwy::HWY_NAMESPACE::VQSortStatic(arr, size, hwy::SortAscending());
13+
DISPATCH_VQSORT(int32_t)
14+
DISPATCH_VQSORT(uint32_t)
15+
DISPATCH_VQSORT(int64_t)
16+
DISPATCH_VQSORT(uint64_t)
17+
DISPATCH_VQSORT(double)
18+
DISPATCH_VQSORT(float)
3019
}
3120

3221
} } } // np::highway::qsort_simd

numpy/_core/src/npysort/x86_simd_argsort.dispatch.cpp

Lines changed: 16 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -3,56 +3,24 @@
33

44
#include "x86-simd-sort/src/x86simdsort-static-incl.h"
55

6+
#define DISPATCH_ARG_METHODS(TYPE) \
7+
template<> void NPY_CPU_DISPATCH_CURFX(ArgQSelect)(TYPE* arr, npy_intp* arg, npy_intp num, npy_intp kth) \
8+
{ \
9+
x86simdsortStatic::argselect(arr, reinterpret_cast<size_t*>(arg), kth, num, true); \
10+
} \
11+
template<> void NPY_CPU_DISPATCH_CURFX(ArgQSort)(TYPE* arr, npy_intp *arg, npy_intp size) \
12+
{ \
13+
x86simdsortStatic::argsort(arr, reinterpret_cast<size_t*>(arg), size, true); \
14+
} \
15+
616
namespace np { namespace qsort_simd {
717

8-
template<> void NPY_CPU_DISPATCH_CURFX(ArgQSelect)(int32_t *arr, npy_intp* arg, npy_intp num, npy_intp kth)
9-
{
10-
x86simdsortStatic::argselect(arr, reinterpret_cast<size_t*>(arg), kth, num);
11-
}
12-
template<> void NPY_CPU_DISPATCH_CURFX(ArgQSelect)(uint32_t *arr, npy_intp* arg, npy_intp num, npy_intp kth)
13-
{
14-
x86simdsortStatic::argselect(arr, reinterpret_cast<size_t*>(arg), kth, num);
15-
}
16-
template<> void NPY_CPU_DISPATCH_CURFX(ArgQSelect)(int64_t*arr, npy_intp* arg, npy_intp num, npy_intp kth)
17-
{
18-
x86simdsortStatic::argselect(arr, reinterpret_cast<size_t*>(arg), kth, num);
19-
}
20-
template<> void NPY_CPU_DISPATCH_CURFX(ArgQSelect)(uint64_t*arr, npy_intp* arg, npy_intp num, npy_intp kth)
21-
{
22-
x86simdsortStatic::argselect(arr, reinterpret_cast<size_t*>(arg), kth, num);
23-
}
24-
template<> void NPY_CPU_DISPATCH_CURFX(ArgQSelect)(float *arr, npy_intp* arg, npy_intp num, npy_intp kth)
25-
{
26-
x86simdsortStatic::argselect(arr, reinterpret_cast<size_t*>(arg), kth, num, true);
27-
}
28-
template<> void NPY_CPU_DISPATCH_CURFX(ArgQSelect)(double *arr, npy_intp* arg, npy_intp num, npy_intp kth)
29-
{
30-
x86simdsortStatic::argselect(arr, reinterpret_cast<size_t*>(arg), kth, num, true);
31-
}
32-
template<> void NPY_CPU_DISPATCH_CURFX(ArgQSort)(int32_t *arr, npy_intp *arg, npy_intp size)
33-
{
34-
x86simdsortStatic::argsort(arr, reinterpret_cast<size_t*>(arg), size);
35-
}
36-
template<> void NPY_CPU_DISPATCH_CURFX(ArgQSort)(uint32_t *arr, npy_intp *arg, npy_intp size)
37-
{
38-
x86simdsortStatic::argsort(arr, reinterpret_cast<size_t*>(arg), size);
39-
}
40-
template<> void NPY_CPU_DISPATCH_CURFX(ArgQSort)(int64_t *arr, npy_intp *arg, npy_intp size)
41-
{
42-
x86simdsortStatic::argsort(arr, reinterpret_cast<size_t*>(arg), size);
43-
}
44-
template<> void NPY_CPU_DISPATCH_CURFX(ArgQSort)(uint64_t *arr, npy_intp *arg, npy_intp size)
45-
{
46-
x86simdsortStatic::argsort(arr, reinterpret_cast<size_t*>(arg), size);
47-
}
48-
template<> void NPY_CPU_DISPATCH_CURFX(ArgQSort)(float *arr, npy_intp *arg, npy_intp size)
49-
{
50-
x86simdsortStatic::argsort(arr, reinterpret_cast<size_t*>(arg), size, true);
51-
}
52-
template<> void NPY_CPU_DISPATCH_CURFX(ArgQSort)(double *arr, npy_intp *arg, npy_intp size)
53-
{
54-
x86simdsortStatic::argsort(arr, reinterpret_cast<size_t*>(arg), size, true);
55-
}
18+
DISPATCH_ARG_METHODS(uint32_t)
19+
DISPATCH_ARG_METHODS(int32_t)
20+
DISPATCH_ARG_METHODS(float)
21+
DISPATCH_ARG_METHODS(uint64_t)
22+
DISPATCH_ARG_METHODS(int64_t)
23+
DISPATCH_ARG_METHODS(double)
5624

5725
}} // namespace np::simd
5826

numpy/_core/src/npysort/x86_simd_qsort.dispatch.cpp

Lines changed: 16 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -3,55 +3,23 @@
33

44
#include "x86-simd-sort/src/x86simdsort-static-incl.h"
55

6+
#define DISPATCH_SORT_METHODS(TYPE) \
7+
template<> void NPY_CPU_DISPATCH_CURFX(QSelect)(TYPE *arr, npy_intp num, npy_intp kth) \
8+
{ \
9+
x86simdsortStatic::qselect(arr, kth, num, true); \
10+
} \
11+
template<> void NPY_CPU_DISPATCH_CURFX(QSort)(TYPE *arr, npy_intp num) \
12+
{ \
13+
x86simdsortStatic::qsort(arr, num, true); \
14+
} \
15+
616
namespace np { namespace qsort_simd {
7-
template<> void NPY_CPU_DISPATCH_CURFX(QSelect)(int32_t *arr, npy_intp num, npy_intp kth)
8-
{
9-
x86simdsortStatic::qselect(arr, kth, num);
10-
}
11-
template<> void NPY_CPU_DISPATCH_CURFX(QSelect)(uint32_t *arr, npy_intp num, npy_intp kth)
12-
{
13-
x86simdsortStatic::qselect(arr, kth, num);
14-
}
15-
template<> void NPY_CPU_DISPATCH_CURFX(QSelect)(int64_t*arr, npy_intp num, npy_intp kth)
16-
{
17-
x86simdsortStatic::qselect(arr, kth, num);
18-
}
19-
template<> void NPY_CPU_DISPATCH_CURFX(QSelect)(uint64_t*arr, npy_intp num, npy_intp kth)
20-
{
21-
x86simdsortStatic::qselect(arr, kth, num);
22-
}
23-
template<> void NPY_CPU_DISPATCH_CURFX(QSelect)(float *arr, npy_intp num, npy_intp kth)
24-
{
25-
x86simdsortStatic::qselect(arr, kth, num, true);
26-
}
27-
template<> void NPY_CPU_DISPATCH_CURFX(QSelect)(double *arr, npy_intp num, npy_intp kth)
28-
{
29-
x86simdsortStatic::qselect(arr, kth, num, true);
30-
}
31-
template<> void NPY_CPU_DISPATCH_CURFX(QSort)(int32_t *arr, npy_intp num)
32-
{
33-
x86simdsortStatic::qsort(arr, num);
34-
}
35-
template<> void NPY_CPU_DISPATCH_CURFX(QSort)(uint32_t *arr, npy_intp num)
36-
{
37-
x86simdsortStatic::qsort(arr, num);
38-
}
39-
template<> void NPY_CPU_DISPATCH_CURFX(QSort)(int64_t *arr, npy_intp num)
40-
{
41-
x86simdsortStatic::qsort(arr, num);
42-
}
43-
template<> void NPY_CPU_DISPATCH_CURFX(QSort)(uint64_t *arr, npy_intp num)
44-
{
45-
x86simdsortStatic::qsort(arr, num);
46-
}
47-
template<> void NPY_CPU_DISPATCH_CURFX(QSort)(float *arr, npy_intp num)
48-
{
49-
x86simdsortStatic::qsort(arr, num, true);
50-
}
51-
template<> void NPY_CPU_DISPATCH_CURFX(QSort)(double *arr, npy_intp num)
52-
{
53-
x86simdsortStatic::qsort(arr, num, true);
54-
}
17+
DISPATCH_SORT_METHODS(uint32_t)
18+
DISPATCH_SORT_METHODS(int32_t)
19+
DISPATCH_SORT_METHODS(float)
20+
DISPATCH_SORT_METHODS(uint64_t)
21+
DISPATCH_SORT_METHODS(int64_t)
22+
DISPATCH_SORT_METHODS(double)
5523
}} // namespace np::qsort_simd
5624

5725
#endif // __CYGWIN__

0 commit comments

Comments
 (0)