Development Resources - simd-everywhere/simde GitHub Wiki
Architecture-Specific
Arm:
- NEON
- MVE/Helium
- SVE
- Arm HPC tools for SVE (resources)
- SVE Vector Length Agnostic (VLA) programming (introductory tutorial)
- ARM C Language Extensions for SVE (reference)
- SVE Programming Examples
x86
- Intel Intrinsics Guide
- AMD64 Architecture Programmer’s Manual
- New “Bulldozer” and “Piledriver” Instructions
POWER
The best documentation I'm aware of right now is the Power Vector Intrinsic Programming Reference. It doesn't show when various functions were added; for that information, see this spreadsheet.
The AltiVec Technology Programming Interface Manual describes the original AltiVec (from 20 years ago), so it doesn't have everything, but it's great if you're a visual learner since there are a lot of diagrams. IBM's XL C/C++ Compiler Reference, specifically the "Vector built-in functions" section in Chapter 8, can also be useful.
z/Architecture
The vector extensions for z/Arch are very similar to the ones for POWER, but more limited. The best documentation I've found is in the z/OS XL C/C++ Programming Guide.
WASM
The most reliable source is probably llvm's wasm_simd128.h
, but it doesn't really include documentation. If you want more than a header, the WebAssembly 128-bit packed SIMD Extension is probably your best bet, but be aware that it doesn't always quite correspond to what is in the header, so you'll want to check the header too.
MIPS
MIPS SIMD has references for the SIMD ISA extensions for both 32 and 64 bit MIPS. The instruction names correspond closely to the names of the intrinsics.
Partly Portable
OpenMP SIMD
- Explicit Vector Programming with OpenMP 4.0 SIMD Extensions (tutorial)
- OpenMP SIMD Directives (reference)
GCC-Style Vector Extensions
Most popular compilers (including GCC, clang, and ICC) support some version of this, but often only a subset. There are several SIMDE_VECTOR_*
macros in simde/simde-common.h
to help you detect which features are available.
Builtins / Intrinsics
SIMDE_CONVERT_VECTOR_
:__builtin_convertvector
(clang & GCC 9+)SIMDE_SHUFFLE_VECTOR_
__builtin_shuffle
(GCC)__builtin_shufflevector
(clang)