31 lines
1.8 KiB
Text
31 lines
1.8 KiB
Text
Eigen 3 is a C++ template library for linear algebra: vectors, matrices, and
|
|
related algorithms. It is:
|
|
* Versatile. Eigen handles, without code duplication, and in a completely
|
|
integrated way:
|
|
o both fixed-size and dynamic-size matrices and vectors.
|
|
o both dense and sparse (the latter is still experimental) matrices and
|
|
vectors.
|
|
o both plain matrices/vectors and abstract expressions.
|
|
o both column-major (the default) and row-major matrix storage.
|
|
o both basic matrix/vector manipulation and many more advanced, specialized
|
|
modules providing algorithms for linear algebra, geometry, quaternions,
|
|
or advanced array manipulation.
|
|
* Fast.
|
|
o Expression templates allow to intelligently remove temporaries and enable
|
|
lazy evaluation, when that is appropriate -- Eigen takes care of this
|
|
automatically and handles aliasing too in most cases.
|
|
o Explicit vectorization is performed for the SSE (2 and later) and AltiVec
|
|
instruction sets, with graceful fallback to non-vectorized code.
|
|
Expression templates allow to perform these optimizations globally for
|
|
whole expressions.
|
|
o With fixed-size objects, dynamic memory allocation is avoided, and the
|
|
loops are unrolled when that makes sense.
|
|
o For large matrices, special attention is paid to cache-friendliness.
|
|
* Elegant. The API is extremely clean and expressive, thanks to expression
|
|
templates. Implementing an algorithm on top of Eigen feels like just copying
|
|
pseudocode. You can use complex expressions and still rely on Eigen to
|
|
produce optimized code: there is no need for you to manually decompose
|
|
expressions into small steps.
|
|
* Compiler-friendy. Eigen has very reasonable compilation times at least with
|
|
GCC, compared to other C++ libraries based on expression templates and heavy
|
|
metaprogramming. Eigen is also standard C++ and supports various compilers.
|