Clang does a poor job of optimizing the GEBP microkernel on 32-bit ARM, leading to excessive 16-byte register spills, slowing down basic f32 matrix multiplication by approx 50%. By specializing `gebp_traits`, we can eliminate the register spills. Volatile inline ASM both acts as a barrier to prevent reordering and enforces strict register use. In a simple f32 matrix multiply example, this modification reduces 16-byte spills from 109 instances to zero, leading to a 1.5x speed increase (search for `16-byte Spill` in the assembly in https://godbolt.org/z/chsPbE). This is a replacement of !379. See there for further discussion. Also moved `gebp_traits` specializations for NEON to `Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h` to be alongside other NEON-specific code. Fixes #2138. |
||
|---|---|---|
| bench | ||
| blas | ||
| ci | ||
| cmake | ||
| debug | ||
| demos | ||
| doc | ||
| Eigen | ||
| failtest | ||
| lapack | ||
| scripts | ||
| test | ||
| unsupported | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| .hgeol | ||
| CMakeLists.txt | ||
| COPYING.APACHE | ||
| COPYING.BSD | ||
| COPYING.GPL | ||
| COPYING.LGPL | ||
| COPYING.MINPACK | ||
| COPYING.MPL2 | ||
| COPYING.README | ||
| CTestConfig.cmake | ||
| CTestCustom.cmake.in | ||
| eigen3.pc.in | ||
| INSTALL | ||
| README.md | ||
| signature_of_eigen3_matrix_library | ||
Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms.
For more information go to http://eigen.tuxfamily.org/.
For pull request, bug reports, and feature requests, go to https://gitlab.com/libeigen/eigen.