Difference between revisions of "User:Tellenbach/3.4"
From Eigen
Tellenbach (Talk | contribs) |
Tellenbach (Talk | contribs) |
||
Line 1: | Line 1: | ||
+ | == Changes to Supported Modules == | ||
+ | |||
=== Changes that might impact existing code === | === Changes that might impact existing code === | ||
Line 42: | Line 44: | ||
* '''Arm SVE:''' Eigen now supports Arm's [https://developer.arm.com/documentation/101726/0300/Learn-about-the-Scalable-Vector-Extension--SVE-/What-is-the-Scalable-Vector-Extension- Scalable Vector Extension (SVE)]. Currently only fixed-lenght SVE vectors for <code>uint32_t</code> and <code>float</code> are available. | * '''Arm SVE:''' Eigen now supports Arm's [https://developer.arm.com/documentation/101726/0300/Learn-about-the-Scalable-Vector-Extension--SVE-/What-is-the-Scalable-Vector-Extension- Scalable Vector Extension (SVE)]. Currently only fixed-lenght SVE vectors for <code>uint32_t</code> and <code>float</code> are available. | ||
+ | * '''MIPS MSA:''' Eigen now supports the [https://www.mips.com/products/architectures/ase/simd/ MIPS SIMD Architecture (MSA)] | ||
=== Improvements to Eigen Core === | === Improvements to Eigen Core === | ||
Line 50: | Line 53: | ||
** Eigen's GEMM now falls back to GEMV if it detects that a matrix is a run-time vector | ** Eigen's GEMM now falls back to GEMV if it detects that a matrix is a run-time vector | ||
** The performance of matrix products using Arm Neon has been drastically improved (up to 20%) | ** The performance of matrix products using Arm Neon has been drastically improved (up to 20%) | ||
+ | ** Performance of many special cases of matrix products has been improved | ||
+ | |||
+ | === Backend-specific improvements === | ||
+ | |||
+ | * The '''Arm NEON''' backend has been largely improved: | ||
+ | ** It now provides vectorzation for <code>uint64_t</code>, <code>int64_t</code>, <code>uint32_t</code>, <code>int16_t</code>, <code>uint16_t</code>, <code>int16_t</code>, <code>int8_t</code>, and <code>uint8_t</code> | ||
+ | ** It now can emulate `bfloat16` support when using <code>Eigen::bfloat16</code> | ||
+ | ** It now supports emulated and native `float16` when using <code>Eigen::float16</code> | ||
+ | |||
+ | == Changes to Unupported Modules == | ||
+ | |||
+ | === Improvements to EulerAngles === | ||
+ | |||
+ | * EulerAngles can now be directly constructed from 3D vectors | ||
+ | * EulerAngles now provide <code>isApprox()</code> and <code>cast()</code> functions | ||
+ | |||
+ | === Improvements to Polynomials === | ||
+ | |||
+ | * PolynomialSolver can now be used with complex numbers | ||
+ | * The used solver will automatically choose between <code>EigenSolver</code> and <code>ComplexEigenSolver</code> depending on the scalar type used | ||
+ | |||
+ | == Other relevant changes == | ||
+ | |||
+ | * Eigen now provides an option to test with an external BLAS library | ||
+ | * Eigen can now be used with the [https://en.wikipedia.org/wiki/The_Portland_Group PGI Compiler] | ||
+ | * Printing when using GDB has been improved | ||
+ | * Eigen can now detect if a platform supports <code>int128</code> intrinsics |
Revision as of 21:50, 17 August 2021
Changes to Supported Modules
Changes that might impact existing code
- Using float or double for indexing matrices, vectors and array will now fail to compile, ex.:
MatrixXd A(10,10); float one = 1; double a11 = A(one,1.); // compilation error here
New Major Features in Core
- Add c++11 initializer_list constructors to Matrix and Array [doc]:
MatrixXi a { // construct a 2x3 matrix {1,2,3}, // first row {4,5,6} // second row }; VectorXd v{{1, 2, 3, 4, 5}}; // construct a dynamic-size vector with 5 elements Array<int,1,5> a{1,2, 3, 4, 5}; // initialize a fixed-size 1D array of size 5.
- Add STL-compatible iterators for dense expressions [doc]. Some examples:
VectorXd v = ...; MatrixXd A = ...; // range for loop over all entries of v then A for(auto x : v) { cout << x << " "; } for(auto x : A.reshaped()) { cout << x << " "; } // sort v then each column of A std::sort(v.begin(), v.end()); for(auto c : A.colwise()) std::sort(c.begin(), c.end());
- Add C++11 template aliases for Matrix, Vector, and Array of common sizes, including generic
Vector<Type,Size>
andRowVector<Type,Size>
aliases [doc].
MatrixX<double> M; // Instead of MatrixXd or Matrix<Dynamic, Dynamic, double> Vector4<MyType> V; // Instead of Vector<4, MyType>
New Backends
- Arm SVE: Eigen now supports Arm's Scalable Vector Extension (SVE). Currently only fixed-lenght SVE vectors for
uint32_t
andfloat
are available. - MIPS MSA: Eigen now supports the MIPS SIMD Architecture (MSA)
Improvements to Eigen Core
- Eigen now uses c++11 alignas keyword for static alignment. Users targeting C++17 only and recent compilers (e.g., GCC>=7, clang>=5, MSVC>=19.12) will thus be able to completely forget about all issues related to static alignment, including
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
. - Various performance improvements for products and Eigen's GEBP and GEMV kernels have been implemented:
- By using half- and quater-packets the performance of matrix multiplications of small to medium sized matrices has been improved
- Eigen's GEMM now falls back to GEMV if it detects that a matrix is a run-time vector
- The performance of matrix products using Arm Neon has been drastically improved (up to 20%)
- Performance of many special cases of matrix products has been improved
Backend-specific improvements
- The Arm NEON backend has been largely improved:
- It now provides vectorzation for
uint64_t
,int64_t
,uint32_t
,int16_t
,uint16_t
,int16_t
,int8_t
, anduint8_t
- It now can emulate `bfloat16` support when using
Eigen::bfloat16
- It now supports emulated and native `float16` when using
Eigen::float16
- It now provides vectorzation for
Changes to Unupported Modules
Improvements to EulerAngles
- EulerAngles can now be directly constructed from 3D vectors
- EulerAngles now provide
isApprox()
andcast()
functions
Improvements to Polynomials
- PolynomialSolver can now be used with complex numbers
- The used solver will automatically choose between
EigenSolver
andComplexEigenSolver
depending on the scalar type used
Other relevant changes
- Eigen now provides an option to test with an external BLAS library
- Eigen can now be used with the PGI Compiler
- Printing when using GDB has been improved
- Eigen can now detect if a platform supports
int128
intrinsics