所以转置矩阵的显而易见的方法是使用:
for( int i = 0; i < n; i++ )
for( int j = 0; j < n; j++ )
destination[j+i*n] = source[i+j*n];
Run Code Online (Sandbox Code Playgroud)
但是我想要一些能利用局部性和缓存阻塞的东西.我正在查找它并且找不到可以执行此操作的代码,但我被告知它应该是对原始的非常简单的修改.有任何想法吗?
编辑:我有一个2000x2000矩阵,我想知道如何使用两个for循环更改代码,基本上将矩阵拆分为我单独转置的块,比如2x2块或40x40块,并查看哪个块大小最有效.
编辑2:矩阵以列主要顺序存储,即对于矩阵
a1 a2
a3 a4
Run Code Online (Sandbox Code Playgroud)
存储为a1 a3 a2 a4.