-
-
Notifications
You must be signed in to change notification settings - Fork 10.9k
ENH: Convert unary_complex from C universal intrinsics to C++ using Highway #28815
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
aef050e
to
1338bdc
Compare
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. SIMD: Rename NPY_SIMDX to NPY_HWY Rename Highway wrapper macros for clarity: - NPY_SIMDX → NPY_HWY - NPY_SIMDX_F16 → NPY_HWY_F16 - NPY_SIMDX_F64 → NPY_HWY_F64 - NPY_SIMDX_FMA → NPY_HWY_FMA To avoids confusion with legacy SIMD macros.
1338bdc
to
484ce6e
Compare
auto infmask = hn::IsInf(smaller); | ||
auto div_mask = hn::ExclusiveNeither(zeromask, infmask); | ||
|
||
auto ratio = hn::MaskedDiv(div_mask, smaller, larger); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seems that MaskedDiv can not be found in RVV (https://github.com/google/highway/blob/master/hwy/ops/rvv-inl.h).
When i compile on BPI-F3(SpacemiT K1 8 core , RVV1.0) , it cause an error.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It was here: https://github.com/google/highway/blob/c861f4ca87795cd8d57e8879f1677ba858600f1b/hwy/ops/generic_ops-inl.h#L700
Try to update your highway submodule version to latest.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Zero masked arithmetic operations : google/highway@046dee2
Fix review comments : google/highway@329e50a
Based on #28622, merge it first.