Eigen Changelog

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.