C++ wrappers for SIMD intrinsics and parallelized, optimized mathematical functions (SSE, AVX, NEON, AVX512)

Overview

xsimd

Appveyor Azure Documentation Status Join the Gitter Chat

C++ wrappers for SIMD intrinsics

Introduction

SIMD (Single Instruction, Multiple Data) is a feature of microprocessors that has been available for many years. SIMD instructions perform a single operation on a batch of values at once, and thus provide a way to significantly accelerate code execution. However, these instructions differ between microprocessor vendors and compilers.

xsimd provides a unified means for using these features for library authors. Namely, it enables manipulation of batches of numbers with the same arithmetic operators as for single values. It also provides accelerated implementation of common mathematical functions operating on batches.

You can find out more about this implementation of C++ wrappers for SIMD intrinsics at the The C++ Scientist. The mathematical functions are a lightweight implementation of the algorithms used in boost.SIMD.

xsimd requires a C++11 compliant compiler. The following C++ compilers are supported:

Compiler Version
Microsoft Visual Studio MSVC 2015 update 2 and above
g++ 4.9 and above
clang 4.0 and above

The following SIMD instruction set extensions are supported:

Architecture Instruction set extensions
x86 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, FMA3, AVX2
x86 AVX512 (gcc7 and higher)
x86 AMD same as above + SSE4A, FMA4, XOP
ARM ARMv7, ARMv8

Installation

Install from conda-forge

A package for xsimd is available on the mamba (or conda) package manager.

mamba install -c conda-forge xsimd

Install with Spack

A package for xsimd is available on the Spack package manager.

spack install xsimd
spack load xsimd

Install from sources

You can directly install it from the sources with cmake:

cmake -D CMAKE_INSTALL_PREFIX=your_install_prefix
make install

Documentation

To get started with using xsimd, check out the full documentation

http://xsimd.readthedocs.io/

Usage

Explicit use of an instruction set extension

Here is an example that computes the mean of two sets of 4 double floating point values, assuming AVX extension is supported:

#include <iostream>
#include "xsimd/xsimd.hpp"

namespace xs = xsimd;

int main(int argc, char* argv[])
{
    xs::batch<double, 4> a(1.5, 2.5, 3.5, 4.5);
    xs::batch<double, 4> b(2.5, 3.5, 4.5, 5.5);
    auto mean = (a + b) / 2;
    std::cout << mean << std::endl;
    return 0;
}

Do not forget to enable AVX extension when building the example. With gcc or clang, this is done with the -march=native flag, on MSVC you have to pass the /arch:AVX option.

This example outputs:

(2.0, 3.0, 4.0, 5.0)

Auto detection of the instruction set extension to be used

The same computation operating on vectors and using the most performant instruction set available:

#include <cstddef>
#include <vector>
#include "xsimd/xsimd.hpp"

namespace xs = xsimd;
using vector_type = std::vector<double, xsimd::aligned_allocator<double, XSIMD_DEFAULT_ALIGNMENT>>;

void mean(const vector_type& a, const vector_type& b, vector_type& res)
{
    std::size_t size = a.size();
    constexpr std::size_t simd_size = xsimd::simd_type<double>::size;
    std::size_t vec_size = size - size % simd_size;

    for(std::size_t i = 0; i < vec_size; i += simd_size)
    {
        auto ba = xs::load_aligned(&a[i]);
        auto bb = xs::load_aligned(&b[i]);
        auto bres = (ba + bb) / 2.;
        bres.store_aligned(&res[i]);
    }
    for(std::size_t i = vec_size; i < size; ++i)
    {
        res[i] = (a[i] + b[i]) / 2.;
    }
}

We also implement STL algorithms to work optimally on batches. Using xsimd::transform the loop from the example becomes:

#include <cstddef>
#include <vector>
#include "xsimd/xsimd.hpp"
#include "xsimd/stl/algorithms.hpp"

namespace xs = xsimd;
using vector_type = std::vector<double, xsimd::aligned_allocator<double, XSIMD_DEFAULT_ALIGNMENT>>;

void mean(const vector_type& a, const vector_type& b, vector_type& res)
{
    xsimd::transform(a.begin(), a.end(), b.begin(), res.begin(),
                     [](const auto& x, const auto& y) { (x + y) / 2.; });
}

Building and Running the Tests

Building the tests requires the GTest testing framework and cmake.

gtest and cmake are available as a packages for most linux distributions. Besides, they can also be installed with the conda package manager (even on windows):

conda install -c conda-forge gtest cmake

Once gtest and cmake are installed, you can build and run the tests:

mkdir build
cd build
cmake ../ -DBUILD_TESTS=ON
make xtest

In the context of continuous integration with Travis CI, tests are run in a conda environment, which can be activated with

cd test
conda env create -f ./test-environment.yml
source activate test-xsimd
cd ..
cmake . -DBUILD_TESTS=ON
make xtest

Building the HTML Documentation

xsimd's documentation is built with three tools

While doxygen must be installed separately, you can install breathe by typing

pip install breathe

Breathe can also be installed with conda

conda install -c conda-forge breathe

Finally, build the documentation with

make html

from the docs subdirectory.

License

We use a shared copyright model that enables all contributors to maintain the copyright on their contributions.

This software is licensed under the BSD-3-Clause license. See the LICENSE file for details.

