-
Notifications
You must be signed in to change notification settings - Fork 131
Home
The library is developed in C++11. A separate, C++03 branch is provided for compatibility with older compilers. Note that the master branch is unstable. If unsure, use one of the releases or at least the latest beta.
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.
Supported instruction sets: SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, FMA3, FMA4, XOP and NEON
Supported compilers:
-
C++11 version:
- GCC: 4.8.1, 4.7.3
- Clang: 3.3, 3.4
-
C++98 version
- GCC: 4.8.1, 4.7.3
- Clang: 3.3, 3.4
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 asint
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.