我正在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缓存。如果您有一个与高速缓存行对齐的矩阵,则将有更多的性能提高机会,这是为了防止写入一个数据变量使高速缓存行无效,该高速缓存行还包含另一个线程使用的另一个变量。
[内存访问模式也应格外小心,例如:根据在程序的各个阶段中如何遍历数据来组织数据,以使引用的位置最大化。
通常,您仍应进行基准测试并将结果与其他方法进行比较。