Zurück zum Ranking

Expressive Vector Engine - SIMD in C++ Goes Brrrr

cppsimdsimd-librarysimd-programmingsimd-parallelismhpccpp-librarysse2ssse3avxavx2altivec
Sterne-Wachstum
Sterne
1.4k
Forks
74
Wochenwachstum
Issues
95
5001k
Jan. 2023März 2024Mai 2025Juli 2026
README

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 to show how C++20 can be used to design and implement an 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 the API and baseline compiler required until the first official 0.1 release. However, we'll try to minimise 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 and has a large feature set for a sensible number of instruction sets. However, some values or performance issues may still remain. Don't hesitate to report any funky code generation or bad optimisations so we can deliver the best performance around.

Current roster of supported Instruction Sets

In terms of SIMD extension sets, we actively support (ie code is optimised and regularly tested) the following:

Full support with tests:

  • Intel
    • SSE2, SSSE3, SSE3, SSE4.1, SSE4.2
    • AVX, AVX2, FMA3
    • AVX512 in Skylake-AVX512 mode (F, CD, VL, DQ, BW)
  • ARM
    • NEON A32 (64 & 128 bits)
    • NEON A64 (64 & 128 bits)
    • ASIMD
    • SVE with fixed sizes of 128, 256 and 512 bits registers.

Partial/In-progress support with minimal checks:

  • PowerPC
    • VMX
    • VSX

We do not support ARM SVE with dynamic size or GPGPU; this is the job of another tool.

Current roster of supported compilers

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

  • Concepts and requires
  • Template lambdas
  • Inline variables
  • Non-Type Template Parameters
  • if constexpr
  • Functions from <bits>

Here is the current minimal compiler version supported:

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

Visual Studio support is currently being added.

The current recommended compiler version are:

Compiler Version
g++ 14 or above
clang++ 19 or above

FAQ

  • Why C++20 ? We want to be able to use modern design components like Concepts and, later, Modules. C++14 is for 2014. We fully know it may hinder adoption in some situations, but we're not running a race. We value proper design and API choice over complex retro-compatibility.

  • Why this instead of std::simd or any other libraries? EVE is a playground for testing proper design and implementation decisions for such libraries. Vc and its standard version are fine work, but we aim to push the envelope regarding API and implementation without standard restrictions. We will try to keep up with standard naming as much as possible.

  • Is this Boost.SIMD v42.69? Yes and no. This reimplementation is based on slightly different premises and some radical new ideas. Our previous Boost exhibited all results.SIMD papers still hold, and we'll try to improve upon.

  • I want to help! That's Good. We need tests on exotic configurations, maybe a stable PPC test machine. Write code, make it fail, and fork and hack away. This will allow us to improve for use cases we may have missed. We would also value input (even harsh ones) on how we use our CI infrastructure or how our CMake looks. We tried our best, but those elements are complex all by themselves.

Bibliographic References

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

  • Modern Generative Programming for Optimizing Small Matrix-Vector Multiplication, Jules Penuchot, Joel Falcou, Amal Khabou in HPCS 2018
  • Boost. simd: generic programming for portable simdization, Pierre Estérie, Joel Falcou, Mathias Gaunard, Jean-Thierry Lapresté, PACT 2012
  • EVE, an object oriented SIMD library, Joel Falcou, Jocelyn Serot in Scalable Computing: Practice and Experience 6 (4)

License

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.
Ähnliche Repositories
practical-tutorials/project-based-learning

Curated list of project-based tutorials

PythonPyPIMIT Licensetutorialproject
274.6k35.4k
CyC2018/CS-Notes

:books: 技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计

algorithmleetcode
cyc2018.xyz
184.8k50.8k
fffaraz/awesome-cpp

A curated list of awesome C++ (or C) frameworks, libraries, resources, and shiny things. Inspired by awesome-... stuff.

MIT Licensecppcppcon
fffaraz.github.io/awesome-cpp/
72.4k8.3k
youngyangyang04/leetcode-master

《代码随想录》LeetCode 刷题攻略:200道经典题目刷题顺序,共60w字的详细图解,视频难点剖析,50余张思维导图,支持C++,Java,Python,Go,JavaScript等多语言版本,从此算法学习不再迷茫!🔥🔥 来看看,你会发现相见恨晚!🚀

Shellleetcodeprogrammer
62k12.3k
azl397985856/leetcode

LeetCode Solutions: A Record of My Problem Solving Journey.( leetcode题解,记录自己的leetcode解题之路。)

JavaScriptnpmOtheralgorithmleetcode
leetcode-solution-leetcode-pp.gitbook.io/leetcode-solution/
55.8k9.4k
WerWolv/ImHex

🔍 A Hex Editor for Reverse Engineers, Programmers and people who value their retinas when working at 3 AM.

C++GNU General Public License v2.0hex-editorreverse-engineering
imhex.werwolv.net
54.2k2.4k
ClickHouse/ClickHouse

ClickHouse® is a real-time analytics database management system

C++Apache License 2.0dbmsolap
clickhouse.com
48.8k8.7k
Light-City/CPlusPlusThings

C++那些事

C++cpluspluscpp
light-city.github.io/stories_things/
43.3k8.8k
LizardByte/Sunshine

Self-hosted game stream host for Moonlight.

C++GNU General Public License v3.0game-streaming-servergame-stream
app.lizardbyte.dev/Sunshine/
39.5k2.1k
aseprite/aseprite

Animated sprite editor & pixel art tool (Windows, macOS, Linux)

C++animationpixel-art
aseprite.org
38.2k8.4k
huihut/interview

📚 C/C++ 技术面试基础知识总结,包括语言、程序库、数据结构、算法、系统、网络、链接装载库等知识及面试经验、招聘、内推等信息。This repository is a summary of the basic knowledge of recruiting job seekers and beginners in the direction of C/C++ technology, including language, program library, data structure, algorithm, system, network, link loading library, interview experience, recruitment, recommendation, etc.

C++Otherinterviewinterview-questions
interview.huihut.com
38.1k8.1k
doocs/leetcode

🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解

JavaMavenCreative Commons Attribution Share Alike 4.0 Internationalalgorithmscpp
leetcode.doocs.org
36.3k9.4k