Skip to content
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

arm64 (neon64) bool: usage of batch type with unsupported type #2733

Open
drew-parsons opened this issue Oct 3, 2023 · 1 comment
Open

Comments

@drew-parsons
Copy link
Contributor

drew-parsons commented Oct 3, 2023

xsimd 10.0.0 exposed an error from xtensor (0.24.7) on arm64 architecture (neon64). The error was reported at xtensor-stack/xsimd#945 :

127s [ 26%] Building CXX object CMakeFiles/test_xtensor_lib.dir/test_xoptional_assembly.cpp.o
127s /usr/bin/g++ -DXSIMD_ENABLE_XTL_COMPLEX -DXTENSOR_USE_XSIMD  -DXSIMD_ENABLE_XTL_COMPLEX=1 -march=native -std=c++14 -Wunused-parameter -Wextra -Wreorder -Wconversion -Wno-sign-conversion  -Wold-style-cast -Wunused-variable -ftemplate-backtrace-limit=0 -O3 -DNDEBUG -MD -MT CMakeFiles/test_xtensor_lib.dir/test_xoptional_assembly.cpp.o -MF CMakeFiles/test_xtensor_lib.dir/test_xoptional_assembly.cpp.o.d -o CMakeFiles/test_xtensor_lib.dir/test_xoptional_assembly.cpp.o -c /tmp/autopkgtest-lxc.1p570fd4/downtmp/autopkgtest_tmp/test_xoptional_assembly.cpp
131s In file included from /usr/include/xsimd/types/xsimd_batch.hpp:493,
131s                  from /usr/include/xsimd/xsimd.hpp:61,
131s                  from /usr/include/xtensor/xtensor_config.hpp:61,
131s                  from /usr/include/xtensor/xexception.hpp:24,
131s                  from /usr/include/xtensor/xstorage.hpp:21,
131s                  from /usr/include/xtensor/xbuffer_adaptor.hpp:21,
131s                  from /usr/include/xtensor/xarray.hpp:19,
131s                  from /tmp/autopkgtest-lxc.1p570fd4/downtmp/autopkgtest_tmp/test_xoperation.cpp:13:
131s /usr/include/xsimd/types/xsimd_traits.hpp: In instantiation of ‘struct xsimd::detail::static_check_supported_config_emitter<bool, xsimd::neon64>’:
131s /usr/include/xsimd/types/xsimd_traits.hpp:84:19:   required from ‘void xsimd::detail::static_check_supported_config() [with T = bool; A = xsimd::neon64]’
131s /usr/include/xsimd/types/xsimd_api.hpp:437:55:   required from ‘xsimd::simd_return_type<From, To, A> xsimd::broadcast_as(From) [with To = int; A = neon64; From = bool; simd_return_type<From, To, A> = batch_bool<int, neon64>]’
131s /usr/include/xtensor/xscalar.hpp:952:53:   required from ‘xt_simd::simd_return_type<typename xt::xcontainer_inner_types<xt::xscalar<CT> >::value_type, requested_type> xt::xscalar<CT>::load_simd(size_type) const [with align = xt::inner_aligned_mode; requested_type = int; long unsigned int N = 4; CT = bool; xt_simd::simd_return_type<typename xt::xcontainer_inner_types<xt::xscalar<CT> >::value_type, requested_type> = xsimd::batch_bool<int, xsimd::neon64>; typename xt::xcontainer_inner_types<xt::xscalar<CT> >::value_type = bool; size_type = long unsigned int]’
...
131s /usr/include/xtensor/xarray.hpp:510:30:   required from ‘xt::xarray_container<EC, L, SC, Tag>::xarray_container(const xt::xexpression<E>&) [with E = xt::xfunction<xt::detail::logical_and, const xt::xarray_container<xt::uvector<bool, xsimd::aligned_allocator<bool, 16> >, xt::layout_type::row_major, xt::svector<long unsigned int, 4, std::allocator<long unsigned int>, true>, xt::xtensor_expression_tag>&, xt::xscalar<bool> >; EC = xt::uvector<bool, xsimd::aligned_allocator<bool, 16> >; xt::layout_type L = xt::layout_type::row_major; SC = xt::svector<long unsigned int, 4, std::allocator<long unsigned int>, true>; Tag = xt::xtensor_expression_tag]’
131s /tmp/autopkgtest-lxc.1p570fd4/downtmp/autopkgtest_tmp/test_xoperation.cpp:378:28:   required from ‘void xt::DOCTEST_ANON_SUITE_131::DOCTEST_ANON_TMP_150() [with TypeParam = xt::xarray_container<xt::uvector<double, xsimd::aligned_allocator<double, 16> >, xt::layout_type::row_major, xt::svector<long unsigned int, 4, std::allocator<long unsigned int>, true>, xt::xtensor_expression_tag>]’
131s /tmp/autopkgtest-lxc.1p570fd4/downtmp/autopkgtest_tmp/test_xoperation.cpp:372:9:   required from ‘xt::DOCTEST_ANON_SUITE_131::{anonymous}::DOCTEST_ANON_TMP_150ITERATOR<std::tuple<_El0, _El ...> >::DOCTEST_ANON_TMP_150ITERATOR(const char*, unsigned int, int) [with Type = xt::xarray_container<xt::uvector<double, xsimd::aligned_allocator<double, 16> >, xt::layout_type::row_major, xt::svector<long unsigned int, 4, std::allocator<long unsigned int>, true>, xt::xtensor_expression_tag>; Rest = {xt::xtensor_container<xt::uvector<double, xsimd::aligned_allocator<double, 16> >, 2, xt::layout_type::row_major, xt::xtensor_expression_tag>}]’
131s /tmp/autopkgtest-lxc.1p570fd4/downtmp/autopkgtest_tmp/test_xoperation.cpp:372:9:   required from here
131s /usr/include/xsimd/types/xsimd_traits.hpp:64:43: error: static assertion failed: usage of batch type with unsupported type
131s    64 |             static_assert(!A::supported() || xsimd::has_simd_register<T, A>::value,
131s       |                           ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
131s /usr/include/xsimd/types/xsimd_traits.hpp:64:43: note: ‘((! xsimd::neon64::supported()) || ((bool)std::integral_constant<bool, false>::value))’ evaluates to false

Apparently neon64 does not support batch bool (https://github.com/xtensor-stack/xsimd/blob/10.0.0/include/xsimd/types/xsimd_neon64_register.hpp)

A minimal code reproducing the error with xtensor alone (on raspberry pi) was identified as

#include <xtensor/xtensor.hpp>

int main()
{
    {
        xt::xtensor<double, 1> a{0., 1.};
        xt::xtensor<double, 1> b = a && 0.;
    }

    {
        xt::xtensor<bool, 1> a{false, true};
        //xt::xtensor<bool, 1> b = a && false;
    }

    return 0;
}
@drew-parsons
Copy link
Contributor Author

armhf is also affected, apparently the same problem from neon, https://ci.debian.net/data/autopkgtest/unstable/armhf/x/xtensor/38875115/log.gz

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

No branches or pull requests

2 participants