Skip to content
Povilas Kanapickas edited this page Mar 16, 2016 · 26 revisions

Latest release

The library is developed in C++11. Separate branch that uses C++03 and releases based on it are provided for compatibility with older compilers.

For older releases please check out this page

2.0 release candidate

C++11 version

C++03-compatible version

The library supports the following architectures and instruction sets:

  • x86, x86-64: SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, FMA3, FMA4, AVX-512F, XOP
  • ARM, ARM64: NEON
  • PowerPC: Altivec

Supported compilers:

  • C++11 version:

    • GCC: 4.8-5.3
    • Clang: 3.3-3.8
    • MSVC: 2013
    • ICC: 2013, 2015
  • C++98 version

    • GCC: 4.4-5.3
    • Clang: 3.3-3.8
    • MSVC: 2013
    • ICC: 2013, 2015

Clang 3.3 is not supported on ARM. MSVC and ICC are only supported on x86 and x86-64.

Newer versions of the aforementioned compilers will generally work with either C++11 or C++98 version of the library. Older versions of these compilers will generally work with the C++98 version of the library.

Roadmap

Planned future changes:

  • Support for small vectors, such as int32<1>. Rationale: Currently there's no way to specify that we indeed want to perform operation on small number of vector elements. A possible solution is to extract appropriate C++ scalars such as int from the vector types and use regular C++. The problem with that is that often the most efficient way to do this is to keep the data in the SIMD execution domain and simply perform some wider vector operation. This is quite difficult for the compiler to spot. Implementing small vectors would allow to select the most efficient implementation for the target architecture.
Clone this wiki locally