如何使用可变大小的二维数组与 Eigen 一起工作?

how to use 2d array of variable size to work with Eigen?

我在 C++11 或更高版本中为涉及单机矩阵乘法 运行 的应用程序做这件事。

对于不同大小的矩阵,需要在运行时确定二维矩阵的大小。所以它不能被硬编码为全局变量。

以下是我能想到的潜在选项列表:

1. std::array
2. std::vector
3. statically-allocated array on stack
4. dynamically-allocated array on heap(with new?) 
5. use Eigen built-in matrix representation from the beginning(avoid casting back and forth when using option 1- option 4 )

追问:如果矩阵的大小可以装入栈呢?我正在考虑选项 3,因为当需要多个内存分配时它比选项 4 更快。

静态分配的数组效果最好,因为内存分配相对昂贵。 实际上,如果您可以在不需要进一步释放和分配的情况下重用堆分配数组,那么仍然可以为此目的使用堆分配数组。

此外,如果您想要内存访问性能,您还应该关心 CPU 缓存。如果您有一个缓存行对齐的矩阵,您将有更多机会获得性能提升,这是为了防止写入一个数据变量使缓存行无效,该缓存行还包含另一个线程使用的另一个变量。

还应注意内存访问模式,例如:根据数据在程序各个阶段的遍历方式组织数据,以最大限度地提高引用的局部性。

一般来说,您仍然应该进行基准测试并将您的结果与其他方法进行比较。