Difference between revisions of "3.0"
(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 | ||
− | == | + | == 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