The current beta version of Eigen 3.0 is Eigen 3.0-rc1. It was released on March 14, 2011.
Where to get it
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:
- 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...
- 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
- 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!)
- 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.