8000 BUG: aarch64 linux wheel builds failing on `highway_qsort` SVE error · Issue #25445 · numpy/numpy · GitHub
[go: up one dir, main page]

Skip to content

BUG: aarch64 linux wheel builds failing on highway_qsort SVE error #25445

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 occasiona 8000 lly send you account related emails.

Already on GitHub? Sign in to your account

Closed
rgommers opened this issue Dec 21, 2023 · 9 comments · Fixed by #25446
Closed

BUG: aarch64 linux wheel builds failing on highway_qsort SVE error #25445

rgommers opened this issue Dec 21, 2023 · 9 comments · Fixed by #25446
Labels
00 - Bug component: SIMD Issues in SIMD (fast instruction sets) code or machinery
Milestone

Comments

@rgommers
Copy link
Member

Issue observed in gh-25440, and is present on main too. Example from this CI log:

[48/314] Compiling C++ object numpy/_core/libhighway_qsort.dispatch.h_SVE.a.p/src_npysort_highway_qsort.dispatch.cpp.o
FAILED: numpy/_core/libhighway_qsort.dispatch.h_SVE.a.p/src_npysort_highway_qsort.dispatch.cpp.o 
c++ -Inumpy/_core/libhighway_qsort.dispatch.h_SVE.a.p -Inumpy/_core -I../numpy/_core -Inumpy/_core/include -I../numpy/_core/include -I../numpy/_core/src/common -I../numpy/_core/src/multiarray -I../numpy/_core/src/npymath -I../numpy/_core/src/umath -I../numpy/_core/src/highway -I/opt/_internal/cpython-3.11.6/include/python3.11 -I/project/build/meson_cpu -fdiagnostics-color=always -DNDEBUG -Wall -Winvalid-pch -std=c++17 -O3 -fPIC -DNPY_INTERNAL_BUILD -DHAVE_NPY_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -D__STDC_VERSION__=0 -fno-exceptions -fno-rtti -O3 -DNPY_HAVE_NEON_VFPV4 -DNPY_HAVE_NEON_FP16 -DNPY_HAVE_NEON -DNPY_HAVE_ASIMD -DNPY_HAVE_ASIMDHP -DNPY_HAVE_SVE -march=armv8.2-a+sve+fp16 -DNPY_MTARGETS_CURRENT=SVE -MD -MQ numpy/_core/libhighway_qsort.dispatch.h_SVE.a.p/src_npysort_highway_qsort.dispatch.cpp.o -MF numpy/_core/libhighway_qsort.dispatch.h_SVE.a.p/src_npysort_highway_qsort.dispatch.cpp.o.d -o numpy/_core/libhighway_qsort.dispatch.h_SVE.a.p/src_npysort_highway_qsort.dispatch.cpp.o -c ../numpy/_core/src/npysort/highway_qsort.dispatch.cpp
In file included from ../numpy/_core/src/highway/hwy/contrib/sort/vqsort-inl.h:26,
                 from ../numpy/_core/src/npysort/highway_qsort.dispatch.cpp:3:
../numpy/_core/src/highway/hwy/base.h: In function ‘constexpr bool hwy::operator==(hwy::float16_t, hwy::float16_t)’:
../numpy/_core/src/highway/hwy/base.h:1049:20: error: call to non-‘constexpr’ function ‘float hwy::F32FromF16(hwy::float16_t)’
 1049 |   return F32FromF16(lhs) == F32FromF16(rhs);
      |          ~~~~~~~~~~^~~~~
