mirror of
https://gitlab.com/libeigen/eigen.git
synced 2024-12-21 07:19:46 +08:00
85fdcdf055
Removed default parameter from Transform. Removed the TransformXX typedefs. Removed references to TransformXX from unit tests and docs. Assigning Transforms to a sub-group is now forbidden at compile time. Products should now properly support the Isometry flag. Fixed alignment checks in MapBase.
39 lines
1.6 KiB
Plaintext
39 lines
1.6 KiB
Plaintext
namespace Eigen {
|
|
|
|
/** \page 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.
|
|
|
|
*/
|
|
|
|
}
|