Line | |
---|
1 | namespace Eigen {
|
---|
2 |
|
---|
3 | /** \eigenManualPage TopicFixedSizeVectorizable Fixed-size vectorizable Eigen objects
|
---|
4 |
|
---|
5 | The goal of this page is to explain what we mean by "fixed-size vectorizable".
|
---|
6 |
|
---|
7 | \section summary Executive Summary
|
---|
8 |
|
---|
9 | An Eigen object is called "fixed-size vectorizable" if it has fixed size and that size is a multiple of 16 bytes.
|
---|
10 |
|
---|
11 | Examples include:
|
---|
12 | \li Eigen::Vector2d
|
---|
13 | \li Eigen::Vector4d
|
---|
14 | \li Eigen::Vector4f
|
---|
15 | \li Eigen::Matrix2d
|
---|
16 | \li Eigen::Matrix2f
|
---|
17 | \li Eigen::Matrix4d
|
---|
18 | \li Eigen::Matrix4f
|
---|
19 | \li Eigen::Affine3d
|
---|
20 | \li Eigen::Affine3f
|
---|
21 | \li Eigen::Quaterniond
|
---|
22 | \li Eigen::Quaternionf
|
---|
23 |
|
---|
24 | \section explanation Explanation
|
---|
25 |
|
---|
26 | 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).
|
---|
27 |
|
---|
28 | 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]".
|
---|
29 |
|
---|
30 | 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.
|
---|
31 |
|
---|
32 | Now, vectorization (both SSE and AltiVec) works with 128-bit packets. Moreover, for performance reasons, these packets need to be have 128-bit alignment.
|
---|
33 |
|
---|
34 | 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.
|
---|
35 |
|
---|
36 | */
|
---|
37 |
|
---|
38 | }
|
---|
Note:
See
TracBrowser
for help on using the repository browser.