Skip to content

[C++] Build failure with ARROW_SIMD_LEVEL=NONE #47946

Description

@lahwaacz

Describe the bug, including details regarding any error messages, version, and platform.

Building arrow 22.0.0 with the -DARROW_SIMD_LEVEL=NONE CMake option leads to these errors:

FAILED: [code=1] src/arrow/CMakeFiles/arrow_util.dir/util/byte_stream_split_internal_avx2.cc.o
/usr/bin/c++ -DARROW_HAVE_RUNTIME_AVX2 -DARROW_HAVE_RUNTIME_AVX512 -DARROW_HAVE_RUNTIME_BMI2 -DARROW_HAVE_RUNTIME_SSE4_2 -DARROW_WITH_TIMING_TESTS -DGFLAGS_IS_A_DLL=0 -DGLOG_USE_GFLAGS -DGLOG_USE_GLOG_EXPORT -DURI_STATIC_BUILD -I/build/arrow/src/build/src -I/build/arrow/src/apache-arrow-22.0.0/cpp/src -I/build/arrow/src/apache-arrow-22.0.0/cpp/src/generated -Wredundant-move -Wno-noexcept-type -Wno-self-move -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions         -Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security         -fstack-clash-protection -fcf-protection         -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -Wp,-D_GLIBCXX_ASSERTIONS -g -ffile-prefix-map=/build/arrow/src=/usr/src/debug/arrow -flto=auto -fdiagnostics-color=always  -Wall -Wno-conversion -Wno-sign-conversion -Wdate-time -Wimplicit-fallthrough -Wunused-result -fno-semantic-interposition  -O2 -g -DNDEBUG -ftree-vectorize -ggdb  -std=c++17 -fPIC -march=haswell -mavx2 -MD -MT src/arrow/CMakeFiles/arrow_util.dir/util/byte_stream_split_internal_avx2.cc.o -MF src/arrow/CMakeFiles/arrow_util.dir/util/byte_stream_split_internal_avx2.cc.o.d -o src/arrow/CMakeFiles/arrow_util.dir/util/byte_stream_split_internal_avx2.cc.o -c /build/arrow/src/apache-arrow-22.0.0/cpp/src/arrow/util/byte_stream_split_internal_avx2.cc
In file included from /usr/include/xsimd/types/xsimd_avx2_register.hpp:15,
                 from /build/arrow/src/apache-arrow-22.0.0/cpp/src/arrow/util/byte_stream_split_internal_avx2.cc:22:
/usr/include/xsimd/types/xsimd_avx_register.hpp:48:63: error: expected constructor, destructor, or type conversion before ‘;’ token
   48 |         XSIMD_DECLARE_SIMD_REGISTER(signed char, avx, __m256i);
      |                                                               ^
/usr/include/xsimd/types/xsimd_avx_register.hpp:49:65: error: expected constructor, destructor, or type conversion before ‘;’ token
   49 |         XSIMD_DECLARE_SIMD_REGISTER(unsigned char, avx, __m256i);
      |                                                                 ^
/usr/include/xsimd/types/xsimd_avx_register.hpp:50:56: error: expected constructor, destructor, or type conversion before ‘;’ token
   50 |         XSIMD_DECLARE_SIMD_REGISTER(char, avx, __m256i);
      |                                                        ^
/usr/include/xsimd/types/xsimd_avx_register.hpp:51:66: error: expected constructor, destructor, or type conversion before ‘;’ token
   51 |         XSIMD_DECLARE_SIMD_REGISTER(unsigned short, avx, __m256i);
      |                                                                  ^
/usr/include/xsimd/types/xsimd_avx_register.hpp:52:57: error: expected constructor, destructor, or type conversion before ‘;’ token
   52 |         XSIMD_DECLARE_SIMD_REGISTER(short, avx, __m256i);
      |                                                         ^
/usr/include/xsimd/types/xsimd_avx_register.hpp:53:64: error: expected constructor, destructor, or type conversion before ‘;’ token
   53 |         XSIMD_DECLARE_SIMD_REGISTER(unsigned int, avx, __m256i);
      |                                                                ^
/usr/include/xsimd/types/xsimd_avx_register.hpp:54:55: error: expected constructor, destructor, or type conversion before ‘;’ token
   54 |         XSIMD_DECLARE_SIMD_REGISTER(int, avx, __m256i);
      |                                                       ^
