diff options
author | Gael Guennebaud <g.gael@free.fr> | 2013-01-06 23:57:54 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2013-01-06 23:57:54 +0100 |
commit | 2abe7d8c6e11a02fc345f6ae464b4b759b092a67 (patch) | |
tree | 32b0a1517731ee705e1d6ee7d8d944740642efbf /doc/FixedSizeVectorizable.dox | |
parent | 091a49cad5d3aed47de9cb78c821c5f11b85e5f8 (diff) |
Rename the dox files: the number prefixes are not needed anymore
Diffstat (limited to 'doc/FixedSizeVectorizable.dox')
-rw-r--r-- | doc/FixedSizeVectorizable.dox | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/doc/FixedSizeVectorizable.dox b/doc/FixedSizeVectorizable.dox new file mode 100644 index 000000000..8ae135173 --- /dev/null +++ b/doc/FixedSizeVectorizable.dox @@ -0,0 +1,38 @@ +namespace Eigen { + +/** \eigenManualPage TopicFixedSizeVectorizable Fixed-size vectorizable Eigen objects + +The goal of this page is to explain what we mean by "fixed-size vectorizable". + +\section summary Executive Summary + +An Eigen object is called "fixed-size vectorizable" if it has fixed size and that size is a multiple of 16 bytes. + +Examples include: +\li Eigen::Vector2d +\li Eigen::Vector4d +\li Eigen::Vector4f +\li Eigen::Matrix2d +\li Eigen::Matrix2f +\li Eigen::Matrix4d +\li Eigen::Matrix4f +\li Eigen::Affine3d +\li Eigen::Affine3f +\li Eigen::Quaterniond +\li Eigen::Quaternionf + +\section explanation Explanation + +First, "fixed-size" should be clear: an Eigen object has fixed size if its number of rows and its number of columns are fixed at compile-time. So for example Matrix3f has fixed size, but MatrixXf doesn't (the opposite of fixed-size is dynamic-size). + +The array of coefficients of a fixed-size Eigen object is a plain "static array", it is not dynamically allocated. For example, the data behind a Matrix4f is just a "float array[16]". + +Fixed-size objects are typically very small, which means that we want to handle them with zero runtime overhead -- both in terms of memory usage and of speed. + +Now, vectorization (both SSE and AltiVec) works with 128-bit packets. Moreover, for performance reasons, these packets need to be have 128-bit alignment. + +So it turns out that the only way that fixed-size Eigen objects can be vectorized, is if their size is a multiple of 128 bits, or 16 bytes. Eigen will then request 16-byte alignment for these objects, and henceforth rely on these objects being aligned so no runtime check for alignment is performed. + +*/ + +} |