Difference between revisions of "3.0"

From Eigen
Jump to: navigation, search
Line 52: Line 52:
  
 
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.
 
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.
 +
 +
== Documentation ==
 +
 +
Use the [http://eigen.tuxfamily.org/dox-devel documentation of the development branch].

Revision as of 05:33, 6 July 2010

Eigen 3.0-beta1 was released on July 5, 2010.

This is the first beta of the upcoming Eigen 3.0 which should be released in a few months. There will be at least a second beta before 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-beta1

API changes since Eigen 2

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!

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 :-) The Todo for 3.0 page tracks some ongoing changes, but is by no means exhaustive. What is listed on that page represents perhaps 30%-40% of the changes from Eigen 2.0 to 3.0. To give you a very rough idea, from the time we branched off 2.0 to this 3.0-beta1, there have been 2063 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
    • 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), improved SVD
    • Eigenvalues: lots of improvements here in speed, reliability and features (TODO: detail that!)
  • Geometry
    • Lots of improvements (TODO: detail that!)

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.

Documentation

Use the documentation of the development branch.