../numpy/_core/src/highway/hwy/base.h:975:33: note: ‘float hwy::F32FromF16(hwy::float16_t)’ declared here
  975 | HWY_API HWY_F16_CONSTEXPR float F32FromF16(float16_t f16) {
      |                                 ^~~~~~~~~~
../numpy/_core/src/highway/hwy/base.h: In function ‘constexpr bool hwy::operator!=(hwy::float16_t, hwy::float16_t)’:
../numpy/_core/src/highway/hwy/base.h:1056:20: error: call to non-‘constexpr’ function ‘float hwy::F32FromF16(hwy::float16_t)’
 1056 |   return F32FromF16(lhs) != F32FromF16(rhs);
      |          ~~~~~~~~~~^~~~~
../numpy/_core/src/highway/hwy/base.h:975:33: note: ‘float hwy::F32FromF16(hwy::float16_t)’ declared here
  975 | HWY_API HWY_F16_CONSTEXPR float F32FromF16(float16_t f16) {
      |                                 ^~~~~~~~~~
../numpy/_core/src/highway/hwy/base.h: In function ‘constexpr bool hwy::operator<(hwy::float16_t, hwy::float16_t)’:
../numpy/_core/src/highway/hwy/base.h:1063:20: error: call to non-‘constexpr’ function ‘float hwy::F32FromF16(hwy::float16_t)’
 1063 |   return F32FromF16(lhs) < F32FromF16(rhs);
      |          ~~~~~~~~~~^~~~~
../numpy/_core/src/highway/hwy/base.h:975:33: note: ‘float hwy::F32FromF16(hwy::float16_t)’ declared here
  975 | HWY_API HWY_F16_CONSTEXPR float F32FromF16(float16_t f16) {
      |                                 ^~~~~~~~~~
../numpy/_core/src/highway/hwy/base.h: In function ‘constexpr bool hwy::operator<=(hwy::float16_t, hwy::float16_t)’:
../numpy/_core/src/highway/hwy/base.h:1070:20: error: call to non-‘constexpr’ function ‘float hwy::F32FromF16(hwy::float16_t)’
 1070 |   return F32FromF16(lhs) <= F32FromF16(rhs);
      |          ~~~~~~~~~~^~~~~
../numpy/_core/src/highway/hwy/base.h:975:33: note: ‘float hwy::F32FromF16(hwy::float16_t)’ declared here
  975 | HWY_API HWY_F16_CONSTEXPR float F32FromF16(float16_t f16) {
      |                                 ^~~~~~~~~~
../numpy/_core/src/highway/hwy/base.h: In function ‘constexpr bool hwy::operator>(hwy::float16_t, hwy::float16_t)’:
../numpy/_core/src/highway/hwy/base.h:1077:20: error: call to non-‘constexpr’ function ‘float hwy::F32FromF16(hwy::float16_t)’
 1077 |   return F32FromF16(lhs) > F32FromF16(rhs);
      |          ~~~~~~~~~~^~~~~
../numpy/_core/src/highway/hwy/base.h:975:33: note: ‘float hwy::F32FromF16(hwy::float16_t)’ declared here
  975 | HWY_API HWY_F16_CONSTEXPR float F32FromF16(float16_t f16) {
      |                                 ^~~~~~~~~~
../numpy/_core/src/highway/hwy/base.h: In function ‘constexpr bool hwy::operator>=(hwy::float16_t, hwy::float16_t)’:
../numpy/_core/src/highway/hwy/base.h:1084:20: error: call to non-‘constexpr’ function ‘float hwy::F32FromF16(hwy::float16_t)’
 1084 |   return F32FromF16(lhs) >= F32FromF16(rhs);
      |          ~~~~~~~~~~^~~~~
../numpy/_core/src/highway/hwy/base.h:975:33: note: ‘float hwy::F32FromF16(hwy::float16_t)’ declared here
  975 | HWY_API HWY_F16_CONSTEXPR float F32FromF16(float16_t f16) {
      |                                 ^~~~~~~~~~
[49/314] Compiling C++ object numpy/_core/libhighway_qsort.dispatch.h_ASIMD.a.p/src_npysort_highway_qsort.dispatch.cpp.o
FAILED: numpy/_core/libhighway_qsort.dispatch.h_ASIMD.a.p/src_npysort_highway_qsort.dispatch.cpp.o 
c++ -Inumpy/_core/libhighway_qsort.dispatch.h_ASIMD.a.p -Inumpy/_core -I../numpy/_core -Inumpy/_core/include -I../numpy/_core/include -I../numpy/_core/src/common -I../numpy/_core/src/multiarray -I../numpy/_core/src/npymath -I../numpy/_core/src/umath -I../numpy/_core/src/highway -I/opt/_internal/cpython-3.11.6/include/python3.11 -I/project/build/meson_cpu -fdiagnostics-color=always -DNDEBUG -Wall -Winvalid-pch -std=c++17 -O3 -fPIC -DNPY_INTERNAL_BUILD -DHAVE_NPY_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -D__STDC_VERSION__=0 -fno-exceptions -fno-rtti -O3 -DNPY_HAVE_NEON_VFPV4 -DNPY_HAVE_NEON_FP16 -DNPY_HAVE_NEON -DNPY_HAVE_ASIMD -DNPY_MTARGETS_CURRENT=ASIMD -MD -MQ numpy/_core/libhighway_qsort.dispatch.h_ASIMD.a.p/src_npysort_highway_qsort.dispatch.cpp.o -MF numpy/_core/libhighway_qsort.dispatch.h_ASIMD.a.p/src_npysort_highway_qsort.dispatch.cpp.o.d -o numpy/_core/libhighway_qsort.dispatch.h_ASIMD.a.p/src_npysort_highway_qsort.dispatch.cpp.o -c ../numpy/_core/src/npysort/highway_qsort.dispatch.cpp
In file included from ../numpy/_core/src/highway/hwy/contrib/sort/vqsort-inl.h:26,
                 from ../numpy/_core/src/npysort/highway_qsort.dispatch.cpp:3:
../numpy/_core/src/highway/hwy/base.h: In function ‘constexpr bool hwy::operator==(hwy::float16_t, hwy::float16_t)’:
../numpy/_core/src/highway/hwy/base.h:1049:20: error: call to non-‘constexpr’ function ‘float hwy::F32FromF16(hwy::float16_t)’
 1049 |   return F32FromF16(lhs) == F32FromF16(rhs);
      |          ~~~~~~~~~~^~~~~
../numpy/_core/src/highway/hwy/base.h:975:33: note: ‘float hwy::F32FromF16(hwy::float16_t)’ declared here
  975 | HWY_API HWY_F16_CONSTEXPR float F32FromF16(float16_t f16) {
      |                                 ^~~~~~~~~~
../numpy/_core/src/highway/hwy/base.h: In function ‘constexpr bool hwy::operator!=(hwy::float16_t, hwy::float16_t)’:
../numpy/_core/src/highway/hwy/base.h:1056:20: error: call to non-‘constexpr’ function ‘float hwy::F32FromF16(hwy::float16_t)’
 1056 |   return F32FromF16(lhs) != F32FromF16(rhs);
      |          ~~~~~~~~~~^~~~~
../numpy/_core/src/highway/hwy/base.h:975:33: note: ‘float hwy::F32FromF16(hwy::float16_t)’ declared here
  975 | HWY_API HWY_F16_CONSTEXPR float F32FromF16(float16_t f16) {
      |                                 ^~~~~~~~~~
../numpy/_core/src/highway/hwy/base.h: In function ‘constexpr bool hwy::operator<(hwy::float16_t, hwy::float16_t)’:
../numpy/_core/src/highway/hwy/base.h:1063:20: error: call to non-‘constexpr’ function ‘float hwy::F32FromF16(hwy::float16_t)’
 1063 |   return F32FromF16(lhs) < F32FromF16(rhs);
      |          ~~~~~~~~~~^~~~~
../numpy/_core/src/highway/hwy/base.h:975:33: note: ‘float hwy::F32FromF16(hwy::float16_t)’ declared here
  975 | HWY_API HWY_F16_CONSTEXPR float F32FromF16(float16_t f16) {
      |                                 ^~~~~~~~~~
../numpy/_core/src/highway/hwy/base.h: In function ‘constexpr bool hwy::operator<=(hwy::float16_t, hwy::float16_t)’:
../numpy/_core/src/highway/hwy/base.h:1070:20: error: call to non-‘constexpr’ function ‘float hwy::F32FromF16(hwy::float16_t)’
 1070 |   return F32FromF16(lhs) <= F32FromF16(rhs);
      |          ~~~~~~~~~~^~~~~
../numpy/_core/src/highway/hwy/base.h:975:33: note: ‘float hwy::F32FromF16(hwy::float16_t)’ declared here
  975 | HWY_API HWY_F16_CONSTEXPR float F32FromF16(float16_t f16) {
      |                                 ^~~~~~~~~~
../numpy/_core/src/highway/hwy/base.h: In function ‘constexpr bool hwy::operator>(hwy::float16_t, hwy::float16_t)’:
../numpy/_core/src/highway/hwy/base.h:1077:20: error: call to non-‘constexpr’ function ‘float hwy::F32FromF16(hwy::float16_t)’
 1077 |   return F32FromF16(lhs) > F32FromF16(rhs);
      |          ~~~~~~~~~~^~~~~
../numpy/_core/src/highway/hwy/base.h:975:33: note: ‘float hwy::F32FromF16(hwy::float16_t)’ declared here
  975 | HWY_API HWY_F16_CONSTEXPR float F32FromF16(float16_t f16) {
      |                                 ^~~~~~~~~~
../numpy/_core/src/highway/hwy/base.h: In function ‘constexpr bool hwy::operator>=(hwy::float16_t, hwy::float16_t)’:
../numpy/_core/src/highway/hwy/base.h:1084:20: error: call to non-‘constexpr’ function ‘float hwy::F32FromF16(hwy::float16_t)’
 1084 |   return F32FromF16(lhs) >= F32FromF16(rhs);
      |          ~~~~~~~~~~^~~~~
../numpy/_core/src/highway/hwy/base.h:975:33: note: ‘float hwy::F32FromF16(hwy::float16_t)’ declared here
  975 | HWY_API HWY_F16_CONSTEXPR float F32FromF16(float16_t f16) {
      |                                 ^~~~~~~~~~
In file included from ../numpy/_core/src/highway/hwy/highway.h:415,
                 from ../numpy/_core/src/highway/hwy/contrib/algo/copy-inl.h:28,
                 from ../numpy/_core/src/highway/hwy/contrib/sort/vqsort-inl.h:98,
                 from ../numpy/_core/src/npysort/highway_qsort.dispatch.cpp:3:
../numpy/_core/src/highway/hwy/ops/arm_neon-inl.h: In instantiation of ‘hwy::N_NEON_WITHOUT_AES::VFromD<D> hwy::N_NEON_WITHOUT_AES::MinOfLanes(D, hwy::N_NEON_WITHOUT_AES::VFromD<D>) [with D = hwy::N_NEON_WITHOUT_AES::Simd<double, 2, 0>; hwy::EnableIf<(D::kPrivateLanes > 1)>* <anonymous> = 0; hwy::N_NEON_WITHOUT_AES::VFromD<D> = hwy::N_NEON_WITHOUT_AES::Vec128<double, 2>; hwy::N_NEON_WITHOUT_AES::TFromD<D> = double]’:
../numpy/_core/src/highway/hwy/contrib/sort/traits-inl.h:324:22:   required from ‘hwy::N_NEON_WITHOUT_AES::Vec<D> hwy::N_NEON_WITHOUT_AES::detail::OrderAscending<T>::FirstOfLanes(D, hwy::N_NEON_WITHOUT_AES::Vec<D>, T*) const [with D = hwy::N_NEON_WITHOUT_AES::Simd<double, 2, 0>; T = double; hwy::N_NEON_WITHOUT_AES::Vec<D> = hwy::N_NEON_WITHOUT_AES::Vec128<double, 2>]’
../numpy/_core/src/highway/hwy/contrib/sort/vqsort-inl.h:1685:28:   required from ‘void hwy::N_NEON_WITHOUT_AES::detail::PrintMinMax(D, Traits, const T*, size_t, T*) [with D = hwy::N_NEON_WITHOUT_AES::Simd<double, 2, 0>; Traits = hwy::N_NEON_WITHOUT_AES::detail::SharedTraits<hwy::N_NEON_WITHOUT_AES::detail::TraitsLane<hwy::N_NEON_WITHOUT_AES::detail::OrderAscending<double> > >; T = double; size_t = long unsigned int]’
../numpy/_core/src/highway/hwy/contrib/sort/vqsort-inl.h:1710:16:   required from ‘void hwy::N_NEON_WITHOUT_AES::detail::Recurse(D, Traits, T*, size_t, T*, uint64_t*, size_t) [with D = hwy::N_NEON_WITHOUT_AES::Simd<double, 2, 0>; Traits = hwy::N_NEON_WITHOUT_AES::detail::SharedTraits<hwy::N_NEON_WITHOUT_AES::detail::TraitsLane<hwy::N_NEON_WITHOUT_AES::detail::OrderAscending<double> > >; T = double; size_t = long unsigned int; uint64_t = long unsigned int]’
../numpy/_core/src/highway/hwy/contrib/sort/vqsort-inl.h:1900:20:   required from ‘void hwy::N_NEON_WITHOUT_AES::Sort(D, Traits, T*, size_t, T*) [with D = hwy::N_NEON_WITHOUT_AES::Simd<double, 2, 0>; Traits = hwy::N_NEON_WITHOUT_AES::detail::SharedTraits<hwy::N_NEON_WITHOUT_AES::detail::TraitsLane<hwy::N_NEON_WITHOUT_AES::detail::OrderAscending<double> > >; T = double; size_t = long unsigned int]’
../numpy/_core/src/highway/hwy/contrib/sort/vqsort-inl.h:1932:14:   required from ‘void hwy::N_NEON_WITHOUT_AES::Sort(D, Traits, T*, size_t) [with D = hwy::N_NEON_WITHOUT_AES::Simd<double, 2, 0>; Traits = hwy::N_NEON_WITHOUT_AES::detail::SharedTraits<hwy::N_NEON_WITHOUT_AES::detail::TraitsLane<hwy::N_NEON_WITHOUT_AES::detail::OrderAscending<double> > >; T = double; size_t = long unsigned int]’
../numpy/_core/src/highway/hwy/contrib/sort/vqsort-inl.h:1991:7:   required from ‘void hwy::N_NEON_WITHOUT_AES::VQSortStatic(T*, size_t, hwy::SortAscending) [with T = double; size_t = long unsigned int]’
../numpy/_core/src/npysort/highway_qsort.dispatch.cpp:29:69:   required from here
../numpy/_core/src/highway/hwy/ops/arm_neon-inl.h:7480:26: error: call of overloaded ‘ReduceMin(hwy::N_NEON_WITHOUT_AES::Simd<double, 2, 0>&, hwy::N_NEON_WITHOUT_AES::VFromD<hwy::N_NEON_WITHOUT_AES::Simd<double, 2, 0> >&)’ is ambiguous
 7480 |   return Set(d, ReduceMin(d, v));
      |                 ~~~~~~~~~^~~~~~
../numpy/_core/src/highway/hwy/ops/arm_neon-inl.h:7430:35: note: candidate: ‘hwy::float64_t hwy::N_NEON_WITHOUT_AES::ReduceMin(D, hwy::N_NEON_WITHOUT_AES::Vec128<double, 2>) [with D = hwy::N_NEON_WITHOUT_AES::Simd<double, 2, 0>; hwy::EnableIf<(D::kPrivateLanes == 2)>* <anonymous> = 0; hwy::float64_t = double]’
 7430 | HWY_NEON_DEF_REDUCTION_CORE_TYPES(ReduceMin, vminv)
      |                                   ^~~~~~~~~
../numpy/_core/src/highway/hwy/ops/arm_neon-inl.h:7395:20: note: in definition of macro ‘HWY_NEON_DEF_REDUCTION’
 7395 |   HWY_API type##_t name(D /* tag */, Vec128<type##_t, size> v) {        \
      |                    ^~~~
../numpy/_core/src/highway/hwy/ops/arm_neon-inl.h:7430:1: note: in expansion of macro ‘HWY_NEON_DEF_REDUCTION_CORE_TYPES’
 7430 | HWY_NEON_DEF_REDUCTION_CORE_TYPES(ReduceMin, vminv)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../numpy/_core/src/highway/hwy/ops/arm_neon-inl.h:7445:19: note: candidate: ‘hwy::N_NEON_WITHOUT_AES::TFromD<D> hwy::N_NEON_WITHOUT_AES::ReduceMin(D, hwy::N_NEON_WITHOUT_AES::VFromD<D>) [with D = hwy::N_NEON_WITHOUT_AES::Simd<double, 2, 0>; hwy::EnableIf<(D::kPrivateLanes == 2)>* <anonymous> = 0; hwy::N_NEON_WITHOUT_AES::TFromD<D> = double; hwy::N_NEON_WITHOUT_AES::VFromD<D> = hwy::N_NEON_WITHOUT_AES::Vec128<double, 2>]’
 7445 | HWY_API TFromD<D> ReduceMin(D /* tag */, VFromD<D> v10) {
      |                   ^~~~~~~~~
../numpy/_core/src/highway/hwy/ops/arm_neon-inl.h: In instantiation of ‘hwy::N_NEON_WITHOUT_AES::VFromD<D> hwy::N_NEON_WITHOUT_AES::MaxOfLanes(D, hwy::N_NEON_WITHOUT_AES::VFromD<D>) [with D = hwy::N_NEON_WITHOUT_AES::Simd<double, 2, 0>; hwy::EnableIf<(D::kPrivateLanes > 1)>* <anonymous> = 0; hwy::N_NEON_WITHOUT_AES::VFromD<D> = hwy::N_NEON_WITHOUT_AES::Vec128<double, 2>; hwy::N_NEON_WITHOUT_AES::TFromD<D> = double]’:
../numpy/_core/src/highway/hwy/contrib/sort/traits-inl.h:330:22:   required from ‘hwy::N_NEON_WITHOUT_AES::Vec<D> hwy::N_NEON_WITHOUT_AES::detail::OrderAscending<T>::LastOfLanes(D, hwy::N_NEON_WITHOUT_AES::Vec<D>, T*) const [with D = hwy::N_NEON_WITHOUT_AES::Simd<double, 2, 0>; T = double; hwy::N_NEON_WITHOUT_AES::Vec<D> = hwy::N_NEON_WITHOUT_AES::Vec128<double, 2>]’
../numpy/_core/src/highway/hwy/contrib/sort/vqsort-inl.h:1686:26:   required from ‘void hwy::N_NEON_WITHOUT_AES::detail::PrintMinMax(D, Traits, const T*, size_t, T*) [with D = hwy::N_NEON_WITHOUT_AES::Simd<double, 2, 0>; Traits = hwy::N_NEON_WITHOUT_AES::detail::SharedTraits<hwy::N_NEON_WITHOUT_AES::detail::TraitsLane<hwy::N_NEON_WITHOUT_AES::detail::OrderAscending<double> > >; T = double; size_t = long unsigned int]’
../numpy/_core/src/highway/hwy/contrib/sort/vqsort-inl.h:1710:16:   required from ‘void hwy::N_NEON_WITHOUT_AES::detail::Recurse(D, Traits, T*, size_t, T*, uint64_t*, size_t) [with D = hwy::N_NEON_WITHOUT_AES::Simd<double, 2, 0>; Traits = hwy::N_NEON_WITHOUT_AES::detail::SharedTraits<hwy::N_NEON_WITHOUT_AES::detail::TraitsLane<hwy::N_NEON_WITHOUT_AES::detail::OrderAscending<double> > >; T = double; size_t = long unsigned int; uint64_t = long unsigned int]’
../numpy/_core/src/highway/hwy/contrib/sort/vqsort-inl.h:1900:20:   required from ‘void hwy::N_NEON_WITHOUT_AES::Sort(D, Traits, T*, size_t, T*) [with D = hwy::N_NEON_WITHOUT_AES::Simd<double, 2, 0>; Traits = hwy::N_NEON_WITHOUT_AES::detail::SharedTraits<hwy::N_NEON_WITHOUT_AES::detail::TraitsLane<hwy::N_NEON_WITHOUT_AES::detail::OrderAscending<double> > >; T = double; size_t = long unsigned int]’
../numpy/_core/src/highway/hwy/contrib/sort/vqsort-inl.h:1932:14:   required from ‘void hwy::N_NEON_WITHOUT_AES::Sort(D, Traits, T*, size_t) [with D = hwy::N_NEON_WITHOUT_AES::Simd<double, 2, 0>; Traits = hwy::N_NEON_WITHOUT_AES::detail::SharedTraits<hwy::N_NEON_WITHOUT_AES::detail::TraitsLane<hwy::N_NEON_WITHOUT_AES::detail::OrderAscending<double> > >; T = double; size_t = long unsigned int]’
../numpy/_core/src/highway/hwy/contrib/sort/vqsort-inl.h:1991:7:   required from ‘void hwy::N_NEON_WITHOUT_AES::VQSortStatic(T*, size_t, hwy::SortAscending) [with T = double; size_t = long unsigned int]’
../numpy/_core/src/npysort/highway_qsort.dispatch.cpp:29:69:   required from here
../numpy/_core/src/highway/hwy/ops/arm_neon-inl.h:7484:26: error: call of overloaded ‘ReduceMax(hwy::N_NEON_WITHOUT_AES::Simd<double, 2, 0>&, hwy::N_NEON_WITHOUT_AES::VFromD<hwy::N_NEON_WITHOUT_AES::Simd<double, 2, 0> >&)’ is ambiguous
 7484 |   return Set(d, ReduceMax(d, v));
      |                 ~~~~~~~~~^~~~~~
../numpy/_core/src/highway/hwy/ops/arm_neon-inl.h:7431:35: note: candidate: ‘hwy::float64_t hwy::N_NEON_WITHOUT_AES::ReduceMax(D, hwy::N_NEON_WITHOUT_AES::Vec128<double, 2>) [with D = hwy::N_NEON_WITHOUT_AES::Simd<double, 2, 0>; hwy::EnableIf<(D::kPrivateLanes == 2)>* <anonymous> = 0; hwy::float64_t = double]’
 7431 | HWY_NEON_DEF_REDUCTION_CORE_TYPES(ReduceMax, vmaxv)
      |                                   ^~~~~~~~~
../numpy/_core/src/highway/hwy/ops/arm_neon-inl.h:7395:20: note: in definition of macro ‘HWY_NEON_DEF_REDUCTION’
 7395 |   HWY_API type##_t name(D /* tag */, Vec128<type##_t, size> v) {        \
      |                    ^~~~
../numpy/_core/src/highway/hwy/ops/arm_neon-inl.h:7431:1: note: in expansion of macro ‘HWY_NEON_DEF_REDUCTION_CORE_TYPES’
 7431 | HWY_NEON_DEF_REDUCTION_CORE_TYPES(ReduceMax, vmaxv)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../numpy/_core/src/highway/hwy/ops/arm_neon-inl.h:7450:19: note: candidate: ‘hwy::N_NEON_WITHOUT_AES::TFromD<D> hwy::N_NEON_WITHOUT_AES::ReduceMax(D, hwy::N_NEON_WITHOUT_AES::VFromD<D>) [with D = hwy::N_NEON_WITHOUT_AES::Simd<double, 2, 0>; hwy::EnableIf<(D::kPrivateLanes == 2)>* <anonymous> = 0; hwy::N_NEON_WITHOUT_AES::TFromD<D> = double; hwy::N_NEON_WITHOUT_AES::VFromD<D> = hwy::N_NEON_WITHOUT_AES::Vec128<double, 2>]’
 7450 | HWY_API TFromD<D> ReduceMax(D /* tag */, VFromD<D> v10) {
      |                   ^~~~~~~~~
ninja: build stopped: subcommand failed.
ERROR Backend subprocess exited when trying to invoke build_wheel

A copy of this comment from the PR:

A search for that error comes up empty, however we haven't run these wheel builds in 1 months and 8 days I think (that was the last nightly upload for aarch64 to https://anaconda.org/scientific-python-nightly-wheels/numpy/files).

That last successful build was before the initial merge of highway_qsort (gh-24018), so this probably never worked in the wheel builds. @Mousius @seiko2plus does that error look familiar perhaps?

@rgommers rgommers added 00 - Bug component: SIMD Issues in SIMD (fast instruction sets) code or machinery labels Dec 21, 2023
@rgommers rgommers added this to the 2.0.0 release milestone Dec 21, 2023
@Mousius
Copy link
Member
Mousius commented Dec 21, 2023

cc @jan-wassenberg

Mousius added a commit to Mousius/numpy that referenced this issue Dec 21, 2023
@Mousius
Copy link
Member
Mousius commented Dec 21, 2023

@rgommers, a cursory glance over the git history for Highway reveals google/highway#1884, so first thing I think we should try is bumping it (#25446). Can you kick off the wheel build in that PR?

Mousius added a commit to Mousius/numpy that referenced this issue Dec 21, 2023
This should include google/highway#1884 which
may fix numpy#25445

[wheel build]
Mousius added a commit to Mousius/numpy that referenced this issue Dec 21, 2023
@jan-wassenberg
Copy link
Contributor

Sorry about the build error. We recommend using releases instead of arbitrary revisions/versions, those are more thoroughly tested.
There hasn't been a release since PR1884, but can be soon. In the meantime, how about we downgrade to a previous release (1.0.7)?

rgommers pushed a commit to Mousius/numpy that referenced this issue Dec 21, 2023
This should include google/highway#1884 which
may fix numpygh-25445.

[skip azp] [skip actions] [skip circle]
@rgommers
Copy link
Member Author

Thanks @jan-wassenberg. Comment from @Mousius on the linked PR:

I don't think we can go back to 1.0.7, it's quite old and we've bumped a few times for fixes already. Potentially worth getting this in and then latching onto the next version release?

That sounds reasonable to me indeed. For now, whatever works to get the aarch64 wheel builds fixed so nightlies start uploading again (they're outdated by a month, and we've broken ABI since then).

@jan-wassenberg
Copy link
Contributor

Got it, thanks. Let's update.
I will start release testing tomorrow, but no guarantee it finishes before the holidays.

@andyfaff
Copy link
Member

The Cron jobs have been running, it's just that the aarch64 entry has been failing for that amount of time.

@ngoldbaum
Copy link
Member

I will start release testing tomorrow, but no guarantee it finishes before the holidays.

The earliest anyone has talked about doing a numpy 2.0 release candidate is midway through January, so no rush on getting that done before new years. Appreciate you bumping the priority on that for us.

Mousius added a commit to Mousius/numpy that referenced this issue Dec 22, 2023
We had to pull in some git commits after the initial Highway merge, but
it makes way more sense to use their well tested versions 😸

Hopefully fixes numpy#25445
Mousius added a commit to Mousius/numpy that referenced this issue Dec 22, 2023
We had to pull in some git commits after the initial Highway merge, but
it makes way more sense to use their well tested versions 😸

Hopefully fixes numpy#25445
@Mousius
Copy link
Member
Mousius commented Dec 22, 2023

Got it, thanks. Let's update. I will start release testing tomorrow, but no guarantee it finishes before the holidays.

Thanks @jan-wassenberg. I grabbed a machine today and reviewed my assumption. It turns out I was wrong; I think I just started with git hashes and ended up with git hashes, which may have introduced compounding issues 🤔

#25446 should roll back to 1.0.7 safely.

@jan-wassenberg
Copy link
Contributor

Oh, thanks for double-checking. Good that we can use 1.0.7 after all.
FYI I have some fixes under way, float16 is requiring quite a few changes. I expect we'll do a release early in the new year.
Happy holidays!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
00 - Bug component: SIMD Issues in SIMD (fast instruction sets) code or machinery
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants
0