Issues
  • single value batch initialisation failing for double on avx

    single value batch initialisation failing for double on avx

    Screenshot (133)

    It initializes the first value with all other garbage. The broadcast is failing. https://xsimd.readthedocs.io/en/latest/api/xsimd_batch.html#_CPPv4N5xsimd5batch5batchE1T

    opened by prateekgargX 30
  • Header inclusion fails on AVX512

    Header inclusion fails on AVX512

    Compile the following program

    #include <xsimd/xsimd.hpp>
    

    with command

    /usr/bin/c++  -DXTENSOR_USE_XSIMD -isystem /where-xsimd-lives/include -g   -Wall -Wconversion -Wsign-compare -Wno-sign-conversion -fdiagnostics-color -march=skylake-avx512 -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -mfma -mbmi2 -mavx2 -mavx512f -mavx512vl -mavx512cd -mavx512dq -mavx512bw -mno-sse4a -mno-xop -mno-fma4 -mno-avx512pf -mno-avx512er -mno-avx512ifma -mno-avx512vbmi -std=c++17 -o a.o -c a.cc
    

    fails with

    In file included from /usr/lib/gcc/x86_64-linux-gnu/8/include/immintrin.h:55,
                     from /usr/lib/gcc/x86_64-linux-gnu/8/include/x86intrin.h:48,
                     from /where-xsimd-lives/g/xsimd/config/xsimd_include.hpp:17,
                     from /where-xsimd-lives/g/xsimd/types/xsimd_types_include.hpp:12,
                     from /where-xsimd-lives/g/xsimd/types/xsimd_traits.hpp:15,
                     from /where-xsimd-lives/g/xsimd/xsimd.hpp:14,
                     from a.cc:1:
    /where-xsimd-lives/g/xsimd/types/xsimd_avx512_int16.hpp: In instantiation of 'static xsimd::detail::avx512_int16_batch_kernel<T>::batch_type xsimd::detail::avx512_int16_batch_kernel<T>::select(const batch_bool_type&, const batch_type&, const batch_type&) [with T = short int; xsimd::detail::avx512_int16_batch_kernel<T>::batch_type = xsimd::batch<short int, 32>; xsimd::detail::avx512_int16_batch_kernel<T>::batch_bool_type = xsimd::batch_bool<short int, 32>]':
    /where-xsimd-lives/g/xsimd/types/xsimd_base.hpp:1623:30:   required from 'xsimd::batch_type_t<X> xsimd::select(const typename xsimd::simd_batch_traits<X>::batch_bool_type&, const xsimd::simd_base<X>&, const xsimd::simd_base<X>&) [with X = xsimd::batch<short int, 32>; xsimd::batch_type_t<X> = xsimd::batch<short int, 32>; typename xsimd::simd_batch_traits<X>::batch_bool_type = xsimd::batch_bool<short int, 32>]'
    /where-xsimd-lives/g/xsimd/types/xsimd_avx512_conversion.hpp:45:5:   required from here
    /where-xsimd-lives/g/xsimd/types/xsimd_avx512_int16.hpp:313:24: error: can't convert value to a vector
                     return _mm512_mask_blend_epi16(cond, b, a);
                            ^~~~~~~~~~~~~~~~~~~~~~~
    /where-xsimd-lives/g/xsimd/types/xsimd_avx512_int16.hpp:313:24: error: can't convert value to a vector
                     return _mm512_mask_blend_epi16(cond, b, a);
                            ^~~~~~~~~~~~~~~~~~~~~~~
    
    
    opened by zhihaoy 25
  • AVX512 compilation error on MSVC 19.16.27035.0 (VS 2017)

    AVX512 compilation error on MSVC 19.16.27035.0 (VS 2017)

    While trying to compile code using xsimd::batch<uint32_t, 16> with AVX512 enabled, I got these errors on AppVeyor: https://ci.appveyor.com/project/pitrou/arrow/builds/37935012/job/5k8hyx5vm69f5bav#L1169

    c:\projects\arrow\cpp\build\xsimd_ep\src\xsimd_ep-install\include\xsimd\types\xsimd_sse_conversion.hpp(90): error C3861: '_mm_cvtepu32_ps': identifier not found
    c:\projects\arrow\cpp\build\xsimd_ep\src\xsimd_ep-install\include\xsimd\types\xsimd_avx_conversion.hpp(126): error C3861: '_mm256_cvtepu32_ps': identifier not found
    c:\projects\arrow\cpp\build\xsimd_ep\src\xsimd_ep-install\include\xsimd\types\xsimd_avx512_double.hpp(452): error C2440: 'type cast': cannot convert from '__m512d' to '__m512i'
    c:\projects\arrow\cpp\build\xsimd_ep\src\xsimd_ep-install\include\xsimd\types\xsimd_avx512_double.hpp(452): note: No constructor could take the source type, or constructor overload resolution was ambiguous
    c:\projects\arrow\cpp\build\xsimd_ep\src\xsimd_ep-install\include\xsimd\types\xsimd_avx512_double.hpp(452): error C2660: '_mm512_maskz_and_epi64': function does not take 2 arguments
    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\zmmintrin.h(1121): note: see declaration of '_mm512_maskz_and_epi64'
    [etc.]
    

    While generated, the code which is being compiled is really simple: https://github.com/pitrou/arrow/blob/xsimd-bpacking/cpp/src/arrow/util/bpacking_simd512_generated.h

    opened by pitrou 20
  • Tests build failures on armv7hl, ppc64le, s390x

    Tests build failures on armv7hl, ppc64le, s390x

    Hey, I'm trying to package xsimd for Fedora and I have weird failures on armv7hl, ppc64le and s390x architectures.

    I run basically:

    cmake -DBUILD_TESTS=ON .
    make
    make install
    make xtest
    

    ppc64le says: unrecognized command line option '-march=native'

    armv7hl and s390x have more failures:

    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:40:58: error: 'XSIMD_DEFAULT_ALIGNMENT' was not declared in this scope; did you mean 'XSIMD_DEFAULT_ALLOCATOR'?
       40 |     std::vector<double, xsimd::aligned_allocator<double, XSIMD_DEFAULT_ALIGNMENT>> aa(93, 123), ba(93, 123), ca(93);
          |                                                          ^~~~~~~~~~~~~~~~~~~~~~~
          |                                                          XSIMD_DEFAULT_ALLOCATOR
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:40:58: error: template argument 2 is invalid
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:40:81: error: template argument 2 is invalid
       40 |     std::vector<double, xsimd::aligned_allocator<double, XSIMD_DEFAULT_ALIGNMENT>> aa(93, 123), ba(93, 123), ca(93);
          |                                                                                 ^~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:40:94: error: expression list treated as compound expression in initializer [-fpermissive]
       40 |     std::vector<double, xsimd::aligned_allocator<double, XSIMD_DEFAULT_ALIGNMENT>> aa(93, 123), ba(93, 123), ca(93);
          |                                                                                              ^
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:40:87: warning: left operand of comma operator has no effect [-Wunused-value]
       40 |     std::vector<double, xsimd::aligned_allocator<double, XSIMD_DEFAULT_ALIGNMENT>> aa(93, 123), ba(93, 123), ca(93);
          |                                                                                       ^~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:40:107: error: expression list treated as compound expression in initializer [-fpermissive]
       40 |     std::vector<double, xsimd::aligned_allocator<double, XSIMD_DEFAULT_ALIGNMENT>> aa(93, 123), ba(93, 123), ca(93);
          |                                                                                                           ^
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:40:100: warning: left operand of comma operator has no effect [-Wunused-value]
       40 |     std::vector<double, xsimd::aligned_allocator<double, XSIMD_DEFAULT_ALIGNMENT>> aa(93, 123), ba(93, 123), ca(93);
          |                                                                                                    ^~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:50:25: error: request for member 'begin' in 'aa', which is of non-class type 'int'
       50 |     xsimd::transform(aa.begin(), aa.end(), ba.begin(), c.begin(),
          |                         ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:50:37: error: request for member 'end' in 'aa', which is of non-class type 'int'
       50 |     xsimd::transform(aa.begin(), aa.end(), ba.begin(), c.begin(),
          |                                     ^~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:50:47: error: request for member 'begin' in 'ba', which is of non-class type 'int'
       50 |     xsimd::transform(aa.begin(), aa.end(), ba.begin(), c.begin(),
          |                                               ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:55:25: error: request for member 'begin' in 'aa', which is of non-class type 'int'
       55 |     xsimd::transform(aa.begin(), aa.end(), b.begin(), c.begin(),
          |                         ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:55:37: error: request for member 'end' in 'aa', which is of non-class type 'int'
       55 |     xsimd::transform(aa.begin(), aa.end(), b.begin(), c.begin(),
          |                                     ^~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:60:45: error: request for member 'begin' in 'ba', which is of non-class type 'int'
       60 |     xsimd::transform(a.begin(), a.end(), ba.begin(), c.begin(),
          |                                             ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:65:25: error: request for member 'begin' in 'aa', which is of non-class type 'int'
       65 |     xsimd::transform(aa.begin(), aa.end(), ba.begin(), ca.begin(),
          |                         ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:65:37: error: request for member 'end' in 'aa', which is of non-class type 'int'
       65 |     xsimd::transform(aa.begin(), aa.end(), ba.begin(), ca.begin(),
          |                                     ^~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:65:47: error: request for member 'begin' in 'ba', which is of non-class type 'int'
       65 |     xsimd::transform(aa.begin(), aa.end(), ba.begin(), ca.begin(),
          |                                               ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:65:59: error: request for member 'begin' in 'ca', which is of non-class type 'int'
       65 |     xsimd::transform(aa.begin(), aa.end(), ba.begin(), ca.begin(),
          |                                                           ^~~~~
    In file included from /usr/include/gtest/gtest.h:59,
                     from /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:15:
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:67:65: error: request for member 'begin' in 'ca', which is of non-class type 'int'
       67 |     EXPECT_TRUE(std::equal(expected.begin(), expected.end(), ca.begin()) && expected.size() == ca.size());
          |                                                                 ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:67:99: error: request for member 'size' in 'ca', which is of non-class type 'int'
       67 |     EXPECT_TRUE(std::equal(expected.begin(), expected.end(), ca.begin()) && expected.size() == ca.size());
          |                                                                                                   ^~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:68:18: error: request for member 'begin' in 'ca', which is of non-class type 'int'
       68 |     std::fill(ca.begin(), ca.end(), -1); // erase
          |                  ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:68:30: error: request for member 'end' in 'ca', which is of non-class type 'int'
       68 |     std::fill(ca.begin(), ca.end(), -1); // erase
          |                              ^~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:70:25: error: request for member 'begin' in 'aa', which is of non-class type 'int'
       70 |     xsimd::transform(aa.begin(), aa.end(), b.begin(), ca.begin(),
          |                         ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:70:37: error: request for member 'end' in 'aa', which is of non-class type 'int'
       70 |     xsimd::transform(aa.begin(), aa.end(), b.begin(), ca.begin(),
          |                                     ^~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:70:58: error: request for member 'begin' in 'ca', which is of non-class type 'int'
       70 |     xsimd::transform(aa.begin(), aa.end(), b.begin(), ca.begin(),
          |                                                          ^~~~~
    In file included from /usr/include/gtest/gtest.h:59,
                     from /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:15:
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:72:65: error: request for member 'begin' in 'ca', which is of non-class type 'int'
       72 |     EXPECT_TRUE(std::equal(expected.begin(), expected.end(), ca.begin()) && expected.size() == ca.size());
          |                                                                 ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:72:99: error: request for member 'size' in 'ca', which is of non-class type 'int'
       72 |     EXPECT_TRUE(std::equal(expected.begin(), expected.end(), ca.begin()) && expected.size() == ca.size());
          |                                                                                                   ^~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:73:18: error: request for member 'begin' in 'ca', which is of non-class type 'int'
       73 |     std::fill(ca.begin(), ca.end(), -1); // erase
          |                  ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:73:30: error: request for member 'end' in 'ca', which is of non-class type 'int'
       73 |     std::fill(ca.begin(), ca.end(), -1); // erase
          |                              ^~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:75:45: error: request for member 'begin' in 'ba', which is of non-class type 'int'
       75 |     xsimd::transform(a.begin(), a.end(), ba.begin(), ca.begin(),
          |                                             ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:75:57: error: request for member 'begin' in 'ca', which is of non-class type 'int'
       75 |     xsimd::transform(a.begin(), a.end(), ba.begin(), ca.begin(),
          |                                                         ^~~~~
    In file included from /usr/include/gtest/gtest.h:59,
                     from /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:15:
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:77:65: error: request for member 'begin' in 'ca', which is of non-class type 'int'
       77 |     EXPECT_TRUE(std::equal(expected.begin(), expected.end(), ca.begin()) && expected.size() == ca.size());
          |                                                                 ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:77:99: error: request for member 'size' in 'ca', which is of non-class type 'int'
       77 |     EXPECT_TRUE(std::equal(expected.begin(), expected.end(), ca.begin()) && expected.size() == ca.size());
          |                                                                                                   ^~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:78:18: error: request for member 'begin' in 'ca', which is of non-class type 'int'
       78 |     std::fill(ca.begin(), ca.end(), -1); // erase
          |                  ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:78:30: error: request for member 'end' in 'ca', which is of non-class type 'int'
       78 |     std::fill(ca.begin(), ca.end(), -1); // erase
          |                              ^~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp: In member function 'virtual void xsimd_unary_transform_Test::TestBody()':
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:86:58: error: 'XSIMD_DEFAULT_ALIGNMENT' was not declared in this scope; did you mean 'XSIMD_DEFAULT_ALLOCATOR'?
       86 |     std::vector<double, xsimd::aligned_allocator<double, XSIMD_DEFAULT_ALIGNMENT>> aa(93, 123), ca(93);
          |                                                          ^~~~~~~~~~~~~~~~~~~~~~~
          |                                                          XSIMD_DEFAULT_ALLOCATOR
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:86:58: error: template argument 2 is invalid
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:86:81: error: template argument 2 is invalid
       86 |     std::vector<double, xsimd::aligned_allocator<double, XSIMD_DEFAULT_ALIGNMENT>> aa(93, 123), ca(93);
          |                                                                                 ^~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:86:94: error: expression list treated as compound expression in initializer [-fpermissive]
       86 |     std::vector<double, xsimd::aligned_allocator<double, XSIMD_DEFAULT_ALIGNMENT>> aa(93, 123), ca(93);
          |                                                                                              ^
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:86:87: warning: left operand of comma operator has no effect [-Wunused-value]
       86 |     std::vector<double, xsimd::aligned_allocator<double, XSIMD_DEFAULT_ALIGNMENT>> aa(93, 123), ca(93);
          |                                                                                       ^~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:96:25: error: request for member 'begin' in 'aa', which is of non-class type 'int'
       96 |     xsimd::transform(aa.begin(), aa.end(), c.begin(),
          |                         ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:96:37: error: request for member 'end' in 'aa', which is of non-class type 'int'
       96 |     xsimd::transform(aa.begin(), aa.end(), c.begin(),
          |                                     ^~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:101:45: error: request for member 'begin' in 'ca', which is of non-class type 'int'
      101 |     xsimd::transform(a.begin(), a.end(), ca.begin(),
          |                                             ^~~~~
    In file included from /usr/include/gtest/gtest.h:59,
                     from /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:15:
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:103:65: error: request for member 'begin' in 'ca', which is of non-class type 'int'
      103 |     EXPECT_TRUE(std::equal(expected.begin(), expected.end(), ca.begin()) && expected.size() == ca.size());
          |                                                                 ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:103:99: error: request for member 'size' in 'ca', which is of non-class type 'int'
      103 |     EXPECT_TRUE(std::equal(expected.begin(), expected.end(), ca.begin()) && expected.size() == ca.size());
          |                                                                                                   ^~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:104:18: error: request for member 'begin' in 'ca', which is of non-class type 'int'
      104 |     std::fill(ca.begin(), ca.end(), -1); // erase
          |                  ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:104:30: error: request for member 'end' in 'ca', which is of non-class type 'int'
      104 |     std::fill(ca.begin(), ca.end(), -1); // erase
          |                              ^~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:106:25: error: request for member 'begin' in 'aa', which is of non-class type 'int'
      106 |     xsimd::transform(aa.begin(), aa.end(), ca.begin(),
          |                         ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:106:37: error: request for member 'end' in 'aa', which is of non-class type 'int'
      106 |     xsimd::transform(aa.begin(), aa.end(), ca.begin(),
          |                                     ^~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:106:47: error: request for member 'begin' in 'ca', which is of non-class type 'int'
      106 |     xsimd::transform(aa.begin(), aa.end(), ca.begin(),
          |                                               ^~~~~
    In file included from /usr/include/gtest/gtest.h:59,
                     from /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:15:
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:108:65: error: request for member 'begin' in 'ca', which is of non-class type 'int'
      108 |     EXPECT_TRUE(std::equal(expected.begin(), expected.end(), ca.begin()) && expected.size() == ca.size());
          |                                                                 ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:108:99: error: request for member 'size' in 'ca', which is of non-class type 'int'
      108 |     EXPECT_TRUE(std::equal(expected.begin(), expected.end(), ca.begin()) && expected.size() == ca.size());
          |                                                                                                   ^~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:109:18: error: request for member 'begin' in 'ca', which is of non-class type 'int'
      109 |     std::fill(ca.begin(), ca.end(), -1); // erase
          |                  ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:109:30: error: request for member 'end' in 'ca', which is of non-class type 'int'
      109 |     std::fill(ca.begin(), ca.end(), -1); // erase
          |                              ^~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp: At global scope:
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:115:80: error: 'XSIMD_DEFAULT_ALIGNMENT' was not declared in this scope; did you mean 'XSIMD_DEFAULT_ALLOCATOR'?
      115 |     using aligned_vec_t = std::vector<double, xsimd::aligned_allocator<double, XSIMD_DEFAULT_ALIGNMENT>>;
          |                                                                                ^~~~~~~~~~~~~~~~~~~~~~~
          |                                                                                XSIMD_DEFAULT_ALLOCATOR
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:115:80: error: template argument 2 is invalid
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:115:103: error: template argument 2 is invalid
      115 |     using aligned_vec_t = std::vector<double, xsimd::aligned_allocator<double, XSIMD_DEFAULT_ALIGNMENT>>;
          |                                                                                                       ^~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:120:5: error: 'aligned_vec_t' does not name a type
      120 |     aligned_vec_t vec = aligned_vec_t(num_elements, 123.);
          |     ^~~~~~~~~~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:121:5: error: 'aligned_vec_t' does not name a type
      121 |     aligned_vec_t small_vec = aligned_vec_t(small_num, 42.);
          |     ^~~~~~~~~~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp: In member function 'virtual void xsimd_reduce_unaligned_begin_unaligned_end_Test::TestBody()':
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:136:34: error: 'vec' was not declared in this scope
      136 |     auto const begin = std::next(vec.begin());
          |                                  ^~~
    In file included from /usr/include/gtest/gtest.h:382,
                     from /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:15:
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:139:5: error: template argument 1 is invalid
      139 |     EXPECT_EQ(std::accumulate(begin, end, init), xsimd::reduce(begin, end, init));
          |     ^~~~~~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:141:8: error: 'small_vec' was not declared in this scope; did you mean 'small_num'?
      141 |     if(small_vec.size() > 1)
          |        ^~~~~~~~~
          |        small_num
    In file included from /usr/include/gtest/gtest.h:382,
                     from /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:15:
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:146:9: error: template argument 1 is invalid
      146 |         EXPECT_EQ(std::accumulate(sbegin, send, init), xsimd::reduce(sbegin, send, init));
          |         ^~~~~~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp: In member function 'virtual void xsimd_reduce_unaligned_begin_aligned_end_Test::TestBody()':
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:152:34: error: 'vec' was not declared in this scope
      152 |     auto const begin = std::next(vec.begin());
          |                                  ^~~
    In file included from /usr/include/gtest/gtest.h:382,
                     from /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:15:
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:155:5: error: template argument 1 is invalid
      155 |     EXPECT_EQ(std::accumulate(begin, end, init), xsimd::reduce(begin, end, init));
          |     ^~~~~~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:157:8: error: 'small_vec' was not declared in this scope; did you mean 'small_num'?
      157 |     if(small_vec.size() > 1)
          |        ^~~~~~~~~
          |        small_num
    In file included from /usr/include/gtest/gtest.h:382,
                     from /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:15:
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:162:9: error: template argument 1 is invalid
      162 |         EXPECT_EQ(std::accumulate(sbegin, send, init), xsimd::reduce(sbegin, send, init));
          |         ^~~~~~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp: In member function 'virtual void xsimd_reduce_aligned_begin_unaligned_end_Test::TestBody()':
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:168:24: error: 'vec' was not declared in this scope
      168 |     auto const begin = vec.begin();
          |                        ^~~
    In file included from /usr/include/gtest/gtest.h:382,
                     from /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:15:
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:171:5: error: template argument 1 is invalid
      171 |     EXPECT_EQ(std::accumulate(begin, end, init), xsimd::reduce(begin, end, init));
          |     ^~~~~~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:173:8: error: 'small_vec' was not declared in this scope; did you mean 'small_num'?
      173 |     if(small_vec.size() > 1)
          |        ^~~~~~~~~
          |        small_num
    In file included from /usr/include/gtest/gtest.h:382,
                     from /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:15:
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:178:9: error: template argument 1 is invalid
      178 |         EXPECT_EQ(std::accumulate(sbegin, send, init), xsimd::reduce(sbegin, send, init));
          |         ^~~~~~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp: In member function 'virtual void xsimd_reduce_aligned_begin_aligned_end_Test::TestBody()':
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:184:24: error: 'vec' was not declared in this scope
      184 |     auto const begin = vec.begin();
          |                        ^~~
    In file included from /usr/include/gtest/gtest.h:382,
                     from /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:15:
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:187:5: error: template argument 1 is invalid
      187 |     EXPECT_EQ(std::accumulate(begin, end, init), xsimd::reduce(begin, end, init));
          |     ^~~~~~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:189:8: error: 'small_vec' was not declared in this scope; did you mean 'small_num'?
      189 |     if(small_vec.size() > 1)
          |        ^~~~~~~~~
          |        small_num
    In file included from /usr/include/gtest/gtest.h:382,
                     from /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:15:
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:194:9: error: template argument 1 is invalid
      194 |         EXPECT_EQ(std::accumulate(sbegin, send, init), xsimd::reduce(sbegin, send, init));
          |         ^~~~~~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp: In member function 'virtual void xsimd_reduce_using_custom_binary_function_Test::TestBody()':
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:200:24: error: 'vec' was not declared in this scope
      200 |     auto const begin = vec.begin();
          |                        ^~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:205:8: error: 'small_vec' was not declared in this scope; did you mean 'small_num'?
      205 |     if(small_vec.size() > 1)
          |        ^~~~~~~~~
          |        small_num
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp: In member function 'virtual void xsimd_iterator_Test::TestBody()':
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:216:56: error: 'XSIMD_DEFAULT_ALIGNMENT' was not declared in this scope; did you mean 'XSIMD_DEFAULT_ALLOCATOR'?
      216 |     std::vector<float, xsimd::aligned_allocator<float, XSIMD_DEFAULT_ALIGNMENT>> a(10 * 16, 0.2);
          |                                                        ^~~~~~~~~~~~~~~~~~~~~~~
          |                                                        XSIMD_DEFAULT_ALLOCATOR
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:216:56: error: template argument 2 is invalid
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:216:79: error: template argument 2 is invalid
      216 |     std::vector<float, xsimd::aligned_allocator<float, XSIMD_DEFAULT_ALIGNMENT>> a(10 * 16, 0.2);
          |                                                                               ^~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:216:96: error: expression list treated as compound expression in initializer [-fpermissive]
      216 |     std::vector<float, xsimd::aligned_allocator<float, XSIMD_DEFAULT_ALIGNMENT>> a(10 * 16, 0.2);
          |                                                                                                ^
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:216:87: warning: left operand of comma operator has no effect [-Wunused-value]
      216 |     std::vector<float, xsimd::aligned_allocator<float, XSIMD_DEFAULT_ALIGNMENT>> a(10 * 16, 0.2);
          |                                                                                    ~~~^~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:217:79: error: template argument 2 is invalid
      217 |     std::vector<float, xsimd::aligned_allocator<float, XSIMD_DEFAULT_ALIGNMENT>> b(1000, 2.);
          |                                                                               ^~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:217:92: error: expression list treated as compound expression in initializer [-fpermissive]
      217 |     std::vector<float, xsimd::aligned_allocator<float, XSIMD_DEFAULT_ALIGNMENT>> b(1000, 2.);
          |                                                                                            ^
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:217:84: warning: left operand of comma operator has no effect [-Wunused-value]
      217 |     std::vector<float, xsimd::aligned_allocator<float, XSIMD_DEFAULT_ALIGNMENT>> b(1000, 2.);
          |                                                                                    ^~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:218:79: error: template argument 2 is invalid
      218 |     std::vector<float, xsimd::aligned_allocator<float, XSIMD_DEFAULT_ALIGNMENT>> c(1000, 3.);
          |                                                                               ^~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:218:92: error: expression list treated as compound expression in initializer [-fpermissive]
      218 |     std::vector<float, xsimd::aligned_allocator<float, XSIMD_DEFAULT_ALIGNMENT>> c(1000, 3.);
          |                                                                                            ^
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:218:84: warning: left operand of comma operator has no effect [-Wunused-value]
      218 |     std::vector<float, xsimd::aligned_allocator<float, XSIMD_DEFAULT_ALIGNMENT>> c(1000, 3.);
          |                                                                                    ^~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:220:17: error: request for member 'begin' in 'a', which is of non-class type 'int'
      220 |     std::iota(a.begin(), a.end(), 0.f);
          |                 ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:220:28: error: request for member 'end' in 'a', which is of non-class type 'int'
      220 |     std::iota(a.begin(), a.end(), 0.f);
          |                            ^~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:221:32: error: request for member 'begin' in 'a', which is of non-class type 'int'
      221 |     std::vector<float> a_cpy(a.begin(), a.end());
          |                                ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:221:43: error: request for member 'end' in 'a', which is of non-class type 'int'
      221 |     std::vector<float> a_cpy(a.begin(), a.end());
          |                                           ^~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:224:58: error: invalid types 'int[int]' for array subscript
      224 |     auto begin = xsimd::aligned_iterator<batch_type>(&a[0]);
          |                                                          ^
    In file included from /builddir/build/BUILD/xsimd-7.2.3/include/xsimd/xsimd.hpp:20,
                     from /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:13:
    /builddir/build/BUILD/xsimd-7.2.3/include/xsimd/stl/iterator.hpp: In instantiation of 'class xsimd::aligned_iterator<float>':
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:224:59:   required from here
    /builddir/build/BUILD/xsimd-7.2.3/include/xsimd/stl/iterator.hpp:86:15: error: 'float' is not a class, struct, or union type
       86 |         using value_type = typename B::value_type;
          |               ^~~~~~~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:225:56: error: invalid types 'int[int]' for array subscript
      225 |     auto end = xsimd::aligned_iterator<batch_type>(&a[0] + a.size());
          |                                                        ^
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:225:62: error: request for member 'size' in 'a', which is of non-class type 'int'
      225 |     auto end = xsimd::aligned_iterator<batch_type>(&a[0] + a.size());
          |                                                              ^~~~
    In file included from /usr/include/gtest/gtest.h:59,
                     from /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:15:
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:237:19: error: request for member 'size' in 'a', which is of non-class type 'int'
      237 |     EXPECT_TRUE(a.size() == a_cpy.size() && std::equal(a.begin(), a.end(), a_cpy.begin()));
          |                   ^~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:237:58: error: request for member 'begin' in 'a', which is of non-class type 'int'
      237 |     EXPECT_TRUE(a.size() == a_cpy.size() && std::equal(a.begin(), a.end(), a_cpy.begin()));
          |                                                          ^~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:237:69: error: request for member 'end' in 'a', which is of non-class type 'int'
      237 |     EXPECT_TRUE(a.size() == a_cpy.size() && std::equal(a.begin(), a.end(), a_cpy.begin()));
          |                                                                     ^~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:239:53: error: invalid types 'int[int]' for array subscript
      239 |     begin = xsimd::aligned_iterator<batch_type>(&a[0]);
          |                                                     ^
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:242:33: error: 'batch_type' is not a class, namespace, or enumeration
      242 |     for (std::size_t i = 0; i < batch_type::size; ++i)
          |                                 ^~~~~~~~~~
    In file included from /usr/include/gtest/gtest.h:382,
                     from /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:15:
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:244:24: error: invalid types 'int[std::size_t {aka long unsigned int}]' for array subscript
      244 |         EXPECT_NEAR(a[i], sinf(a_cpy[i]), 1e-6);
          |                        ^
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:217:82: warning: unused variable 'b' [-Wunused-variable]
      217 |     std::vector<float, xsimd::aligned_allocator<float, XSIMD_DEFAULT_ALIGNMENT>> b(1000, 2.);
          |                                                                                  ^
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_algorithms.cpp:218:82: warning: unused variable 'c' [-Wunused-variable]
      218 |     std::vector<float, xsimd::aligned_allocator<float, XSIMD_DEFAULT_ALIGNMENT>> c(1000, 3.);
          |                                                                                  ^
    make[3]: *** [test/CMakeFiles/test_xsimd.dir/build.make:92: test/CMakeFiles/test_xsimd.dir/xsimd_algorithms.cpp.o] Error 1
    /usr/bin/cmake -S/builddir/build/BUILD/xsimd-7.2.3 -B/builddir/build/BUILD/xsimd-7.2.3 --check-build-system CMakeFiles/Makefile.cmake 0
    /usr/bin/make -f CMakeFiles/Makefile2 xtest
    make[1]: Entering directory '/builddir/build/BUILD/xsimd-7.2.3'
    /usr/bin/cmake -S/builddir/build/BUILD/xsimd-7.2.3 -B/builddir/build/BUILD/xsimd-7.2.3 --check-build-system CMakeFiles/Makefile.cmake 0
    make[1]: Leaving directory '/builddir/build/BUILD/xsimd-7.2.3'
    make[1]: Entering directory '/builddir/build/BUILD/xsimd-7.2.3'
    /usr/bin/cmake -E cmake_progress_start /builddir/build/BUILD/xsimd-7.2.3/CMakeFiles 19
    make[1]: Leaving directory '/builddir/build/BUILD/xsimd-7.2.3'
    /usr/bin/make -f CMakeFiles/Makefile2 test/CMakeFiles/xtest.dir/all
    /usr/bin/make -f test/CMakeFiles/test_xsimd.dir/build.make test/CMakeFiles/test_xsimd.dir/depend
    make[3]: Entering directory '/builddir/build/BUILD/xsimd-7.2.3'
    cd /builddir/build/BUILD/xsimd-7.2.3 && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /builddir/build/BUILD/xsimd-7.2.3 /builddir/build/BUILD/xsimd-7.2.3/test /builddir/build/BUILD/xsimd-7.2.3 /builddir/build/BUILD/xsimd-7.2.3/test /builddir/build/BUILD/xsimd-7.2.3/test/CMakeFiles/test_xsimd.dir/DependInfo.cmake --color=
    Dependee "/builddir/build/BUILD/xsimd-7.2.3/test/CMakeFiles/test_xsimd.dir/DependInfo.cmake" is newer than depender "/builddir/build/BUILD/xsimd-7.2.3/test/CMakeFiles/test_xsimd.dir/depend.internal".
    Dependee "/builddir/build/BUILD/xsimd-7.2.3/test/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/builddir/build/BUILD/xsimd-7.2.3/test/CMakeFiles/test_xsimd.dir/depend.internal".
    Scanning dependencies of target test_xsimd
    make[3]: Leaving directory '/builddir/build/BUILD/xsimd-7.2.3'
    /usr/bin/make -f test/CMakeFiles/test_xsimd.dir/build.make test/CMakeFiles/test_xsimd.dir/build
    make[3]: Entering directory '/builddir/build/BUILD/xsimd-7.2.3'
    [  5%] Building CXX object test/CMakeFiles/test_xsimd.dir/main.cpp.o
    cd /builddir/build/BUILD/xsimd-7.2.3/test && /usr/bin/c++   -I/builddir/build/BUILD/xsimd-7.2.3/include  -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=zEC12 -mtune=z13 -fasynchronous-unwind-tables -fstack-clash-protection -g -fPIC -march=native -Wunused-parameter -Wextra -Wreorder -std=c++11 -DNDEBUG   -o CMakeFiles/test_xsimd.dir/main.cpp.o -c /builddir/build/BUILD/xsimd-7.2.3/test/main.cpp
    make[3]: Leaving directory '/builddir/build/BUILD/xsimd-7.2.3'
    make[3]: Entering directory '/builddir/build/BUILD/xsimd-7.2.3'
    [ 10%] Building CXX object test/CMakeFiles/test_xsimd.dir/xsimd_api_test.cpp.o
    cd /builddir/build/BUILD/xsimd-7.2.3/test && /usr/bin/c++   -I/builddir/build/BUILD/xsimd-7.2.3/include  -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=zEC12 -mtune=z13 -fasynchronous-unwind-tables -fstack-clash-protection -g -fPIC -march=native -Wunused-parameter -Wextra -Wreorder -std=c++11 -DNDEBUG   -o CMakeFiles/test_xsimd.dir/xsimd_api_test.cpp.o -c /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_api_test.cpp
    make[3]: Leaving directory '/builddir/build/BUILD/xsimd-7.2.3'
    make[3]: Entering directory '/builddir/build/BUILD/xsimd-7.2.3'
    [ 15%] Building CXX object test/CMakeFiles/test_xsimd.dir/xsimd_algorithms.cpp.o
    cd /builddir/build/BUILD/xsimd-7.2.3/test && /usr/bin/c++   -I/builddir/build/BUILD/xsimd-7.2.3/include  -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=zEC12 -mtune=z13 -fasynchronous-unwind-tables -fstack-clash-protection -g -fPIC -march=native -Wunused-parameter -Wextra -Wreorder -std=c+make[3]: *** Waiting for unfinished jobs....
    In file included from /builddir/build/BUILD/xsimd-7.2.3/include/xsimd/types/xsimd_traits.hpp:15,
                     from /builddir/build/BUILD/xsimd-7.2.3/include/xsimd/xsimd.hpp:14,
                     from /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_basic_test.hpp:17,
                     from /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_basic_test.cpp:16:
    /builddir/build/BUILD/xsimd-7.2.3/include/xsimd/types/xsimd_types_include.hpp:74:4: warning: #warning "Please compile with SIMD instructions enabled or activate the fallback mode. (e.g. for x86 -march=native or for ARM -mfpu=neon)" [-Wcpp]
       74 |   #warning "Please compile with SIMD instructions enabled or activate the fallback mode. (e.g. for x86 -march=native or for ARM -mfpu=neon)"
          |    ^~~~~~~
    In file included from /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_basic_test.cpp:16:
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_basic_test.hpp: In function 'bool xsimd::test_char_loading(int8_t, S&)':
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_basic_test.hpp:1056:33: warning: requested alignment 64 is larger than 8 [-Wattributes]
     1056 |         alignas(64) char algn[64];
          |                                 ^
    In file included from /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_basic_test.cpp:17:
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_complex_basic_test.hpp: In function 'bool xsimd::test_complex_simd_load_store(std::ostream&, T&)':
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_complex_basic_test.hpp:643:15: warning: typedef 'using real_batch_type = typename T::real_batch_type' locally defined but not used [-Wunused-local-typedefs]
      643 |         using real_batch_type = typename T::real_batch_type;
          |               ^~~~~~~~~~~~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_complex_basic_test.hpp:644:15: warning: typedef 'using float_vector = typename T::float_vector' locally defined but not used [-Wunused-local-typedefs]
      644 |         using float_vector = typename T::float_vector;
          |               ^~~~~~~~~~~~
    /builddir/build/BUILD/xsimd-7.2.3/test/xsimd_complex_basic_test.hpp:645:15: warning: typedef 'using double_vector = typename T::double_vector' locally defined but not used [-Wunused-local-typedefs]
      645 |         using double_vector = typename T::double_vector;
          |               ^~~~~~~~~~~~~
    make[2]: *** [CMakeFiles/Makefile2:95: test/CMakeFiles/test_xsimd.dir/all] Error 2
    make[1]: *** [CMakeFiles/Makefile2:134: test/CMakeFiles/xtest.dir/rule] Error 2
    

    Note that there is "Please compile with SIMD instructions enabled or activate the fallback mode. (e.g. for x86 -march=native or for ARM -mfpu=neon)" yet I'm not sure exactly what to use on those architectures. Is there some arch detection here that needs to be adapted?

    Thanks for help.

    opened by hroncok 17
  • Cannot create a batch of xtl::xcomplex

    Cannot create a batch of xtl::xcomplex

    Using current HEAD or latest tags (8.1.0 for xsimd and 0.7.4 for xtl), creating a xsimd::batch<xtl::xcomplex<double>> yields a compile-time error.

    Minimal working example:

    #define XSIMD_ENABLE_XTL_COMPLEX 1
    #include <xsimd/xsimd.hpp>
    
    int main()
    {
        xsimd::batch<xtl::xcomplex<double>> foo;
        return 0;
    }
    

    The compile error is, using g++ -I xtl/include -I xsimd/include -std=c++14 -c foo.cpp is:

    In file included from xsimd/include/xsimd/memory/../config/../types/../types/./././././xsimd_sse2_register.hpp:16:0,
                     from xsimd/include/xsimd/memory/../config/../types/../types/././././xsimd_sse3_register.hpp:15,
                     from xsimd/include/xsimd/memory/../config/../types/../types/./././xsimd_ssse3_register.hpp:15,
                     from xsimd/include/xsimd/memory/../config/../types/../types/././xsimd_sse4_1_register.hpp:15,
                     from xsimd/include/xsimd/memory/../config/../types/../types/./xsimd_sse4_2_register.hpp:15,
                     from xsimd/include/xsimd/memory/../config/../types/../types/xsimd_fma3_sse_register.hpp:15,
                     from xsimd/include/xsimd/memory/../config/../types/xsimd_all_registers.hpp:12,
                     from xsimd/include/xsimd/memory/../config/xsimd_arch.hpp:19,
                     from xsimd/include/xsimd/memory/xsimd_aligned_allocator.hpp:27,
                     from xsimd/include/xsimd/xsimd.hpp:41,
                     from foo.cpp:2:
    xsimd/include/xsimd/memory/../config/../types/../types/././././././xsimd_register.hpp: In instantiation of ‘struct xsimd::types::simd_register<xtl::xcomplex<double>, xsimd::sse2>’:
    xsimd/include/xsimd/types/xsimd_batch.hpp:46:11:   required from ‘class xsimd::batch<xtl::xcomplex<double> >’
    foo.cpp:6:41:   required from here
    xsimd/include/xsimd/memory/../config/../types/../types/././././././xsimd_register.hpp:31:13: error: static assertion failed: usage of simd_register with unsupported type
                 static_assert(!Arch::supported() || has_simd_register<T, Arch>::value,
                 ^~~~~~~~~~~~~
    In file included from xsimd/include/xsimd/xsimd.hpp:46:0,
                     from foo.cpp:2:
    xsimd/include/xsimd/types/xsimd_batch.hpp: In instantiation of ‘class xsimd::batch<xtl::xcomplex<double> >’:
    foo.cpp:6:41:   required from here
    xsimd/include/xsimd/types/xsimd_batch.hpp:53:81: error: no type named ‘register_type’ in ‘struct xsimd::types::simd_register<xtl::xcomplex<double>, xsimd::sse2>’
             using register_type = typename types::simd_register<T, A>::register_type; ///< SIMD register type abstracted by this batch.
    

    With xsimd 7.6.0, a similar example (replacing the batch declaration with xsimd::simd_type<xtl::xcomplex<double>> foo works.

    Note: I've gotten there when compiling xtensor with -DXTENSOR_USE_XSIMD=ON in the test_xcomplex target. Let me know if this issue should be reported to xtensor.

    opened by lamyj 15
  • ref #314 First try in order to discuss details and to see how to integrate AVX512 and neon flavor

    ref #314 First try in order to discuss details and to see how to integrate AVX512 and neon flavor

    Add missing saturated sadd ssub

    • int8,uint8,int16,uint16,int32,uint32,int64,uint64
    • sse/sse3/sse4
    • avx/avx2 Test:
    • Validated on unbuntu 1804, g++ 7,4
    • Pb remains globaly for the entire lib especially in debug with visual 2019 Todo:
    • AVX512
    • NEON For the two last how to test ??
    opened by ThomasRetornaz 13
  • Add extract_pair for shifting 128bit data

    Add extract_pair for shifting 128bit data

    Extracts the lowest vector elements from the second source and the highest vector elements from the first source. The index: 'n' specifies the lowest vector element to extract from the first source register. Concatenates the results into th Return value.

    opened by guyuqi 12
  • Testing fails on Debian

    Testing fails on Debian

    Using version 3.0.1 + fix for select, here is the output from the tests:

    [==========] Running 22 tests from 1 test case.
    [----------] Global test environment set-up.
    [----------] 22 tests from xsimd
    [ RUN      ] xsimd.sse_float_trigonometric
    [       OK ] xsimd.sse_float_trigonometric (9 ms)
    [ RUN      ] xsimd.sse_double_trigonometric
    [       OK ] xsimd.sse_double_trigonometric (9 ms)
    [ RUN      ] xsimd.sse_float_rounding
    /<<PKGBUILDDIR>>/test/xsimd_rounding_test.cpp:34: Failure
    Value of: res
      Actual: false
    Expected: true
    [  FAILED  ] xsimd.sse_float_rounding (0 ms)
    [ RUN      ] xsimd.sse_double_rounding
    /<<PKGBUILDDIR>>/test/xsimd_rounding_test.cpp:41: Failure
    Value of: res
      Actual: false
    Expected: true
    [  FAILED  ] xsimd.sse_double_rounding (0 ms)
    [ RUN      ] xsimd.sse_float_power
    [       OK ] xsimd.sse_float_power (6 ms)
    [ RUN      ] xsimd.sse_double_power
    [       OK ] xsimd.sse_double_power (4 ms)
    [ RUN      ] xsimd.sse_float_hyperbolic
    [       OK ] xsimd.sse_float_hyperbolic (8 ms)
    [ RUN      ] xsimd.sse_double_hyperbolic
    [       OK ] xsimd.sse_double_hyperbolic (5 ms)
    [ RUN      ] xsimd.sse_float_fp_manipulation
    [       OK ] xsimd.sse_float_fp_manipulation (0 ms)
    [ RUN      ] xsimd.sse_double_fp_manipulation
    [       OK ] xsimd.sse_double_fp_manipulation (0 ms)
    [ RUN      ] xsimd.sse_float_exponential
    /<<PKGBUILDDIR>>/test/xsimd_exponential_test.cpp:35: Failure
    Value of: res
      Actual: false
    Expected: true
    [  FAILED  ] xsimd.sse_float_exponential (10 ms)
    [ RUN      ] xsimd.sse_double_exponential
    /<<PKGBUILDDIR>>/test/xsimd_exponential_test.cpp:42: Failure
    Value of: res
      Actual: false
    Expected: true
    [  FAILED  ] xsimd.sse_double_exponential (7 ms)
    [ RUN      ] xsimd.sse_float_error_gamma
    /<<PKGBUILDDIR>>/test/xsimd_error_gamma_test.cpp:35: Failure
    Value of: res
      Actual: false
    Expected: true
    [  FAILED  ] xsimd.sse_float_error_gamma (23 ms)
    [ RUN      ] xsimd.sse_double_error_gamma
    /<<PKGBUILDDIR>>/test/xsimd_error_gamma_test.cpp:42: Failure
    Value of: res
      Actual: false
    Expected: true
    [  FAILED  ] xsimd.sse_double_error_gamma (13 ms)
    [ RUN      ] xsimd.sse_float_basic_math
    [       OK ] xsimd.sse_float_basic_math (0 ms)
    [ RUN      ] xsimd.sse_double_basic_math
    [       OK ] xsimd.sse_double_basic_math (0 ms)
    [ RUN      ] xsimd.sse_float_basic
    [       OK ] xsimd.sse_float_basic (0 ms)
    [ RUN      ] xsimd.sse_double_basic
    [       OK ] xsimd.sse_double_basic (0 ms)
    [ RUN      ] xsimd.sse_int32_basic
    [       OK ] xsimd.sse_int32_basic (0 ms)
    [ RUN      ] xsimd.sse_int64_basic
    [       OK ] xsimd.sse_int64_basic (0 ms)
    [ RUN      ] xsimd.sse_conversion
    [       OK ] xsimd.sse_conversion (0 ms)
    [ RUN      ] xsimd.sse_cast
    [       OK ] xsimd.sse_cast (0 ms)
    [----------] 22 tests from xsimd (94 ms total)
    
    [----------] Global test environment tear-down
    [==========] 22 tests from 1 test case ran. (94 ms total)
    [  PASSED  ] 16 tests.
    [  FAILED  ] 6 tests, listed below:
    [  FAILED  ] xsimd.sse_float_rounding
    [  FAILED  ] xsimd.sse_double_rounding
    [  FAILED  ] xsimd.sse_float_exponential
    [  FAILED  ] xsimd.sse_double_exponential
    [  FAILED  ] xsimd.sse_float_error_gamma
    [  FAILED  ] xsimd.sse_double_error_gamma
    
     6 FAILED TESTS
    
    opened by ghisvail 11
  • Please add conan support for this awesome library

    Please add conan support for this awesome library

    Hi, while I'm aware that you provide packaged support for conda, which is great, as a C++ dev it would make it much easier to use xsimd if the library had support for conan. My understanding is that it's very easy (one extra file) to provide this support, especially so for a header-only package. Moreover, the conan team have in my own interactions been very positive -- I'm sure they'll be happy to guide you through the process.

    Thanks for your effort in creating such a great library, by the way.

    opened by seertaak 10
  • Cleaned up version of the fallback batch type

    Cleaned up version of the fallback batch type

    This MR strives to be a hack-free version of #88 . It is mostly a rewrite, using the existing branch as inspiration when things go wrong. The end goal is to get a fallback version of batch<T, N> which compiles down to scalar loops, that may or may not be autovectorized by the compiler.

    While I was at it, I also cleaned a couple of minor things along the way, such as the inability to print or query batch_bool.

    Current status:

    • [x] Write the "type" header
    • [x] Rework the bitwise_cast API (in a backwards-compatible way) to allow genericity over vector length
    • [x] Generalize the math functions to arbitrary vector lengths
    • [x] Integrate the fallback in the benchmarks
    • [x] Integrate it in the tests
    • [x] Get the thing to compile, link, run, and pass tests :)
    • [x] Resolve memory corruption in xbenchmark
    • [x] Check that there is no non-fallback performance regression
    • [x] Add a way to disable the fallback or detect if it is used
    • [x] Discuss what should be done with stuff in the detail namespace
    • [x] Discuss how to best document this
    • [ ] Discuss running CI with and without the fallback
    opened by HadrienG2 10
  • Added support for `[[nodiscard]]`

    Added support for `[[nodiscard]]`

    As discussed in #760, I have added some preprocessor code to detect [[nodiscard]] support if the compiler has it, and use [[nodiscard]] in those cases.

    opened by wermos 9
  • separate scalar mode tests from full vector tests

    separate scalar mode tests from full vector tests

    As discussed at https://github.com/xtensor-stack/xsimd/issues/756 and at https://github.com/serge-sans-paille/pythran/issues/1999 , xsimd is designed to work in scalar mode on all architectures, even those without SIMD vector acceleration. pythran requires xsimd even on "unsupported" arches in order to access scalar mode.

    Currently xsimd tests address full functionality and therefore fail on "unsupported" (SIMD-free) architectures.

    The tests are defined in XSIMD_TESTS in test/CMakeLists.txt. It would be useful if that list of tests could be split into scalar-mode and vector-mode tests (e.g. create two lists, XSIMD_SCALAR_TESTS and XSIMD_VECTOR_TESTS), with some kind of new cmake option to switch off XSIMD_VECTOR_TESTS when running on SIMD-free architectures.

    opened by drew-parsons 0
  • Exploration of calling convention, pass by ref/value and forced inline on MSVC

    Exploration of calling convention, pass by ref/value and forced inline on MSVC

    Hola. This PR is a spiritual successor to #646. I don't really intend it to be merged in (it's a massive diff), it's more that I've done the work to parameterize calling convention, pass by ref/value and forced inlines so they can be tested individually/together as desired, as these were all the variables discussed in that PR.

    The main changes are:

    • added configurable XSIMD_FORCEINLINE, defaults to __forceinline on MSVC and __attribute((always_inline)) on GCC/Clang.
    • added configurable XSIMD_CREF, defaults to const&.
    • added configurable XSIMD_CALLCONV, defaults to __vectorcall when supported on MSVC, nothing otherwise.
    • applied XSIMD_FORCEINLINE to most of batch and batch_bool (basically all functions that were just one-liner calls to things in the kernel namespace)
    • replaced most (all?) instances of batch<> const& with batch<> XSIMD_CREF
    • applied XSIMD_CALLCONV to pretty much every function in the lib

    I've tried to be pretty comprehensive, but there might be a few bits I missed. I ran a small subset of the xsimd benchmarks in just about every permutation of the above on MSVC (e.g. XSIMD_FORCEINLINE set to inline vs __forceinline et cetera). You can find the results here:

    https://docs.google.com/spreadsheets/d/1c2Y7-NI36g8zZGumO5m0DpK5QLRh8RBmsgWhAcYDuag/edit#gid=0

    You'll note there's not a huge difference between all the different permuations in Release builds. but I only did the add_fn() test from ops, and ignored the double values altogether, so it wasn't super comprehensive.

    If you (or @amyspark) want to test additional elements yourself (or test the library in other ways with the parameterized attributes), you can just override the attributes using #defines, e.g.:

    #define XSIMD_CALLCONV    __vectorcall
    #define XSIMD_CREF        const&
    #define XSIMD_FORCEINLINE inline
    
    #include <xsimd/xsimd.hpp>
    

    Disclaimer: I only changed what was necessary to get it to work on VS2022 for x64. I probably missed some ARM shenanigans so it might need extra work if you're testing there.

    (I also drive-by moved XSIMD_NODISCARD to xsimd_config.hpp because it seems like it probably belongs there)

    opened by marzer 0
  • Multiple constructor calls for one object initialization

    Multiple constructor calls for one object initialization

    Once again, as I pointed out in #775, a single xsimd::batch object initialization ends up calling multiple constructors:

    I took the liberty of putting std::cout statements in the batch constructor code, like so:

    /**
     * Create a batch with all element initialized to \c val.
     */
    template <class T, class A>
    inline batch<T, A>::batch(T val) noexcept
        : types::simd_register<T, A>(kernel::broadcast<A>(val, A {}))
    {
        std::cout << "broadcasting constructor\n";
    }
    
    /**
     * Create a batch with elements initialized from \c data.
     * It is an error to have `data.size() != size.
     */
    template <class T, class A>
    inline batch<T, A>::batch(std::initializer_list<T> data) noexcept
        : batch(data.begin(), detail::make_index_sequence<size>())
    {
        details::check_batch_init(*this, data);
        std::cout << "intializer list constructor\n";
    }
    

    And then ran a little test program:

    #include <iostream>
    #include <xsimd/xsimd.hpp>
    
    int main() {
        xsimd::batch<double, xsimd::avx2> b(2.5);
        std::cout << "==========================\n";
        xsimd::batch<double, xsimd::avx2> c{2.5, 5, 7.5, 10};
        std::cout << "==========================\n";
        xsimd::batch<double, xsimd::avx2> d = {3.5, 7, 10.5, 14};
    }
    

    And this was the output:

    register_type constructor
    broadcasting constructor
    ==========================
    register_type constructor
    pointer-to-data constructor
    intializer list constructor
    ==========================
    register_type constructor
    pointer-to-data constructor
    intializer list constructor
    

    We should fix this. Apart from the obvious gain in performance in debug builds, we should also see a small performance increase in Release builds (in my experiments, I got the same behavior even in Release mode).

    opened by wermos 5
  • Compile-time dispatch instead of switch-case

    Compile-time dispatch instead of switch-case

    As I pointed out in one of my messages in #775, there are many cases like this, where a switch-case is employed to make the decision of which intrinsic to call, even though this decision could be done at compile-time.

    As part of our program to improve debug build performance, as @marzer suggested, and for improving performance overall, this should be changed to using some std::enable_if type thing.

    opened by wermos 13
  • Compilation errors when enabling XTENSOR_USE_XSIMD during cross compile for Tizen

    Compilation errors when enabling XTENSOR_USE_XSIMD during cross compile for Tizen

    Hello, I'm trying to enable xsimd optimizations for Tizen, but compilation fails.

    I'm using xtensor 0.24.2, xtl 0.7.4, xsimd 8.1.0.

    When XTENSOR_USE_XSIMD is not specified compilation completes successfully (please, ignore linking error, it's not relevant to this issue):

    [email protected]:~$ echo "#include \"xtensor.hpp\"" | /home/sergey/tizen-studio/tools/arm-linux-gnueabi-gcc-9.2/bin/arm-linux-gnueabi-g++ -x c++ --sysroot=/home/sergey/tizen-studio/platforms/tizen-6.0/wearable/rootstraps/wearable-6.0-device.core -I/opt/xsimd-8.1.0/include/ -I/opt/xtensor-0.24.2/include -I/opt/xtl-0.7.4/include -mfpu=neon-vfpv4 -
    /home/sergey/tizen-studio/tools/arm-linux-gnueabi-gcc-9.2/bin/../lib/gcc/arm-tizen-linux-gnueabi/9.2.0/../../../../arm-tizen-linux-gnueabi/bin/ld: /home/sergey/tizen-studio/platforms/tizen-6.0/wearable/rootstraps/wearable-6.0-device.core/usr/lib/crt1.o: in function `_start':
    /home/abuild/rpmbuild/BUILD/glibc-2.30/csu/../sysdeps/arm/start.S:119: undefined reference to `main'
    collect2: error: ld returned 1 exit status
    

    But with XTENSOR_USE_XSIMD option there are multiple errors:

    [email protected]:~$ echo "#include \"xtensor.hpp\"" | /home/sergey/tizen-studio/tools/arm-linux-gnueabi-gcc-9.2/bin/arm-linux-gnueabi-g++ -x c++ --sysroot=/home/sergey/tizen-studio/platforms/tizen-6.0/wearable/rootstraps/wearable-6.0-device.core -I/opt/xsimd-8.1.0/include/ -I/opt/xtensor-0.24.2/include -I/opt/xtl-0.7.4/include -mfpu=neon-vfpv4 -DXTENSOR_USE_XSIMD -
    
    /opt/xsimd-8.1.0/include/xsimd/types/xsimd_batch.hpp:662:38: error: no matching function for call to ‘div<xsimd::neon>(xsimd::batch<double, xsimd::neon>&, const xsimd::batch<double, xsimd::neon>&, xsimd::neon)’
    /opt/xsimd-8.1.0/include/xsimd/types/../arch/././generic/xsimd_generic_arithmetic.hpp:47:37: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
    /opt/xsimd-8.1.0/include/xsimd/types/xsimd_batch.hpp:656:38: error: no matching function for call to ‘mul<xsimd::neon>(xsimd::batch<double, xsimd::neon>&, const xsimd::batch<double, xsimd::neon>&, xsimd::neon)’
    /opt/xsimd-8.1.0/include/xsimd/types/../arch/./xsimd_generic_fwd.hpp:31:37: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
    /opt/xsimd-8.1.0/include/xsimd/types/../arch/./xsimd_neon.hpp:715:71: error: no type named ‘type’ in ‘struct std::enable_if<false, int>’
    /opt/xsimd-8.1.0/include/xsimd/types/xsimd_batch.hpp:634:29: error: no matching function for call to ‘lt<xsimd::neon>(const xsimd::batch<double, xsimd::neon>&, const xsimd::batch<double, xsimd::neon>&, xsimd::neon)’
    /opt/xsimd-8.1.0/include/xsimd/types/../arch/./xsimd_neon.hpp:841:71: error: no type named ‘type’ in ‘struct std::enable_if<false, int>’
    /opt/xsimd-8.1.0/include/xsimd/types/../arch/./xsimd_neon.hpp:852:77: error: no type named ‘type’ in ‘struct std::enable_if<false, int>’
    /opt/xsimd-8.1.0/include/xsimd/types/xsimd_batch.hpp:416:69: error: no matching function for call to ‘xsimd::types::simd_register<double, xsimd::neon>::simd_register(xsimd::batch<float, xsimd::neon>)’
    /opt/xsimd-8.1.0/include/xsimd/types/xsimd_api.hpp:1512:33: error: no matching function for call to ‘select<xsimd::neon>(const xsimd::batch_bool<double, xsimd::neon>&, const xsimd::batch<double, xsimd::neon>&, const xsimd::batch<double, xsimd::neon>&, xsimd::neon)’
    /opt/xsimd-8.1.0/include/xsimd/types/../arch/./xsimd_neon.hpp:1503:69: error: no type named ‘type’ in ‘struct std::enable_if<false, int>’
    /opt/xsimd-8.1.0/include/xsimd/types/xsimd_batch.hpp:644:38: error: no matching function for call to ‘add<xsimd::neon>(xsimd::batch<double, xsimd::neon>&, const xsimd::batch<double, xsimd::neon>&, xsimd::neon)’
    /opt/xsimd-8.1.0/include/xsimd/types/../arch/./xsimd_neon.hpp:641:69: error: no type named ‘type’ in ‘struct std::enable_if<false, int>’
    /opt/xsimd-8.1.0/include/xsimd/types/xsimd_api.hpp:59:30: error: no matching function for call to ‘abs<xsimd::neon>(const xsimd::batch<double, xsimd::neon>&, xsimd::neon)’
    /opt/xsimd-8.1.0/include/xsimd/types/../arch/./xsimd_generic_fwd.hpp:23:37: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
    /opt/xsimd-8.1.0/include/xsimd/types/../arch/./xsimd_neon.hpp:1227:71: error: no type named ‘type’ in ‘struct std::enable_if<false, int>’
    /opt/xsimd-8.1.0/include/xsimd/types/../arch/././generic/xsimd_generic_math.hpp:68:51: error: static assertion failed: compatible sizes
    /opt/xsimd-8.1.0/include/xsimd/types/../arch/././generic/xsimd_generic_math.hpp:72:37: error: no matching function for call to ‘begin(double [0])’
    /home/sergey/tizen-studio/tools/arm-linux-gnueabi-gcc-9.2/arm-tizen-linux-gnueabi/include/c++/9.2.0/bits/range_access.h:48:50: error: request for member ‘begin’ in ‘__cont’, which is of non-class type ‘double [0]’
    /home/sergey/tizen-studio/tools/arm-linux-gnueabi-gcc-9.2/arm-tizen-linux-gnueabi/include/c++/9.2.0/bits/range_access.h:58:56: error: request for member ‘begin’ in ‘__cont’, which is of non-class type ‘const double [0]’
    /opt/xsimd-8.1.0/include/xsimd/types/../arch/././generic/xsimd_generic_math.hpp:72:58: error: no matching function for call to ‘end(double [0])’
    /home/sergey/tizen-studio/tools/arm-linux-gnueabi-gcc-9.2/arm-tizen-linux-gnueabi/include/c++/9.2.0/bits/range_access.h:68:48: error: request for member ‘end’ in ‘__cont’, which is of non-class type ‘double [0]’
    /home/sergey/tizen-studio/tools/arm-linux-gnueabi-gcc-9.2/arm-tizen-linux-gnueabi/include/c++/9.2.0/bits/range_access.h:78:54: error: request for member ‘end’ in ‘__cont’, which is of non-class type ‘const double [0]’
    /opt/xsimd-8.1.0/include/xsimd/types/../arch/././generic/xsimd_generic_math.hpp:68:51: error: static assertion failed: compatible sizes
    

    g++ version:

    [email protected]:~$ /home/sergey/tizen-studio/tools/arm-linux-gnueabi-gcc-9.2/bin/arm-linux-gnueabi-g++ --version
    arm-linux-gnueabi-g++ (Tizen/GNU GCC 9.2.0 2020.02) 9.2.0
    Copyright (C) 2019 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    [email protected]:~$ /home/sergey/tizen-studio/tools/arm-linux-gnueabi-gcc-9.2/bin/arm-linux-gnueabi-g++ -dumpmachine
    arm-tizen-linux-gnueabi
    

    Attaching both logs.

    xtensor.log xtensor_use_xsimd.log

    opened by smozhaykin 0
  • Adjust the rsqrt error range to account for AMD hardware

    Adjust the rsqrt error range to account for AMD hardware

    @serge-sans-paille @JohanMabille,

    I reported a possible miscodegen error in test_rsqrt to Microsoft here. Turns out, AMD has slight precision issues wrt. Intel, so the test will fail with off-by-one errors for certain inputs.

    Would it be possible to set an error range like it's done for the gamma function under AppleClang?

    opened by amyspark 1
Owner
Xtensor Stack
Data structures for data sciences
Xtensor Stack
A simple implementation of a parser and its use to calculate simple mathematical expressions

Calculator C Parser A simple implementation of a parser and its use to calculate simple mathematical expressions I haven't written a detailed descript

Romes 14 Nov 8, 2021
Node.js bindings for the Mathematical Expression Toolkit

ExprTk.js This is the Node.js bindings for ExprTk (Github) by @ArashPartow ExprTk.js supports both synchronous and asynchronous background execution o

Momtchil Momtchev 5 Feb 18, 2022
Openmind - Deduction framework with arbitrary mathematical system solver.

openmind Compilation: Debian/Ubuntu: sudo apt install cmake g++ git libboost-all-dev libxss-dev libx11-dev libxcb-screensaver0-dev ocl-icd-opencl-dev

Sergei Krivonos 10 Apr 3, 2022
Proyecto de Enmascadaro de Imagenes con SIMD

TP 2 - Organización del Computador II Proyecto de Enmascarado de Imágenes con SIMD Objetivo Se debe implementan 2 funciones de Enmascaramiento de imág

null 0 May 6, 2022
std::find simd version

std::find simd version std::find doesn't use simd intrinsics. ( check https://gms.tf/stdfind-and-memchr-optimizations.html ) So i thought simd can mak

SungJinKang 19 Jan 5, 2022
Libft is an individual project at 42 that requires us to re-create some standard C library functions including some additional ones that can be used later to build a library of useful functions for the rest of the program.

Libft is an individual project at 42 that requires us to re-create some standard C library functions including some additional ones that can be used later to build a library of useful functions for the rest of the program.

Paulo Rafael Ramalho 0 Apr 5, 2022
Signed - a 3D modeling and construction language based on Lua and SDFs. Signed will be available for macOS and iOS and is heavily optimized for Metal.

Signed - A 3D modeling language Abstract Signed is a Lua based 3D modeling language, it provides a unique way to create high quality 3D content for yo

Markus Moenig 88 May 26, 2022
RemixDB: A read- and write-optimized concurrent KV store. Fast point and range queries. Extremely low write-amplification.

REMIX and RemixDB The REMIX data structure was introduced in paper "REMIX: Efficient Range Query for LSM-trees", FAST'21. This repository maintains a

Xingbo Wu 72 Jun 26, 2022
Browser and NodeJS Web Assembly audio decoder libraries that are highly optimized for size and performance.

WASM Audio Decoders WASM Audio Decoders is a collection of Web Assembly audio decoder libraries that are highly optimized for browser use. Each module

Ethan Halsall 53 May 30, 2022
Optimized, fast and unsafe Uniswap sniping bot for buying new listings.

Optimized, fast and unsafe Uniswap sniping bot for buying new listings. Table of content How does it work? Pregeneration Used libraries Project struct

Sebastian Szczepański 141 May 26, 2022
Project PLS is developed based on icarus iverilog and will compile verilog into a much faster optimized model.

Getting Started with PLS The project is developed based on icarus iverilog. Special thanks to Stephen Williams ([email protected]). PLS is a Verilog si

null 7 Jan 11, 2022
An optimized "RTOS" (more than HAL but less than RTOS) for ROV controling and getting sensor data

Nitori-ROV-OS 一个专门为水下机器人(ROV、AUV)进行优化的实时操作系统,暂命名为 Nitori,中文名 荷取 可以通过修改硬件兼容层(Port)进行移植 预计最初版本支持stm32f407和stm32h750,并在实验室目前的水下机器人中进行部署 系统分为四层,六个主要组件: 硬件

Doublues_G 2 Jan 10, 2022
This is a C plus plus coding template for Compitative programming. This template is very optimized for the Online Judgment

C-plusplus-compitative-Programming-Template Tech We Used C++ Features Easy to compile Easy debug facility Analysised and optimized base template Steps

Alan Binu 15 Jan 27, 2022
Marlin is an optimized firmware for RepRap 3D printers based on the Arduino platform.

Marlin 3D Printer Firmware Additional documentation can be found at the Marlin Home Page. Please test this firmware and let us know if it misbehaves i

Marlin 13.4k Jul 1, 2022
Greenshot - a free screenshot tool optimized for productivity

Greenshot - a free screenshot tool optimized for productivity Welcome to the source repository for Greenshot What is Greenshot? Greenshot is a light-w

Greenshot 2.9k Jun 30, 2022
Optimized Linux kernel for Arch / Arch-based distros

Linux kernel ============ There are several guides for kernel developers and users. These guides can be rendered in a number of formats, like HTML an

cyberknight777 7 Jun 11, 2022
null 235 Jun 22, 2022
Implementation of python itertools and builtin iteration functions for C++17

CPPItertools Range-based for loop add-ons inspired by the Python builtins and itertools library. Like itertools and the Python3 builtins, this library

Ryan Haining 1.2k Jun 23, 2022