Skip to content

Commit 5f30d74

Browse files
amane-ameseiko2plus
authored andcommitted
ENH: Convert minmax from C universal intrinsics to C++ using Highway (#16)
* ENH, SIMD: Initial implementation of Highway wrapper A thin wrapper over Google's Highway SIMD library to simplify its interface. This commit provides the implementation of that wrapper, consisting of: - simd.hpp: Main header defining the SIMD namespaces and configuration - simd.inc.hpp: Template header included multiple times with different namespaces The wrapper eliminates Highway's class tags by: - Using lane types directly which can be deduced from arguments - Leveraging namespaces (np::simd and np::simd128) for different register widths A README is included to guide usage and document design decisions. * SIMD: Update wrapper with improved docs and type support - Fix hardware/platform terminology in documentation for clarity - Add support for long double in template specializations - Add kMaxLanes constant to expose maximum vector width information - Follows clang formatting style for consistency with NumPy codebase. * SIMD: Improve isolation and constexpr handling in wrapper - Add anonymous namespace around implementation to ensure each translation unit gets its own constants based on local flags - Use HWY_LANES_CONSTEXPR for Lanes function to ensure proper constexpr evaluation across platforms * Update Highway submodule to latest master * SIMD: Fix compile error by using MaxLanes instead of Lanes for array size Replace hn::Lanes(f64) with hn::MaxLanes(f64) when defining the index array size to fix error C2131: "expression did not evaluate to a constant". This error occurs because Lanes() isn't always constexpr compatible, especially with scalable vector extensions. MaxLanes() provides a compile-time constant value suitable for static array allocation and should be used with non-scalable SIMD extensions when defining fixed-size arrays. * Convert minmax to highway. --------- Co-authored-by: Sayed Adel <seiko@imavr.com>
1 parent 1b3eaa7 commit 5f30d74

File tree

3 files changed

+527
-477
lines changed

3 files changed

+527
-477
lines changed

numpy/_core/meson.build

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -984,13 +984,14 @@ foreach gen_mtargets : [
984984
],
985985
[
986986
'loops_minmax.dispatch.h',
987-
src_file.process('src/umath/loops_minmax.dispatch.c.src'),
987+
'src/umath/loops_minmax.dispatch.cpp',
988988
[
989989
ASIMD, NEON,
990990
AVX512_SKX, AVX2, SSE2,
991991
VSX2,
992992
VXE, VX,
993993
LSX,
994+
RVV,
994995
]
995996
],
996997
[

0 commit comments

Comments
 (0)