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 scalar and complex numbers with the same arithmetic operators and common mathematical functions as for single values.

xsimd makes it easy to write a single algorithm, generate one version of the algorithm per micro-architecture and pick the best one at runtime, based on the running processor capability.

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 also 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 |
3.7 and above |

The following SIMD instruction set extensions are supported:

Architecture |
Instruction set extensions |
---|---|

x86 |
SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, FMA3, AVX2 |

x86 |
AVX512 (gcc7 and higher) |

x86 AMD |
same as above + FMA4 |

ARM |
ARMv7, ARMv8 |

WebAssembly |
WASM |

# Licensing

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.