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.

Comments
  • 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
  • [DISCUSSION] How to support Arm SVE

    [DISCUSSION] How to support Arm SVE

    I'm investigating how to support Arm SVE/SVE2 [1] in xsimd.

    SVE vector is size agnotics. The register size (lanes) is determinted at run time, and the according C/C++ type is size-less (incomplete type). E.g., SVE svint8_t maps to NEON int8x16_t but without size. sizeof(svint8_t) does not compile, and it's illegal to declare a member with type svint8_t inside a struct.

    For this reason, looks xsimd core data structures xsimd_register and batch(derived from xsimd_register) do not support SVE, as xsimd_register struct contains a data member of the SIMD register type [2]. Code snippet pasted below.

        struct simd_register<SCALAR_TYPE, ISA>                         \
        {                                                              \
            using register_type = VECTOR_TYPE;                         \
            register_type data;                                        \
            operator register_type() const noexcept { return data; }   \
        };                                                             \
    

    I studied google highway which supports size agnostic vectors (Arm SVE, RISCV RVV). AFAIK, highway only handles the SIMD register type, without holding a register value [3]. The API often requires an explicit register type argument. Below is a simplified highway example to add two arrays vertically.

    void vsum_hwy(const int* x, const int* y, size_t size, int* z) {
      // generate explicit vector_type from element type
      const ScalableTag<int> vector_type;
      // Lanes(d) generates runtime code for SVE/RVV, constexpr otherwise
      for (size_t i = 0; i < size; i += Lanes(d)) {
        // Load/Store requires explicit vector_type
        auto vx = Load(vector_type, x + i);
        auto vy = Load(vector_type, y + i);
        auto vz = Add(vx, vy);
        Store(vz, vector_type, z + i);
      }
    }
    

    I would like to hear ideas on how to support SVE size-less types. Highway approach may be inspiring, but I don't think xsimd should follow it.

    A simpler but not ideal way is to only support fixed size SVE, e.g., SVE-128, SVE-256, ... SVE-2048. User must recompile the code to match the vector size on target machine.

    [1] https://developer.arm.com/documentation/102476/0100 [2] https://github.com/xtensor-stack/xsimd/blob/8.1.0/include/xsimd/types/xsimd_register.hpp#L40 [3] https://github.com/google/highway/blob/master/g3doc/impl_details.md#vectors-vs-tags

    opened by cyb70289 24
  • 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
  • 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
  • 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
  • Auto detection on MSVC 64bit issue with older CPUs

    Auto detection on MSVC 64bit issue with older CPUs

    Recently when upgrading from xsimd7 to xsimd8, I started seeing some crashes due to illegal instruction exceptions on older x64 CPUs with no SSE4.x instructions when compiling with MSVC. Unfortunately there's no way of disabling this instruction set from this compiler. I was wondering if the auto detection performed by xsimd takes into account this scenario and if it is the expected behaviour, perhaps due to unsupported older cpus.

    opened by joaromera 3
  • Minor difference in test result on macOS

    Minor difference in test result on macOS

    With latest xsimd 9.0.1 I get a failed test on macOS with XCode 13.4.1 (current latest):

    1: [ RUN      ] xsimd_api_float_types_functions/2.asin
    1: /Users/bdaci01/builds/nK4EB_yB/0/BioDataAnalysis/xsimd/test/test_xsimd_api.cpp:357: Failure
    1: Expected equality of these values:
    1:   extract(xsimd::asin(T(val)))
    1:     Which is: 1.5708
    1:   std::asin(val)
    1:     Which is: 1.5708
    1: [  FAILED  ] xsimd_api_float_types_functions/2.asin, where TypeParam = xsimd::batch<float, xsimd::avx> (0 ms)
    

    I'm using not the native build flags for the host, but -march=ivybridge -mtune=skylake instead, in case that is related?

    opened by emmenlau 0
  • Add a fixed size batch

    Add a fixed size batch

    As someone who has worked with Vc and std::experimental::simd before, I miss the equivalent of a fixed size SIMD array in xsimd. This would be a version of xsimd::batch where I can specify the length at compile time and this length is then subdivided and mapped to the available SIMD register sizes. In Vc and std::experimental::simd, this is solved with an additional ABI tag. The equivalence in xsimd would be the architecture type argument A in xsimd::batch<T, A>.

    As an example, a xsimd::batch<float, fixed_size<12>> may use 3 SSE registers internally when compiled for SSE, or 1 AVX and 1 SSE register when compiled with AVX. A xsimd::batch<float, fixed_size<5>> would use an SSE register and a scalar. Etc.

    Such a construct is very handy when the algorithm dictates a vector length. Or when I need to mix element types of different sizes, e.g. a loop over arrays with float and double. In the latter case I could use xsimd::batch<float> and xsimd::batch<double, fixed_size<xsimd::batch<float>::size>> to ensure that both batches have the same number of elements.

    Would it be possible to add such a construct? Thank you!

    opened by bernhardmgruber 1
  • error_gamma_test fails on macOS

    error_gamma_test fails on macOS

    Hello, I'm packaging xsimd 8.1.0 in Nix package manager (https://github.com/NixOS/nixpkgs/pull/187380), and our CI indicate that both M1 and Intel Mac has 1 test case failed (but they failed on different test case)

    aarch64: link to CI log

    [ RUN      ] error_gamma_test/arm_double.gamma
    /tmp/nix-build-xsimd-8.1.0.drv-0/source/test/test_error_gamma.cpp:144: Failure
    Expected equality of these values:
      diff
        Which is: 5
      0
      while testing lgamma (negative input)
    [  FAILED  ] error_gamma_test/arm_double.gamma, where TypeParam = xsimd::batch<double, xsimd::neon64> (3 ms)
    

    x86_64: link to CI log

    [ RUN      ] error_gamma_test/fallback_double.gamma
    /tmp/nix-build-xsimd-8.1.0.drv-0/source/test/test_error_gamma.cpp:144: Failure
    Expected equality of these values:
      diff
        Which is: 3
      0
      while testing lgamma (negative input)
    [  FAILED  ] error_gamma_test/fallback_double.gamma, where TypeParam = xsimd::batch<double, xsimd::sse4_1> (6 ms)
    

    Do you have any idea? Thank you!

    opened by sifmelcara 1
  • AArch64 Neon float16x4

    AArch64 Neon float16x4

    As I understand, currently xsimd does not support vectors of 16-bit floats. Their support has been recently added by AVX512-FP16, but I'm particularly interested in float16x4 of ARM Neon. What would be the best way to implement it, I appreciate your recommendations!

    opened by dmikushin 2
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 8 Dec 12, 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 20 Oct 19, 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 Jan 1, 2023
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 90 Nov 21, 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 81 Dec 3, 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 81 Jan 4, 2023
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 159 Dec 21, 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 11 Dec 19, 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
null 313 Dec 31, 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 14.2k Jan 2, 2023
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 3.1k Dec 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 11 Oct 5, 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 Jan 7, 2023