From Eigen
Jump to: navigation, search

Eigen 3.0 was released on March 19, 2011.

Where to get it

See the Download section on the Main Page.

Some important changes between Eigen 2 and Eigen 3

  • Core
    • Much better API, that will be supported for many years.
    • Improvements in basic expression template mechanisms allow compilers to generate better code.
    • Now using OpenMP when it is enabled, parallelizing crucial code such as matrix-matrix product.
    • New Array class provides general-purpose arrays and coefficient-wise operations for matrices. Array module merged into Core.
    • Indices are now the size of a pointer, e.g. 64 bit on 64 bit platforms, allowing arbitrarily large matrices and giving faster code (no redundant integer conversions).
    • Cache size parameters can be set at runtime, or are automatically set to sane defaults (using CPUID instruction or equivalent) when first used.
    • Important optimizations in many places, including in matrix-matrix product which is now nearly as fast as Intel MKL and GotoBLAS, including on multi-CPU systems (see above point about OpenMP).
    • Better, more extensible support for various scalar types. All standard integer types (signed and unsigned, from 8 to 64 bits) are supported.
    • Much saner and more comprehensive support for special matrix types: band matrices, permutation matrices...
  • Vectorization
    • Better vectorization logic.
    • Complex numbers are now vectorized.
    • Better quaternion vectorization.
    • New supported platform: ARM NEON
    • Improved SSE support, including use of SSE4 integer multiplication
    • Updated AltiVec support
  • Decompositions
    • Much better, uniform solving API
    • Much better, uniform API for setting tolerance threshold in rank-revealing decompositions
    • LU: new partial-pivoting LU, blocking (cache-friendly).
    • QR: new column-pivoting and full-pivoting householder QR; blocking (cache-friendly) of non-pivoting householder QR.
    • SVD: new JacobiSVD (very reliable SVD)
    • Eigenvalues: New general eigensolver, Schur decomposition, etc. Lots of improvements here in speed, reliability and features.
    • Cholesky: rewritten LLT and LDLT, more reliable and blocking (cache-friendly)
    • Householder: new general module for dealing with householder transformations
  • Geometry
    • Much improved Transform API. It's now much more clear what is an Affine transform, what is a Projective transform, etc.
    • New Umeyama algorithm for finding the Transform mapping one point set to another
    • Allow mapping an array as Quaternion
  • BLAS/LAPACK implementation built on Eigen
    • That's right, Eigen 3 offers a complete BLAS implementation, passing the BLAS test suite!
    • And also a partial implementation of LAPACK, passing the relevant LAPACK tests.
  • Sparse
    • Countless improvements there, but it's still not 100% stable.
  • Tests
    • Much expanded Eigen test suite, now has more than 550 executables
    • Imported the BLAS test suite, as part of ours
    • New 'failtests' check that ill-formed code produces expected compilation errors.

Notice that from when we branched Eigen 2.0 to the 3.0.0 release, there have been 2845 changesets. By contrast, we've gone from scratch to 2.0.0 in just 834 changesets.

API changes between Eigen 2 and Eigen 3

This page details most API changes from Eigen 2 to Eigen 3. It should help you a lot with porting your application.

Notice in particular that, as explained in that page, by just defining EIGEN2_SUPPORT before including Eigen 3 headers, you can get much Eigen 2 code to compile with minimal changes against Eigen 3!

For large migrations, an even more powerful migration path is provided.


Use the documentation of the current stable branch (3.1).