Section: New Software and Platforms
Eigen
Functional Description
Eigen is an efficient and versatile C++ mathematical template library for linear algebra and related algorithms. In particular it provides fixed and dynamic size matrices and vectors, matrix decompositions (LU, LLT, LDLT, QR, eigenvalues, etc.), sparse matrices with iterative and direct solvers, some basic geometry features (transformations, quaternions, axis-angles, Euler angles, hyperplanes, lines, etc.), some non-linear solvers, automatic differentiations, etc. Thanks to expression templates, Eigen provides a very powerful and easy to use API. Explicit vectorization is performed for the SSE, AVX, FMA, AVX512, AltiVec, VSX and ARM NEON instruction sets, with graceful fallback to non-vectorized code. Expression templates allow to perform global expression optimizations, and to remove unnecessary temporary objects.
In 2016, we released three revisions of the 3.2 branch, as well as the new 3.3 version that leverages numerous major novel features and improvements. Those include, a novel evaluation mechanism of expressions, support for AVX, FMA, AVX512, VSX and ZVector vector instructions, unaligned vectorization, nvcc/CUDA, more OpenMP parallelism, a fast divide and conquer SVD algorithm, a CompleteOrthogonalDecomposition class for fast minimal norm solving, a LS-CG solver, a fast reciprocal condition number estimators in LU and Cholesky factorizations, LU::transpose()/adjoint() API, support for inplace decompositions, support for matrix-free iterative solvers, new array functions, support for any BLAS/LAPACK libraries as backend, improved support for mixing scalar types, eigenvectors in GeneralizedEigenSolver, a complete rewrite of LinSpaced, a non officially supported but massively used Tensor module with CUDA and OpenCL support, and more.