What's new in Eigen 3.2.0
Aug 10, 2013
- Dense world:
- New Ref class allowing to write non templated function taking various kind of Eigen dense objects without copies.
- New RealQZ factorization and GeneralizedEigenSolver.
- Add vector-wise normalized and normalize functions, and hasNaN/allFinite members.
- Add mixed static/dynamic-size .block() functions.
- Optimize outer products for non rank-1 update operations.
- Optimize diagonal products (enable vectorization in more cases).
- Improve robustness and performance in JacobiSVD::solve().
- Sparse world:
- New SparseLU module: built-in sparse LU with supernodes and numerical row pivoting (port of SuperLU making the SuperLUSupport module obsolete).
- New SparseQR module: rank-revealing sparse QR factorization with numerical column pivoting.
- New COLAMD ordering and unified ordering API.
- Add support for generic blocks of sparse matrices (read-only).
- Add conservative resize feature on sparse matrices.
- Add uniform support for solving sparse systems with sparse right hand sides.
- Add support for sparse matrix time sparse self-adjoint view products.
- Improve BiCGSTAB robustness with restart.
- Support to external libraries:
- New MetisSupport module: wrapper to the famous graph partitioning library.
- New SPQRSupport module: wrapper to suitesparse's supernodal QR solver.
New in Eigen 3.1.3 (Apr 24, 2013)
- Bug 526 - Fix linear vectorized transversal in linspace.
- Bug 551 - Fix compilation issue when using EIGEN_DEFAULT_DENSE_INDEX_TYPE.
- Bug 533 - Fix some missing const qualifiers in Transpose
- Fix a compilation with CGAL::Gmpq by adding explicit internal:: namespace when calling abs().
- Fix computation of outer-stride when calling .real() or .imag().
- Fix handmade_aligned_realloc (affected conservativeResize()).
- Fix sparse vector assignment from a sparse matrix.
- Fix log(0) with SSE.
- Fix bug in aligned_free with windows CE.
- Fix traits of Map
New in Eigen 3.2.0 Beta 1 (Mar 8, 2013)
- This beta version introduces built-in LU and QR factorizations for sparse matrices, a real-QZ factorization and a generalized eigen solver for dense matrices, a new Ref class to ease writing generic but non-template functions taking Eigen objects as arguments, wrappers to the Metis and SuiteSparse QR libraries, as well as a couple of minor enhancements and bug fixes.
New in Eigen 3.1.2 (Dec 5, 2012)
- Bug 524 - Pardiso's parameter array does not have to be aligned!
- Bug 521 - Disable __cpuidex on architectures different that x86 or x86-64 with MSVC.
- Bug 519 - AlignedBox::dim() was wrong for dynamic dimensions.
- Bug 515 - Fix missing explicit scalar conversion.
- Bug 511 - Fix pretty printers on windows.
- Bug 509 - Fix warnings with gcc 4.7
- Bug 501 - Remove aggressive mat/scalar optimization (was replaced by mat*(1/scalar) for non integer types).
- Bug 479 - Use EISPACK's strategy re max number of iters in Schur decomposition.
- Add support for scalar multiple of diagonal matrices.
- Forward resize() function from Array/Matrix wrappers to the nested expression such that mat.array().resize(a,b) is now allowed.
- Windows CE: fix the lack of the aligned_malloc function on this platform.
- Fix comma initializer when inserting empty matrices.
- Fix dense=sparse*diagonal products.
- Fix compilation with m.array().min(scalar) and m.array().max(scalar).
- Fix out-of-range memory access in GEMV (the memory was not used for the computation, only to assemble unaligned packets from aligned packet loads).
- Fix various regressions with MKL support.
- Fix aliasing issue in sparse matrix assignment.
- Remove stupid assert in blue norm.
- Workaround a weird compilation error with MSVC.
New in Eigen 3.1 (Jun 26, 2012)
- A new set of officially supported sparse modules for the representation, assembly, and solving of sparse problems, including many built-in and third-party sparse linear solvers.
- The ability to seamlessly fallback to Intel MKL for some operations such as including matrix products, dense matrix decompositions, and math array operations.
- These optional backends can be enabled at compile-time.
- Some new coefficient and vector-wise operations, rank update/downdate for LLT and LDLT factorizations, closed form eigen-decompositions, and some memory and performance optimizations.
New in Eigen 3.0.5 (Feb 11, 2012)
- This is a maintenance release with various bug and warning fixes.
New in Eigen 3.0.3 (Oct 7, 2011)
- This version allows the user to specify the pkgconfig destination, makes several improvements to the documentation, and fixes compilation errors when Eigen2 support is enabled, a bug in evaluating expressions of the form matrix1 * matrix2 * scalar1 * scalar2, solutions using LDLT for singular matrices if a solution exists, and an infinite loop when computing SVD of some matrices with very small numbers.
New in Eigen 3.0.2 (Aug 29, 2011)
- Among various minor bug fixes, this release fixes some compilation issues with MinGW, improves the compliance to the C++ standard, and, for windows.h users, it is not necessary to #undef the min/max macros anymore.
New in Eigen 3.0.1 (May 31, 2011)
- In addition to various minor bugfixes, this release brings official support for gcc 4.6 and ARM NEON as well as improved support for custom scalar types.
- The latter includes exceptions safety and the automatic uses of the math functions declared in the scalar type's namespace.
New in Eigen 3.0.0 (Mar 21, 2011)
- 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-riendly) 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.
- Sparse:
- Countless improvements there, but it's still not 100% stable.
- 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.
New in Eigen 3.0 Beta 2 (Oct 18, 2010)
- Complexes are now vectorized (with SSE, AltiVec, and NEON).
- Real*complex matrix products are mixed with vectorization.
- JacobiSVD and least-square solving were improved.
- The Transform class was improved.
- New methods include middleRows(), middleCols(), and TriangularMatrix::conjugate().
- Some unsupported modules were added for OpenGL, MPFR C++, and to add the possibility to extend QuaternionBase.
- Quaternion/double multiplication was vectorized.
- Significant improvements were made to the documentation and compile time errors.
New in Eigen 3.0 Beta 1 (Oct 12, 2010)
- Major API changes.
- Support for ARM NEON instructions. OpenMP support.
- A new Array class for coefficient-wise operations.
- Support for 64-bit indexes.
- Cache size (as reported by cpuid) is used for better performance.
- Many other changes.
New in Eigen 2.0.15 (Oct 12, 2010)
- This version fixes several bugs and compilation problems with miscellaneous toolchains/platforms.
New in Eigen 2.0.12 (Mar 8, 2010)
- EIGEN_DEFAULT_TO_ROW_MAJOR is fully supported and tested.
- Several important fixes for row-major matrices.
- Fix support of several algorithms for mixed fixed-dynamic size matrices where the fixed dimension is greater than the dynamic dimension. For example: Matrix(3,2)
- fix EIGEN_DONT_ALIGN: now it _really_ disables vectorization (was giving a #error unless you also used EIGEN_DONT_VECTORIZE).
- Fix #92: Support QNX's QCC compiler (patch by Piotr Trojanek)
- Fix #90, missing type cast in LU, allow to use LU with MPFR (patch by 'Wolf').
- Fix ICC compiler support: work around a bug present at least in ICC 11.1.
- Compilation fixes for computeInverse() on expressions.
- Fix a gap in a unit-test (thanks to Jitse Niesen)
- Backport improvements to benchmarking code.
- Documentation fixes.