什么是最能代表二维数组与本征一起工作的方式?

问题描述 投票:0回答:1

使用Eigen时,最有效的2d矩阵表示方法是什么?我正在C ++ 11或更高版本中针对涉及矩阵矩阵乘法的HPC应用程序进行此操作。

需要在运行时为不同大小的矩阵确定2d矩阵的大小。因此,不能将其硬编码为全局变量。目前,我正在使用静态分配的int[m][n]作为输入,然后在需要时将其转换为本征矩阵。

这里是我可以想到的潜在选项列表:

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更快。

c++ arrays eigen eigen3
1个回答
0
投票

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

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

[内存访问模式也应格外小心,例如:根据在程序的各个阶段中如何遍历数据来组织数据,以使引用的位置最大化。

通常,您仍应进行基准测试并将结果与​​其他方法进行比较。

© www.soinside.com 2019 - 2024. All rights reserved.