[Eigen中文文档] 固定大小的可向量化Eigen对象

简介: 本文主要解释 固定大小可向量化 的含义。

文档总目录

英文原文(Fixed-size vectorizable Eigen objects)

本文主要解释 固定大小可向量化 的含义。

摘要

如果 Eigen 对象具有固定大小且该大小是 16 字节的倍数,则称为 固定大小可向量化

例如:

解释

首先,固定大小 :如果 Eigen 对象的行数和列数在编译时固定,则它具有固定大小。因此,例如 Matrix3f 具有固定大小,但 MatrixXf 没有(与固定大小相对应的是动态大小)。

固定大小的 Eigen 数组是一个普通的 静态数组,它不是动态分配的。例如,Matrix4f 背后的数据只是一个 float array[16]

固定大小的对象通常非常小,这意味着,无论是在内存使用还是速度方面,我们都希望以零运行时开销来处理它们。

矢量化适用于 128 位数据包(例如 SSE、AltiVec、NEON)、256 位数据包(例如 AVX)或 512 位数据包(例如 AVX512)。此外,出于性能原因,如果这些数据包与数据包大小具有相同的对齐方式,即分别为 16 字节、32 字节和 64 字节,则读取和写入这些数据包的效率最高。

所以,固定大小的 Eigen 对象矢量化的最佳方式是,如果它们的大小是 16 字节(或更多)的倍数。则Eigen 将为这些对象请求 16 字节对齐(或更多),并从此依赖这些对齐对象来实现最大效率。

相关文章
|
并行计算 算法 测试技术
[Eigen中文文档] 稠密分解方法目录
本文介绍了 Eigen 提供的处理稠密矩阵分解方法的目录。
133 0
|
编译器 索引
[Eigen中文文档] 块操作
本文介绍了块操作。块是matrix或array的部分矩形元素。块表达式既可以用作右值也可以用作左值。与Eigen表达式一样,如果让编译器进行优化,则块操作的运行时间成本为零。
145 0
|
存储 编译器
[Eigen中文文档] 深入了解 Eigen - 类层次结构
本页面介绍了Eigen类层次结构中 Core 类的设计及其相互关系。一般用户可能不需要关注这些细节,但对于高级用户和Eigen开发人员可能会有用。
285 0
|
存储 算法 NoSQL
[Eigen中文文档] 存储顺序
矩阵和二维数组有两种不同的存储顺序:列优先和行优先。本节解释了这些存储顺序以及如何指定应该使用哪一种。
161 0
|
C++
[Eigen中文文档] 按值将Eigen对象传递给函数
对于 Eigen,这一点更为重要:按值传递固定大小的可向量化 Eigen 对象不仅效率低下,而且可能是非法的或使程序崩溃! 原因是这些 Eigen 对象具有对齐修饰符,在按值传递时会不遵守这些修饰符。
162 0
|
存储 算法 NoSQL
[Eigen中文文档] 稀疏矩阵操作
在许多应用中(例如,有限元方法),通常要处理非常大的矩阵,其中只有少数系数不为零。在这种情况下,可以通过使用仅存储非零系数的特殊表示来减少内存消耗并提高性能。这样的矩阵称为稀疏矩阵。
461 0
|
存储 C语言 C++
|
存储 编译器
[Eigen中文文档] 编写以特征类型为参数的函数(一)
Eigen使用表达式模板的方式导致每个表达式的类型可能都不同。如果将这样的表达式传递给一个需要Matrix类型参数的函数,则表达式将隐式地被评估为一个临时Matrix,然后再传递给函数。这意味着失去了表达式模板的好处。
140 0
|
存储 索引
[Eigen中文文档] 扩展/自定义Eigen(三)
本页面针对非常高级的用户,他们不害怕处理一些Eigen的内部细节。在大多数情况下,可以通过使用自定义一元或二元函数避免使用自定义表达式,而极其复杂的矩阵操作可以通过零元函数(nullary-expressions)来实现,如前一页所述。 本页面通过示例介绍了如何在Eigen中实现新的轻量级表达式类型。它由三个部分组成:表达式类型本身、包含有关表达式编译时信息的特性类和评估器类,用于将表达式评估为矩阵。
134 1