英文原文(Fixed-size vectorizable Eigen objects)
本文主要解释 固定大小可向量化
的含义。
摘要
如果 Eigen
对象具有固定大小且该大小是 16 字节的倍数,则称为 固定大小可向量化
。
例如:
- Eigen::Vector2d
- Eigen::Vector4d
- Eigen::Vector4f
- Eigen::Matrix2d
- Eigen::Matrix2f
- Eigen::Matrix4d
- Eigen::Matrix4f
- Eigen::Affine3d
- Eigen::Affine3f
- Eigen::Quaterniond
- Eigen::Quaternionf
解释
首先,固定大小
:如果 Eigen 对象的行数和列数在编译时固定,则它具有固定大小。因此,例如 Matrix3f
具有固定大小,但 MatrixXf
没有(与固定大小相对应的是动态大小)。
固定大小的 Eigen 数组是一个普通的 静态数组
,它不是动态分配的。例如,Matrix4f
背后的数据只是一个 float array[16]
。
固定大小的对象通常非常小,这意味着,无论是在内存使用还是速度方面,我们都希望以零运行时开销来处理它们。
矢量化适用于 128 位数据包(例如 SSE、AltiVec、NEON)、256 位数据包(例如 AVX)或 512 位数据包(例如 AVX512)。此外,出于性能原因,如果这些数据包与数据包大小具有相同的对齐方式,即分别为 16 字节、32 字节和 64 字节,则读取和写入这些数据包的效率最高。
所以,固定大小的 Eigen 对象矢量化的最佳方式是,如果它们的大小是 16 字节(或更多)的倍数。则Eigen 将为这些对象请求 16 字节对齐(或更多),并从此依赖这些对齐对象来实现最大效率。