[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 字节对齐(或更多),并从此依赖这些对齐对象来实现最大效率。

相关文章
|
存储 编译器 C语言
[Eigen中文文档] 对未对齐数组断言的解释
本文将解释程序因断言失败而终止的问题。
579 0
|
编译器 索引
[Eigen中文文档] 块操作
本文介绍了块操作。块是matrix或array的部分矩形元素。块表达式既可以用作右值也可以用作左值。与Eigen表达式一样,如果让编译器进行优化,则块操作的运行时间成本为零。
498 0
|
存储 算法 NoSQL
[Eigen中文文档] 存储顺序
矩阵和二维数组有两种不同的存储顺序:列优先和行优先。本节解释了这些存储顺序以及如何指定应该使用哪一种。
716 0
|
存储 算法 NoSQL
[Eigen中文文档] 稀疏矩阵操作
在许多应用中(例如,有限元方法),通常要处理非常大的矩阵,其中只有少数系数不为零。在这种情况下,可以通过使用仅存储非零系数的特殊表示来减少内存消耗并提高性能。这样的矩阵称为稀疏矩阵。
1066 0
|
存储 C语言 C++
|
并行计算 算法 安全
[Eigen中文文档] Eigen 和多线程
某些 Eigen 算法可以利用硬件中存在的多个内核。
1137 0
[Eigen中文文档] 高级初始化
本文介绍了几种用于初始化矩阵的高级方法。提供了有关之前介绍的逗号初始化程序的更多详细信息。还解释了如何获得特殊矩阵,例如单位矩阵和零矩阵。
503 0
|
存储 NoSQL API
[Eigen中文文档] Matrix类
在Eigen中,所有矩阵和向量都是Matrix模板类的对象。向量只是行数或者列数为1的特殊矩阵。
1063 1
|
安全 编译器 C++
[Eigen中文文档] 矩阵与向量运算
本文章旨在提供有关如何使用 Eigen 在矩阵、向量和标量之间执行算术操作的概述和一些详细信息。
1076 0
|
存储
[Eigen中文文档] Reshape操作
从 Eigen3.4 开始,Eigen 发布了将矩阵或向量重塑为不同大小的便捷方法。所有的操作可以通过 DenseBase::reshaped(NRowsType,NColsType) 和 DenseBase::reshaped() 两个函数完成。这些函数并不直接改变原有的变量,而是返回一个重塑后的变量副本。
483 0