Skip to content

[Build] Onnxruntime v1.21.0 fails to build with GCC-13.3.0 when given x86_64 -mf16c flag #24289

@maxmarsc

Description

@maxmarsc

Describe the issue

OS : Kubuntu 24.04
Compiler: g++ (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0
Arch: x86_64
Onnxruntime version: v1.21.0

Passing the -mf16c flag make the build fail. Using this flag enable the use of the x86_64 instruction for fp32<->fp16 conversion instructions, it's used internally by Eigen.

Urgency

Not quite urgent, but user relying on hardware compatible with the instruction might not be able to update their onnxruntime version.

Target platform

x86_64

Build script

./build.sh --parallel 0 --skip_tests --cmake_extra_defines 'CMAKE_CXX_FLAG=-mf16c' --config Release

Error / output

Here is the detailed error output

In file included from /usr/lib/gcc/x86_64-linux-gnu/13/include/pmmintrin.h:31,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/opt_random.h:34,
                 from /usr/include/c++/13/random:52,
                 from /foo/onnxruntime/build/Release/_deps/abseil_cpp-src/absl/algorithm/container.h:47,
                 from /foo/onnxruntime/build/Release/_deps/abseil_cpp-src/absl/container/flat_hash_map.h:40,
                 from /foo/onnxruntime/build/Release/_deps/abseil_cpp-src/absl/flags/reflection.h:29,
                 from /foo/onnxruntime/build/Release/_deps/googletest-src/googletest/include/gtest/internal/gtest-port.h:343,
                 from /foo/onnxruntime/build/Release/_deps/googletest-src/googlemock/include/gmock/internal/gmock-port.h:57,
                 from /foo/onnxruntime/build/Release/_deps/googletest-src/googlemock/include/gmock/internal/gmock-internal-utils.h:50,
                 from /foo/onnxruntime/build/Release/_deps/googletest-src/googlemock/include/gmock/gmock-actions.h:146,
                 from /foo/onnxruntime/build/Release/_deps/googletest-src/googlemock/include/gmock/gmock.h:56,
                 from /foo/onnxruntime/onnxruntime/test/providers/cpu/math/topk_op_test.cc:4:
In function ‘void _mm_store_si128(__m128i*, __m128i)’,
    inlined from ‘void Eigen::internal::pstore(Scalar*, const Packet&) [with Scalar = Eigen::half; Packet = eigen_packet_wrapper<__vector(2) long long int, 2>]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/arch/AVX/PacketMath.h:2238:18,
    inlined from ‘void Eigen::internal::pstoret(Scalar*, const Packet&) [with Scalar = Eigen::half; Packet = eigen_packet_wrapper<__vector(2) long long int, 2>; int Alignment = 16]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/GenericPacketMath.h:1357:11,
    inlined from ‘void Eigen::internal::assign_op<DstScalar, SrcScalar>::assignPacket(DstScalar*, const Packet&) const [with int Alignment = 16; Packet = Eigen::internal::eigen_packet_wrapper<__vector(2) long long int, 2>; DstScalar = Eigen::half; SrcScalar = Eigen::half]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/functors/AssignmentFunctors.h:30:52,
    inlined from ‘void Eigen::internal::generic_dense_assignment_kernel<DstEvaluatorTypeT, SrcEvaluatorTypeT, Functor, Version>::assignPacket(Eigen::Index) [with int StoreMode = 16; int LoadMode = 0; Packet = Eigen::internal::eigen_packet_wrapper<__vector(2) long long int, 2>; DstEvaluatorTypeT = Eigen::internal::evaluator<Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> > >; SrcEvaluatorTypeT = Eigen::internal::evaluator<Eigen::CwiseUnaryOp<Eigen::internal::core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > > >; Functor = Eigen::internal::assign_op<Eigen::half, Eigen::half>; int Version = 0]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:609:47,
    inlined from ‘static constexpr void Eigen::internal::dense_assignment_loop<Kernel, 3, 0>::run(Kernel&) [with Kernel = Eigen::internal::generic_dense_assignment_kernel<Eigen::internal::evaluator<Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> > >, Eigen::internal::evaluator<Eigen::CwiseUnaryOp<Eigen::internal::core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > > >, Eigen::internal::assign_op<Eigen::half, Eigen::half>, 0>]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:399:75,
    inlined from ‘constexpr void Eigen::internal::call_dense_assignment_loop(DstXprType&, const SrcXprType&, const Functor&) [with DstXprType = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >; SrcXprType = Eigen::CwiseUnaryOp<core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >; Functor = assign_op<Eigen::half, Eigen::half>]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:705:37,
    inlined from ‘static void Eigen::internal::Assignment<DstXprType, SrcXprType, Functor, Eigen::internal::Dense2Dense, Weak>::run(DstXprType&, const SrcXprType&, const Functor&) [with DstXprType = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >; SrcXprType = Eigen::CwiseUnaryOp<Eigen::internal::core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >; Functor = Eigen::internal::assign_op<Eigen::half, Eigen::half>; Weak = void]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:855:31,
    inlined from ‘constexpr void Eigen::internal::call_assignment_no_alias(Dst&, const Src&, const Func&) [with Dst = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >; Src = Eigen::CwiseUnaryOp<core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >; Func = assign_op<Eigen::half, Eigen::half>]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:797:51,
    inlined from ‘void Eigen::internal::call_assignment(Dst&, const Src&, const Func&, std::enable_if_t<(! evaluator_assume_aliasing<Src>::value), void*>) [with Dst = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >; Src = Eigen::CwiseUnaryOp<core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >; Func = assign_op<Eigen::half, Eigen::half>]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:768:27,
    inlined from ‘void Eigen::internal::call_assignment(Dst&, const Src&) [with Dst = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >; Src = Eigen::CwiseUnaryOp<core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:750:18,
    inlined from ‘Derived& Eigen::MatrixBase<Derived>::operator=(const Eigen::DenseBase<OtherDerived>&) [with OtherDerived = Eigen::CwiseUnaryOp<Eigen::internal::core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >; Derived = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/Assign.h:59:28,
    inlined from ‘void onnxruntime::test::ConvertFloatToMLFloat16(const float*, onnxruntime::MLFloat16*, size_t)’ at /foo/onnxruntime/onnxruntime/test/providers/provider_test_utils.h:15:56,
    inlined from ‘virtual void onnxruntime::test::TopKOperator_NthElementHalf_NegtiveVals_Test::TestBody()’ at /foo/onnxruntime/onnxruntime/test/providers/cpu/math/topk_op_test.cc:675:26:
/usr/lib/gcc/x86_64-linux-gnu/13/include/emmintrin.h:736:8: error: array subscript ‘__m128i[0]’ is partly outside array bounds of ‘unsigned char [8]’ [-Werror=array-bounds=]
  736 |   *__P = __B;
      |   ~~~~~^~~~~
In file included from /usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h:33,
                 from /usr/include/c++/13/bits/allocator.h:46,
                 from /usr/include/c++/13/bits/alloc_traits.h:39,
                 from /usr/include/c++/13/ext/alloc_traits.h:34,
                 from /usr/include/c++/13/bits/hashtable_policy.h:39,
                 from /usr/include/c++/13/bits/hashtable.h:35,
                 from /usr/include/c++/13/bits/unordered_map.h:33,
                 from /usr/include/c++/13/unordered_map:41,
                 from /usr/include/c++/13/functional:63,
                 from /foo/onnxruntime/build/Release/_deps/googletest-src/googlemock/include/gmock/gmock-actions.h:139:
In member function ‘_Tp* std::__new_allocator<_Tp>::allocate(size_type, const void*) [with _Tp = onnxruntime::MLFloat16]’,
    inlined from ‘static _Tp* std::allocator_traits<std::allocator<_Tp1> >::allocate(allocator_type&, size_type) [with _Tp = onnxruntime::MLFloat16]’ at /usr/include/c++/13/bits/alloc_traits.h:482:28,
    inlined from ‘std::_Vector_base<_Tp, _Alloc>::pointer std::_Vector_base<_Tp, _Alloc>::_M_allocate(std::size_t) [with _Tp = onnxruntime::MLFloat16; _Alloc = std::allocator<onnxruntime::MLFloat16>]’ at /usr/include/c++/13/bits/stl_vector.h:381:33,
    inlined from ‘void std::_Vector_base<_Tp, _Alloc>::_M_create_storage(std::size_t) [with _Tp = onnxruntime::MLFloat16; _Alloc = std::allocator<onnxruntime::MLFloat16>]’ at /usr/include/c++/13/bits/stl_vector.h:398:44,
    inlined from ‘std::_Vector_base<_Tp, _Alloc>::_Vector_base(std::size_t, const allocator_type&) [with _Tp = onnxruntime::MLFloat16; _Alloc = std::allocator<onnxruntime::MLFloat16>]’ at /usr/include/c++/13/bits/stl_vector.h:335:26,
    inlined from ‘std::vector<_Tp, _Alloc>::vector(size_type, const allocator_type&) [with _Tp = onnxruntime::MLFloat16; _Alloc = std::allocator<onnxruntime::MLFloat16>]’ at /usr/include/c++/13/bits/stl_vector.h:557:47,
    inlined from ‘virtual void onnxruntime::test::TopKOperator_NthElementHalf_NegtiveVals_Test::TestBody()’ at /foo/onnxruntime/onnxruntime/test/providers/cpu/math/topk_op_test.cc:673:41:
/usr/include/c++/13/bits/new_allocator.h:151:55: note: at offset [0, 6] into object of size 8 allocated by ‘operator new’
  151 |         return static_cast<_Tp*>(_GLIBCXX_OPERATOR_NEW(__n * sizeof(_Tp)));
      |                                                       ^
In function ‘void _mm_store_si128(__m128i*, __m128i)’,
    inlined from ‘void Eigen::internal::pstore(Scalar*, const Packet&) [with Scalar = Eigen::half; Packet = eigen_packet_wrapper<__vector(2) long long int, 2>]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/arch/AVX/PacketMath.h:2238:18,
    inlined from ‘void Eigen::internal::pstoret(Scalar*, const Packet&) [with Scalar = Eigen::half; Packet = eigen_packet_wrapper<__vector(2) long long int, 2>; int Alignment = 16]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/GenericPacketMath.h:1357:11,
    inlined from ‘void Eigen::internal::assign_op<DstScalar, SrcScalar>::assignPacket(DstScalar*, const Packet&) const [with int Alignment = 16; Packet = Eigen::internal::eigen_packet_wrapper<__vector(2) long long int, 2>; DstScalar = Eigen::half; SrcScalar = Eigen::half]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/functors/AssignmentFunctors.h:30:52,
    inlined from ‘void Eigen::internal::generic_dense_assignment_kernel<DstEvaluatorTypeT, SrcEvaluatorTypeT, Functor, Version>::assignPacket(Eigen::Index) [with int StoreMode = 16; int LoadMode = 0; Packet = Eigen::internal::eigen_packet_wrapper<__vector(2) long long int, 2>; DstEvaluatorTypeT = Eigen::internal::evaluator<Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> > >; SrcEvaluatorTypeT = Eigen::internal::evaluator<Eigen::CwiseUnaryOp<Eigen::internal::core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > > >; Functor = Eigen::internal::assign_op<Eigen::half, Eigen::half>; int Version = 0]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:609:47,
    inlined from ‘static constexpr void Eigen::internal::dense_assignment_loop<Kernel, 3, 0>::run(Kernel&) [with Kernel = Eigen::internal::generic_dense_assignment_kernel<Eigen::internal::evaluator<Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> > >, Eigen::internal::evaluator<Eigen::CwiseUnaryOp<Eigen::internal::core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > > >, Eigen::internal::assign_op<Eigen::half, Eigen::half>, 0>]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:399:75,
    inlined from ‘constexpr void Eigen::internal::call_dense_assignment_loop(DstXprType&, const SrcXprType&, const Functor&) [with DstXprType = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >; SrcXprType = Eigen::CwiseUnaryOp<core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >; Functor = assign_op<Eigen::half, Eigen::half>]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:705:37,
    inlined from ‘static void Eigen::internal::Assignment<DstXprType, SrcXprType, Functor, Eigen::internal::Dense2Dense, Weak>::run(DstXprType&, const SrcXprType&, const Functor&) [with DstXprType = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >; SrcXprType = Eigen::CwiseUnaryOp<Eigen::internal::core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >; Functor = Eigen::internal::assign_op<Eigen::half, Eigen::half>; Weak = void]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:855:31,
    inlined from ‘constexpr void Eigen::internal::call_assignment_no_alias(Dst&, const Src&, const Func&) [with Dst = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >; Src = Eigen::CwiseUnaryOp<core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >; Func = assign_op<Eigen::half, Eigen::half>]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:797:51,
    inlined from ‘void Eigen::internal::call_assignment(Dst&, const Src&, const Func&, std::enable_if_t<(! evaluator_assume_aliasing<Src>::value), void*>) [with Dst = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >; Src = Eigen::CwiseUnaryOp<core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >; Func = assign_op<Eigen::half, Eigen::half>]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:768:27,
    inlined from ‘void Eigen::internal::call_assignment(Dst&, const Src&) [with Dst = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >; Src = Eigen::CwiseUnaryOp<core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:750:18,
    inlined from ‘Derived& Eigen::MatrixBase<Derived>::operator=(const Eigen::DenseBase<OtherDerived>&) [with OtherDerived = Eigen::CwiseUnaryOp<Eigen::internal::core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >; Derived = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/Assign.h:59:28,
    inlined from ‘void onnxruntime::test::ConvertFloatToMLFloat16(const float*, onnxruntime::MLFloat16*, size_t)’ at /foo/onnxruntime/onnxruntime/test/providers/provider_test_utils.h:15:56,
    inlined from ‘virtual void onnxruntime::test::TopKOperator_NthElementHalf_NegtiveVals_Test::TestBody()’ at /foo/onnxruntime/onnxruntime/test/providers/cpu/math/topk_op_test.cc:674:26:
/usr/lib/gcc/x86_64-linux-gnu/13/include/emmintrin.h:736:8: error: array subscript ‘__m128i[0]’ is partly outside array bounds of ‘unsigned char [12]’ [-Werror=array-bounds=]
  736 |   *__P = __B;
      |   ~~~~~^~~~~
In member function ‘_Tp* std::__new_allocator<_Tp>::allocate(size_type, const void*) [with _Tp = onnxruntime::MLFloat16]’,
    inlined from ‘static _Tp* std::allocator_traits<std::allocator<_Tp1> >::allocate(allocator_type&, size_type) [with _Tp = onnxruntime::MLFloat16]’ at /usr/include/c++/13/bits/alloc_traits.h:482:28,
    inlined from ‘std::_Vector_base<_Tp, _Alloc>::pointer std::_Vector_base<_Tp, _Alloc>::_M_allocate(std::size_t) [with _Tp = onnxruntime::MLFloat16; _Alloc = std::allocator<onnxruntime::MLFloat16>]’ at /usr/include/c++/13/bits/stl_vector.h:381:33,
    inlined from ‘void std::_Vector_base<_Tp, _Alloc>::_M_create_storage(std::size_t) [with _Tp = onnxruntime::MLFloat16; _Alloc = std::allocator<onnxruntime::MLFloat16>]’ at /usr/include/c++/13/bits/stl_vector.h:398:44,
    inlined from ‘std::_Vector_base<_Tp, _Alloc>::_Vector_base(std::size_t, const allocator_type&) [with _Tp = onnxruntime::MLFloat16; _Alloc = std::allocator<onnxruntime::MLFloat16>]’ at /usr/include/c++/13/bits/stl_vector.h:335:26,
    inlined from ‘std::vector<_Tp, _Alloc>::vector(size_type, const allocator_type&) [with _Tp = onnxruntime::MLFloat16; _Alloc = std::allocator<onnxruntime::MLFloat16>]’ at /usr/include/c++/13/bits/stl_vector.h:557:47,
    inlined from ‘virtual void onnxruntime::test::TopKOperator_NthElementHalf_NegtiveVals_Test::TestBody()’ at /foo/onnxruntime/onnxruntime/test/providers/cpu/math/topk_op_test.cc:672:38:
/usr/include/c++/13/bits/new_allocator.h:151:55: note: at offset [0, 10] into object of size 12 allocated by ‘operator new’
  151 |         return static_cast<_Tp*>(_GLIBCXX_OPERATOR_NEW(__n * sizeof(_Tp)));
      |                                                       ^
In function ‘void _mm_store_si128(__m128i*, __m128i)’,
    inlined from ‘void Eigen::internal::pstore(Scalar*, const Packet&) [with Scalar = Eigen::half; Packet = eigen_packet_wrapper<__vector(2) long long int, 2>]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/arch/AVX/PacketMath.h:2238:18,
    inlined from ‘void Eigen::internal::pstoret(Scalar*, const Packet&) [with Scalar = Eigen::half; Packet = eigen_packet_wrapper<__vector(2) long long int, 2>; int Alignment = 16]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/GenericPacketMath.h:1357:11,
    inlined from ‘void Eigen::internal::assign_op<DstScalar, SrcScalar>::assignPacket(DstScalar*, const Packet&) const [with int Alignment = 16; Packet = Eigen::internal::eigen_packet_wrapper<__vector(2) long long int, 2>; DstScalar = Eigen::half; SrcScalar = Eigen::half]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/functors/AssignmentFunctors.h:30:52,
    inlined from ‘void Eigen::internal::generic_dense_assignment_kernel<DstEvaluatorTypeT, SrcEvaluatorTypeT, Functor, Version>::assignPacket(Eigen::Index) [with int StoreMode = 16; int LoadMode = 0; Packet = Eigen::internal::eigen_packet_wrapper<__vector(2) long long int, 2>; DstEvaluatorTypeT = Eigen::internal::evaluator<Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> > >; SrcEvaluatorTypeT = Eigen::internal::evaluator<Eigen::CwiseUnaryOp<Eigen::internal::core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > > >; Functor = Eigen::internal::assign_op<Eigen::half, Eigen::half>; int Version = 0]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:609:47,
    inlined from ‘static constexpr void Eigen::internal::dense_assignment_loop<Kernel, 3, 0>::run(Kernel&) [with Kernel = Eigen::internal::generic_dense_assignment_kernel<Eigen::internal::evaluator<Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> > >, Eigen::internal::evaluator<Eigen::CwiseUnaryOp<Eigen::internal::core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > > >, Eigen::internal::assign_op<Eigen::half, Eigen::half>, 0>]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:399:75,
    inlined from ‘constexpr void Eigen::internal::call_dense_assignment_loop(DstXprType&, const SrcXprType&, const Functor&) [with DstXprType = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >; SrcXprType = Eigen::CwiseUnaryOp<core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >; Functor = assign_op<Eigen::half, Eigen::half>]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:705:37,
    inlined from ‘static void Eigen::internal::Assignment<DstXprType, SrcXprType, Functor, Eigen::internal::Dense2Dense, Weak>::run(DstXprType&, const SrcXprType&, const Functor&) [with DstXprType = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >; SrcXprType = Eigen::CwiseUnaryOp<Eigen::internal::core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >; Functor = Eigen::internal::assign_op<Eigen::half, Eigen::half>; Weak = void]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:855:31,
    inlined from ‘constexpr void Eigen::internal::call_assignment_no_alias(Dst&, const Src&, const Func&) [with Dst = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >; Src = Eigen::CwiseUnaryOp<core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >; Func = assign_op<Eigen::half, Eigen::half>]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:797:51,
    inlined from ‘void Eigen::internal::call_assignment(Dst&, const Src&, const Func&, std::enable_if_t<(! evaluator_assume_aliasing<Src>::value), void*>) [with Dst = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >; Src = Eigen::CwiseUnaryOp<core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >; Func = assign_op<Eigen::half, Eigen::half>]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:768:27,
    inlined from ‘void Eigen::internal::call_assignment(Dst&, const Src&) [with Dst = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >; Src = Eigen::CwiseUnaryOp<core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:750:18,
    inlined from ‘Derived& Eigen::MatrixBase<Derived>::operator=(const Eigen::DenseBase<OtherDerived>&) [with OtherDerived = Eigen::CwiseUnaryOp<Eigen::internal::core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >; Derived = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/Assign.h:59:28,
    inlined from ‘void onnxruntime::test::ConvertFloatToMLFloat16(const float*, onnxruntime::MLFloat16*, size_t)’ at /foo/onnxruntime/onnxruntime/test/providers/provider_test_utils.h:15:56,
    inlined from ‘virtual void onnxruntime::test::TopKOperator_NthElementHalf_Test::TestBody()’ at /foo/onnxruntime/onnxruntime/test/providers/cpu/math/topk_op_test.cc:658:26:
/usr/lib/gcc/x86_64-linux-gnu/13/include/emmintrin.h:736:8: error: array subscript ‘__m128i[0]’ is partly outside array bounds of ‘unsigned char [8]’ [-Werror=array-bounds=]
  736 |   *__P = __B;
      |   ~~~~~^~~~~
In member function ‘_Tp* std::__new_allocator<_Tp>::allocate(size_type, const void*) [with _Tp = onnxruntime::MLFloat16]’,
    inlined from ‘static _Tp* std::allocator_traits<std::allocator<_Tp1> >::allocate(allocator_type&, size_type) [with _Tp = onnxruntime::MLFloat16]’ at /usr/include/c++/13/bits/alloc_traits.h:482:28,
    inlined from ‘std::_Vector_base<_Tp, _Alloc>::pointer std::_Vector_base<_Tp, _Alloc>::_M_allocate(std::size_t) [with _Tp = onnxruntime::MLFloat16; _Alloc = std::allocator<onnxruntime::MLFloat16>]’ at /usr/include/c++/13/bits/stl_vector.h:381:33,
    inlined from ‘void std::_Vector_base<_Tp, _Alloc>::_M_create_storage(std::size_t) [with _Tp = onnxruntime::MLFloat16; _Alloc = std::allocator<onnxruntime::MLFloat16>]’ at /usr/include/c++/13/bits/stl_vector.h:398:44,
    inlined from ‘std::_Vector_base<_Tp, _Alloc>::_Vector_base(std::size_t, const allocator_type&) [with _Tp = onnxruntime::MLFloat16; _Alloc = std::allocator<onnxruntime::MLFloat16>]’ at /usr/include/c++/13/bits/stl_vector.h:335:26,
    inlined from ‘std::vector<_Tp, _Alloc>::vector(size_type, const allocator_type&) [with _Tp = onnxruntime::MLFloat16; _Alloc = std::allocator<onnxruntime::MLFloat16>]’ at /usr/include/c++/13/bits/stl_vector.h:557:47,
    inlined from ‘virtual void onnxruntime::test::TopKOperator_NthElementHalf_Test::TestBody()’ at /foo/onnxruntime/onnxruntime/test/providers/cpu/math/topk_op_test.cc:656:41:
/usr/include/c++/13/bits/new_allocator.h:151:55: note: at offset [0, 6] into object of size 8 allocated by ‘operator new’
  151 |         return static_cast<_Tp*>(_GLIBCXX_OPERATOR_NEW(__n * sizeof(_Tp)));
      |                                                       ^
In function ‘void _mm_store_si128(__m128i*, __m128i)’,
    inlined from ‘void Eigen::internal::pstore(Scalar*, const Packet&) [with Scalar = Eigen::half; Packet = eigen_packet_wrapper<__vector(2) long long int, 2>]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/arch/AVX/PacketMath.h:2238:18,
    inlined from ‘void Eigen::internal::pstoret(Scalar*, const Packet&) [with Scalar = Eigen::half; Packet = eigen_packet_wrapper<__vector(2) long long int, 2>; int Alignment = 16]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/GenericPacketMath.h:1357:11,
    inlined from ‘void Eigen::internal::assign_op<DstScalar, SrcScalar>::assignPacket(DstScalar*, const Packet&) const [with int Alignment = 16; Packet = Eigen::internal::eigen_packet_wrapper<__vector(2) long long int, 2>; DstScalar = Eigen::half; SrcScalar = Eigen::half]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/functors/AssignmentFunctors.h:30:52,
    inlined from ‘void Eigen::internal::generic_dense_assignment_kernel<DstEvaluatorTypeT, SrcEvaluatorTypeT, Functor, Version>::assignPacket(Eigen::Index) [with int StoreMode = 16; int LoadMode = 0; Packet = Eigen::internal::eigen_packet_wrapper<__vector(2) long long int, 2>; DstEvaluatorTypeT = Eigen::internal::evaluator<Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> > >; SrcEvaluatorTypeT = Eigen::internal::evaluator<Eigen::CwiseUnaryOp<Eigen::internal::core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > > >; Functor = Eigen::internal::assign_op<Eigen::half, Eigen::half>; int Version = 0]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:609:47,
    inlined from ‘static constexpr void Eigen::internal::dense_assignment_loop<Kernel, 3, 0>::run(Kernel&) [with Kernel = Eigen::internal::generic_dense_assignment_kernel<Eigen::internal::evaluator<Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> > >, Eigen::internal::evaluator<Eigen::CwiseUnaryOp<Eigen::internal::core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > > >, Eigen::internal::assign_op<Eigen::half, Eigen::half>, 0>]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:399:75,
    inlined from ‘constexpr void Eigen::internal::call_dense_assignment_loop(DstXprType&, const SrcXprType&, const Functor&) [with DstXprType = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >; SrcXprType = Eigen::CwiseUnaryOp<core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >; Functor = assign_op<Eigen::half, Eigen::half>]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:705:37,
    inlined from ‘static void Eigen::internal::Assignment<DstXprType, SrcXprType, Functor, Eigen::internal::Dense2Dense, Weak>::run(DstXprType&, const SrcXprType&, const Functor&) [with DstXprType = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >; SrcXprType = Eigen::CwiseUnaryOp<Eigen::internal::core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >; Functor = Eigen::internal::assign_op<Eigen::half, Eigen::half>; Weak = void]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:855:31,
    inlined from ‘constexpr void Eigen::internal::call_assignment_no_alias(Dst&, const Src&, const Func&) [with Dst = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >; Src = Eigen::CwiseUnaryOp<core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >; Func = assign_op<Eigen::half, Eigen::half>]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:797:51,
    inlined from ‘void Eigen::internal::call_assignment(Dst&, const Src&, const Func&, std::enable_if_t<(! evaluator_assume_aliasing<Src>::value), void*>) [with Dst = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >; Src = Eigen::CwiseUnaryOp<core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >; Func = assign_op<Eigen::half, Eigen::half>]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:768:27,
    inlined from ‘void Eigen::internal::call_assignment(Dst&, const Src&) [with Dst = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >; Src = Eigen::CwiseUnaryOp<core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/AssignEvaluator.h:750:18,
    inlined from ‘Derived& Eigen::MatrixBase<Derived>::operator=(const Eigen::DenseBase<OtherDerived>&) [with OtherDerived = Eigen::CwiseUnaryOp<Eigen::internal::core_cast_op<float, Eigen::half>, const Eigen::Map<const Eigen::Matrix<float, -1, 1>, 0, Eigen::Stride<0, 0> > >; Derived = Eigen::Map<Eigen::Matrix<Eigen::half, -1, 1, 0, -1, 1>, 0, Eigen::Stride<0, 0> >]’ at /foo/onnxruntime/build/Release/_deps/eigen-src/Eigen/src/Core/Assign.h:59:28,
    inlined from ‘void onnxruntime::test::ConvertFloatToMLFloat16(const float*, onnxruntime::MLFloat16*, size_t)’ at /foo/onnxruntime/onnxruntime/test/providers/provider_test_utils.h:15:56,
    inlined from ‘virtual void onnxruntime::test::TopKOperator_NthElementHalf_Test::TestBody()’ at /foo/onnxruntime/onnxruntime/test/providers/cpu/math/topk_op_test.cc:657:26:
/usr/lib/gcc/x86_64-linux-gnu/13/include/emmintrin.h:736:8: error: array subscript ‘__m128i[0]’ is partly outside array bounds of ‘unsigned char [12]’ [-Werror=array-bounds=]
  736 |   *__P = __B;
      |   ~~~~~^~~~~
In member function ‘_Tp* std::__new_allocator<_Tp>::allocate(size_type, const void*) [with _Tp = onnxruntime::MLFloat16]’,
    inlined from ‘static _Tp* std::allocator_traits<std::allocator<_Tp1> >::allocate(allocator_type&, size_type) [with _Tp = onnxruntime::MLFloat16]’ at /usr/include/c++/13/bits/alloc_traits.h:482:28,
    inlined from ‘std::_Vector_base<_Tp, _Alloc>::pointer std::_Vector_base<_Tp, _Alloc>::_M_allocate(std::size_t) [with _Tp = onnxruntime::MLFloat16; _Alloc = std::allocator<onnxruntime::MLFloat16>]’ at /usr/include/c++/13/bits/stl_vector.h:381:33,
    inlined from ‘void std::_Vector_base<_Tp, _Alloc>::_M_create_storage(std::size_t) [with _Tp = onnxruntime::MLFloat16; _Alloc = std::allocator<onnxruntime::MLFloat16>]’ at /usr/include/c++/13/bits/stl_vector.h:398:44,
    inlined from ‘std::_Vector_base<_Tp, _Alloc>::_Vector_base(std::size_t, const allocator_type&) [with _Tp = onnxruntime::MLFloat16; _Alloc = std::allocator<onnxruntime::MLFloat16>]’ at /usr/include/c++/13/bits/stl_vector.h:335:26,
    inlined from ‘std::vector<_Tp, _Alloc>::vector(size_type, const allocator_type&) [with _Tp = onnxruntime::MLFloat16; _Alloc = std::allocator<onnxruntime::MLFloat16>]’ at /usr/include/c++/13/bits/stl_vector.h:557:47,
    inlined from ‘virtual void onnxruntime::test::TopKOperator_NthElementHalf_Test::TestBody()’ at /foo/onnxruntime/onnxruntime/test/providers/cpu/math/topk_op_test.cc:655:38:
/usr/include/c++/13/bits/new_allocator.h:151:55: note: at offset [0, 10] into object of size 12 allocated by ‘operator new’
  151 |         return static_cast<_Tp*>(_GLIBCXX_OPERATOR_NEW(__n * sizeof(_Tp)));
      |      

Visual Studio Version

No response

GCC / Compiler Version

13.3.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    buildbuild issues; typically submitted using template

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions