Libsimdpp reference

From libsimdpp-docs
Libsimdpp documentation

libsimdpp is a portable header-only zero-overhead C++ wrapper around single-instruction multiple-data (SIMD) intrinsics found in many compilers. The library presents a single interface over several instruction sets in such a way that the same source code may be compiled for different instruction sets. The resulting object files then may be hooked into internal dynamic dispatch mechanism.


The library resolves differences between instruction sets by implementing the missing functionality as a combination of several intrinsics. Moreover, the library supplies a lot of additional, commonly used functionality, such as various variants of matrix transpositions, interleaving loads/stores, optimized compile-time shuffling instructions, etc. Each of these are implemented in the most efficient manner for the target instruction set. Finally, it's possible to fall back to native intrinsics when necessary, without compromising maintanability.


The library sits somewhere in the middle between programming directly in intrinsics and even higher-level SIMD libraries. As much control as possible is given to the developer, so that it's possible to exactly predict what code the compiler will generate.

Instruction sets

Deprecations

Types

Capabilities

Utilities

Conversions

Bitwise operations

Floating-point operations

Operators

+  -   *  /   <<  >>
&  |   ^  ~
==  !=   >  >=   <  <=

Integer operations

Memory access

Shuffle operations

Miscellaneous operations