From Eigen
Revision as of 15:09, 19 March 2011 by Bjacob (Talk | contribs)

Jump to: navigation, search

The current beta version of Eigen 3.0 is Eigen 3.0-rc1. It was released on March 14, 2011.

The final Eigen 3.0 should be released very soon now. The page release schedule for 3.0 contains all the information about this process. Also follow the tracking bug for the 3.0 release.

Where to get it

Download the source archive there: tar.bz2, tar.gz, zip.

Alternatively, hg users can just do:

 $ hg up 3.0-rc1

Changes between Eigen 3.0 beta4 and rc1

See the ChangeLog.

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!

New in beta3: an even more powerful migration path.

Scope of changes since Eigen 2

We haven't yet written a comprehensive list of changes since Eigen 2. It's huge, it's very exciting, but it has yet to be written :-) To give you a very rough idea, from the time we branched off 2.0 to 3.0-beta3, there have been 2713 changesets. By comparison, we went from scratch to 2.0.0 in just 841 changesets.

Here are just some important points:

  • Core
    • 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).
    • Cholesky: rewritten LLT and LDLT, more reliable and blocking (cache-friendly)
    • Householder: new general module for dealing with householder transformations
    • QR: new column-pivoting and full-pivoting householder QR; blocking (cache-friendly) of non-pivoting householder QR.
    • SVD: new JacobiSVD (very reliable SVD)
    • Eigenvalues: lots of improvements here in speed, reliability and features (TODO: detail that!)
  • Geometry
    • Lots of improvements (TODO: detail that!)
  • 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.

Let us just emphasize that we are absolutely certain that 3.0 is a uniform improvement all across the board, over 2.0. If you find a regression, it is worth reporting it, as we know for sure that there is no reason whatsoever why anything should be slower in Eigen 3.


Use the documentation of the development branch.