/usr/include/xsimd/types/xsimd_avx_register.hpp:55:69: error: expected constructor, destructor, or type conversion before ‘;’ token
   55 |         XSIMD_DECLARE_SIMD_REGISTER(unsigned long int, avx, __m256i);
      |                                                                     ^
/usr/include/xsimd/types/xsimd_avx_register.hpp:56:60: error: expected constructor, destructor, or type conversion before ‘;’ token
   56 |         XSIMD_DECLARE_SIMD_REGISTER(long int, avx, __m256i);
      |                                                            ^
/usr/include/xsimd/types/xsimd_avx_register.hpp:57:74: error: expected constructor, destructor, or type conversion before ‘;’ token
   57 |         XSIMD_DECLARE_SIMD_REGISTER(unsigned long long int, avx, __m256i);
      |                                                                          ^
/usr/include/xsimd/types/xsimd_avx_register.hpp:58:65: error: expected constructor, destructor, or type conversion before ‘;’ token
   58 |         XSIMD_DECLARE_SIMD_REGISTER(long long int, avx, __m256i);
      |                                                                 ^
/usr/include/xsimd/types/xsimd_avx_register.hpp:59:56: error: expected constructor, destructor, or type conversion before ‘;’ token
   59 |         XSIMD_DECLARE_SIMD_REGISTER(float, avx, __m256);
      |                                                        ^
/usr/include/xsimd/types/xsimd_avx_register.hpp:60:58: error: expected constructor, destructor, or type conversion before ‘;’ token
   60 |         XSIMD_DECLARE_SIMD_REGISTER(double, avx, __m256d);
      |                                                          ^
/usr/include/xsimd/types/xsimd_avx2_register.hpp:39:53: error: expected constructor, destructor, or type conversion before ‘;’ token
   39 |         XSIMD_DECLARE_SIMD_REGISTER_ALIAS(avx2, avx);
      |                                                     ^
