update Sat Jun 19 06:37:00 PDT 2010
[pkgsrc.git] / math / eigen2 / DESCR
1 Eigen 2 is a C++ template library for linear algebra: vectors, matrices, and
2 related algorithms. It is:
3 * Versatile. Eigen handles, without code duplication, and in a completely
4   integrated way:
5   o both fixed-size and dynamic-size matrices and vectors.
6   o both dense and sparse (the latter is still experimental) matrices and
7     vectors.
8   o both plain matrices/vectors and abstract expressions.
9   o both column-major (the default) and row-major matrix storage.
10   o both basic matrix/vector manipulation and many more advanced, specialized
11     modules providing algorithms for linear algebra, geometry, quaternions,
12     or advanced array manipulation.
13 * Fast.
14   o Expression templates allow to intelligently remove temporaries and enable
15     lazy evaluation, when that is appropriate -- Eigen takes care of this
16     automatically and handles aliasing too in most cases.
17   o Explicit vectorization is performed for the SSE (2 and later) and AltiVec
18     instruction sets, with graceful fallback to non-vectorized code.
19     Expression templates allow to perform these optimizations globally for
20     whole expressions.
21   o With fixed-size objects, dynamic memory allocation is avoided, and the
22     loops are unrolled when that makes sense.
23   o For large matrices, special attention is paid to cache-friendliness.
24 * Elegant. The API is extremely clean and expressive, thanks to expression
25   templates. Implementing an algorithm on top of Eigen feels like just copying
26   pseudocode. You can use complex expressions and still rely on Eigen to
27   produce optimized code: there is no need for you to manually decompose
28   expressions into small steps.
29 * Compiler-friendy. Eigen has very reasonable compilation times at least with
30   GCC, compared to other C++ libraries based on expression templates and heavy
31   metaprogramming. Eigen is also standard C++ and supports various compilers.