mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
The goal of this MR is to implement a generic SIMD backend (packet ops) for Eigen that uses clang vector extensions instead of platform-dependent intrinsics. Ideally, this should make it possible to build Eigen and achieve reasonable speed on any platform that has a recent clang compiler, without having to write any inline assembly or intrinsics. Caveats: * The current implementation is a proof of concept and supports vectorization for float, double, int32_t, and int64_t using fixed-size 512-bit vectors (a somewhat arbitrary choice). I have not done much to tune this for speed yet. * For now, there is no way to enable this other than setting -DEIGEN_VECTORIZE_GENERIC on the command line. * This only compiles with newer versions of clang. I have tested that it compiles and all tests pass with clang 19.1.7. https://clang.llvm.org/docs/LanguageExtensions.html#vectors-and-extended-vectors Closes #2998 and #2997 See merge request libeigen/eigen!2051 Co-authored-by: Rasmus Munk Larsen <rmlarsen@google.com> Co-authored-by: Antonio Sánchez <cantonios@google.com>
This directory contains contributions from various users. They are provided "as is", without any support. Nevertheless, most of them are subject to be included in Eigen in the future. In order to use an unsupported module you have to do either: - add the path_to_eigen/unsupported directory to your include path and do: #include <Eigen/ModuleHeader> - or directly do: #include <unsupported/Eigen/ModuleHeader> If you are interested in contributing to one of them, or have other stuff you would like to share, feel free to contact us: http://eigen.tuxfamily.org/index.php?title=Main_Page#Mailing_list Any kind of contributions are much appreciated, even very preliminary ones. However, it: - must rely on Eigen, - must be highly related to math, - should have some general purpose in the sense that it could potentially become an official Eigen module (or be merged into another one). In doubt feel free to contact us. For instance, if your addons is very too specific but it shows an interesting way of using Eigen, then it could be a nice demo. This directory is organized as follow: unsupported/Eigen/ModuleHeader1 unsupported/Eigen/ModuleHeader2 unsupported/Eigen/... unsupported/Eigen/src/Module1/SourceFile1.h unsupported/Eigen/src/Module1/SourceFile2.h unsupported/Eigen/src/Module1/... unsupported/Eigen/src/Module2/SourceFile1.h unsupported/Eigen/src/Module2/SourceFile2.h unsupported/Eigen/src/Module2/... unsupported/Eigen/src/... unsupported/doc/snippets/.cpp <- code snippets for the doc unsupported/doc/examples/.cpp <- examples for the doc unsupported/doc/TutorialModule1.dox unsupported/doc/TutorialModule2.dox unsupported/doc/... unsupported/test/.cpp <- unit test files The documentation is generated at the same time than the main Eigen documentation. The .html files are generated in: build_dir/doc/html/unsupported/