Difference between revisions of "3.0"

From Eigen
Jump to: navigation, search
m (3.0 beta moved to 3.0: Released 3.0!)
Line 1: Line 1:
The current beta version of Eigen 3.0 is '''Eigen 3.0-rc1'''. It was released on March 14, 2011.
+
Eigen 3.0 was released on March 19, 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 [http://eigen.tuxfamily.org/bz/show_bug.cgi?id=25 tracking bug] for the 3.0 release.
+
  
 
== Where to get it ==
 
== Where to get it ==
  
Download the source archive there:
+
See the [[Main_Page#Download|Download]] section on the [[Main_Page]].
[http://bitbucket.org/eigen/eigen/get/3.0-rc1.tar.bz2 tar.bz2],
+
[http://bitbucket.org/eigen/eigen/get/3.0-rc1.tar.gz tar.gz],
+
[http://bitbucket.org/eigen/eigen/get/3.0-rc1.zip zip].
+
 
+
Alternatively, hg users can just do:
+
 
+
  $ hg up 3.0-rc1
+
 
+
== Changes between Eigen 3.0 beta4 and rc1 ==
+
 
+
See the [[ChangeLog#Eigen 3.0-rc1|ChangeLog]].
+
 
+
== API changes between Eigen 2 and Eigen 3 ==
+
 
+
[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!
+
 
+
New in beta3: an even more [http://eigen.tuxfamily.org/dox-devel/Eigen2SupportModes.html 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.
+
== Some important changes between Eigen 2 and Eigen 3 ==
  
Here are just some important points:
 
 
* Core
 
* Core
 +
** Much better API, that will be supported for many years.
 
** Improvements in basic expression template mechanisms allow compilers to generate better code.
 
** 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.
 
** Now using OpenMP when it is enabled, parallelizing crucial code such as matrix-matrix product.
Line 52: Line 28:
 
** Much better, uniform API for setting tolerance threshold in rank-revealing decompositions
 
** Much better, uniform API for setting tolerance threshold in rank-revealing decompositions
 
** LU: new partial-pivoting LU, blocking (cache-friendly).
 
** 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)
 
** Cholesky: rewritten LLT and LDLT, more reliable and blocking (cache-friendly)
 
** Householder: new general module for dealing with householder transformations
 
** 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
 
* Geometry
** Lots of improvements (TODO: detail that!)
+
** 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
 
* BLAS/LAPACK implementation built on Eigen
 
** That's right, Eigen 3 offers a complete BLAS implementation, passing the BLAS test suite!
 
** 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.
 
** And also a partial implementation of LAPACK, passing the relevant LAPACK tests.
 +
* 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 ==
 +
 +
[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!
  
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.
+
For large migrations, an even more [http://eigen.tuxfamily.org/dox-devel/Eigen2SupportModes.html powerful migration path] is provided.
  
 
== Documentation ==
 
== Documentation ==
  
Use the [http://eigen.tuxfamily.org/dox-devel documentation of the development branch].
+
Use the [http://eigen.tuxfamily.org/dox-3.0 documentation of the 3.0 branch].

Revision as of 15:35, 19 March 2011

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.
  • 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.

Documentation

Use the documentation of the 3.0 branch.