/build/arrow/src/apache-arrow-22.0.0/cpp/src/arrow/util/byte_stream_split_internal_avx2.cc:33:15: error: variable or field ‘ByteStreamSplitDecodeSimd’ declared void
   33 | template void ByteStreamSplitDecodeSimd<xsimd::avx2, 2>(const uint8_t*, int, int64_t,
      |               ^~~~~~~~~~~~~~~~~~~~~~~~~
/build/arrow/src/apache-arrow-22.0.0/cpp/src/arrow/util/byte_stream_split_internal_avx2.cc:33:40: error: expected ‘;’ before ‘<’ token
   33 | template void ByteStreamSplitDecodeSimd<xsimd::avx2, 2>(const uint8_t*, int, int64_t,
      |                                        ^
      |                                        ;
/build/arrow/src/apache-arrow-22.0.0/cpp/src/arrow/util/byte_stream_split_internal_avx2.cc:35:15: error: variable or field ‘ByteStreamSplitDecodeSimd’ declared void
   35 | template void ByteStreamSplitDecodeSimd<xsimd::avx2, 4>(const uint8_t*, int, int64_t,
      |               ^~~~~~~~~~~~~~~~~~~~~~~~~
/build/arrow/src/apache-arrow-22.0.0/cpp/src/arrow/util/byte_stream_split_internal_avx2.cc:35:40: error: expected ‘;’ before ‘<’ token
   35 | template void ByteStreamSplitDecodeSimd<xsimd::avx2, 4>(const uint8_t*, int, int64_t,
      |                                        ^
      |                                        ;
/build/arrow/src/apache-arrow-22.0.0/cpp/src/arrow/util/byte_stream_split_internal_avx2.cc:37:15: error: variable or field ‘ByteStreamSplitDecodeSimd’ declared void
   37 | template void ByteStreamSplitDecodeSimd<xsimd::avx2, 8>(const uint8_t*, int, int64_t,
      |               ^~~~~~~~~~~~~~~~~~~~~~~~~
/build/arrow/src/apache-arrow-22.0.0/cpp/src/arrow/util/byte_stream_split_internal_avx2.cc:37:40: error: expected ‘;’ before ‘<’ token
   37 | template void ByteStreamSplitDecodeSimd<xsimd::avx2, 8>(const uint8_t*, int, int64_t,
      |                                        ^
      |                                        ;
/build/arrow/src/apache-arrow-22.0.0/cpp/src/arrow/util/byte_stream_split_internal_avx2.cc: In function ‘void arrow::util::internal::ByteStreamSplitEncodeAvx2Impl4(const uint8_t*, int, int64_t, uint8_t*)’:
/build/arrow/src/apache-arrow-22.0.0/cpp/src/arrow/util/byte_stream_split_internal_avx2.cc:52:12: error: ‘ByteStreamSplitEncodeSimd’ was not declared in this scope; did you mean ‘ByteStreamSplitEncode’?
   52 |     return ByteStreamSplitEncodeSimd<xsimd::sse4_2, kNumStreams>(
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~
      |            ByteStreamSplitEncode
/build/arrow/src/apache-arrow-22.0.0/cpp/src/arrow/util/byte_stream_split_internal_avx2.cc:52:51: error: expected primary-expression before ‘,’ token
   52 |     return ByteStreamSplitEncodeSimd<xsimd::sse4_2, kNumStreams>(
      |                                                   ^
/build/arrow/src/apache-arrow-22.0.0/cpp/src/arrow/util/byte_stream_split_internal_avx2.cc:53:9: warning: left operand of comma operator has no effect [-Wunused-value]
   53 |         raw_values, width, num_values, output_buffer_raw);
      |         ^~~~~~~~~~
/build/arrow/src/apache-arrow-22.0.0/cpp/src/arrow/util/byte_stream_split_internal_avx2.cc:53:28: warning: right operand of comma operator has no effect [-Wunused-value]
   53 |         raw_values, width, num_values, output_buffer_raw);
      |                            ^~~~~~~~~~
/build/arrow/src/apache-arrow-22.0.0/cpp/src/arrow/util/byte_stream_split_internal_avx2.cc:53:40: warning: right operand of comma operator has no effect [-Wunused-value]
   53 |         raw_values, width, num_values, output_buffer_raw);
      |                                        ^~~~~~~~~~~~~~~~~
/build/arrow/src/apache-arrow-22.0.0/cpp/src/arrow/util/byte_stream_split_internal_avx2.cc:52:64: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
   52 |     return ByteStreamSplitEncodeSimd<xsimd::sse4_2, kNumStreams>(
      |                                                     ~~~~~~~~~~~^~
   53 |         raw_values, width, num_values, output_buffer_raw);
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/build/arrow/src/apache-arrow-22.0.0/cpp/src/arrow/util/byte_stream_split_internal_avx2.cc: In function ‘void arrow::util::internal::ByteStreamSplitEncodeAvx2(const uint8_t*, int, int64_t, uint8_t*)’:
/build/arrow/src/apache-arrow-22.0.0/cpp/src/arrow/util/byte_stream_split_internal_avx2.cc:128:12: error: ‘ByteStreamSplitEncodeSimd’ was not declared in this scope; did you mean ‘ByteStreamSplitEncodeAvx2’? [-Wtemplate-body]
  128 |     return ByteStreamSplitEncodeSimd<xsimd::avx2, kNumStreams>(
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~
      |            ByteStreamSplitEncodeAvx2
/build/arrow/src/apache-arrow-22.0.0/cpp/src/arrow/util/byte_stream_split_internal_avx2.cc:128:49: error: expected primary-expression before ‘,’ token [-Wtemplate-body]
  128 |     return ByteStreamSplitEncodeSimd<xsimd::avx2, kNumStreams>(
      |                                                 ^
/build/arrow/src/apache-arrow-22.0.0/cpp/src/arrow/util/byte_stream_split_internal_avx2.cc:128:62: error: ISO C++ forbids comparison between pointer and integer [-Wtemplate-body]
  128 |     return ByteStreamSplitEncodeSimd<xsimd::avx2, kNumStreams>(
      |                                                   ~~~~~~~~~~~^~
  129 |         raw_values, width, num_values, output_buffer_raw);
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The ByteStreamSplitDecodeSimd and ByteStreamSplitDecodeSimd functions are defined in byte_stream_split_internal.h only if a suitable SIMD level is configured:

#if defined(ARROW_HAVE_NEON) || defined(ARROW_HAVE_SSE4_2)
# include <xsimd/xsimd.hpp>
# define ARROW_HAVE_SIMD_SPLIT
#endif
namespace arrow::util::internal {
#if defined(ARROW_HAVE_SIMD_SPLIT)

But here the functions seem to be used without any macro guards:

return ByteStreamSplitEncodeSimd<xsimd::sse4_2, kNumStreams>(

Component(s)

C++

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions