jfalcou / eve

Expressive Vector Engine - SIMD in C++ Goes Brrrr
https://jfalcou.github.io/eve/
Boost Software License 1.0
934 stars 56 forks source link
aarch64 altivec avx avx2 cpp cpp-library hpc neon simd simd-library simd-parallelism simd-programming sse2 ssse3

EVE - the Expressive Vector Engine

Licence Discord

Purpose

EVE is a re-implementation of the old EVE SIMD library by Falcou et al. which for a while was named Boost.SIMD. It's a C++20 and onward implementation of a type based wrapper around SIMD extensions sets for most current architectures. It aims at showing how C++20 can be used to design and implement efficient, low level, high abstraction library suited for high performance.

It's a research project first and an open source library second. We reserve the right to change API and baseline compiler required until the first official 0.1 release. However, we'll try to minimize disruption. Semantic versioning will ensure API retro-compatibility if anything huge needs to change.

Getting Started

Video materials

SIMD in C++20: EVE of a new Era - CppCon 2021

SIMD in C++20: EVE of a new Era - CppCon 2021

SIMD Algorithms Design

Playlist by Denis Yaroshevskiy

Current status - Operational

EVE is considered operational: it's usable, has a large feature set for a sensible amount of instruction sets but it's possible some values or performance issues may still remain. Don't hesitate to report any funky code-gen or bad optimizations so we can deliver the best performance around.

Current roster of supported Instruction Sets

In term of SIMD extension sets, we actively supports (ie code is optimized and regularly tested) the following:

Full support with tests:

Partial/In-progress support with minimal checks:

We do not support ARM SVE with dynamic size nor GPGPU, this is the job for another tool.

Current roster of supported compilers

EVE requires a C++ 20 compliant compiler. The main features from C++17/20 we require are:

Here is the current minimal compiler version supported:

Compiler Version
g++ 11 or above
clang++ 13 or above
Visual Studio TBD

Visual Studio support is currently being added. Help on the front of setting up appveyor properly is also welcome.

FAQ

Bibliographic References

If you want to refer to EVE, you can currently use those papers (by order of preference in citation). A new, more up-to-date EVE specific journal paper is in the work atm.

Boost Software License

Copyright : EVE Project Contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.