Difference between revisions of "3.0"

From Eigen
Jump to: navigation, search
(New page: 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....)
 
Line 14: Line 14:
 
   $ hg up 3.0-beta1
 
   $ hg up 3.0-beta1
  
== Changes since Eigen 2 ==
+
== API changes since Eigen 2 ==
  
We haven't yet written a list of changes since Eigen 2.
+
[http://eigen.tuxfamily.org/dox-devel/Eigen2ToEigen3.html 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
 +
[http://eigen.tuxfamily.org/dox-devel/Eigen2ToEigen3.html 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. While the current beta status and scarcity of documentation and benchmarks may

Revision as of 05:19, 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. While the current beta status and scarcity of documentation and benchmarks may