【发布时间】:2019-04-02 04:54:18
【问题描述】:
我正在尝试在 C 中执行缓存阻塞矩阵转置,但我在代码中遇到了一些问题。我的猜测是它与索引有关。你能告诉我哪里出错了吗?
我正在考虑我在网上找到的这两种算法:http://users.cecs.anu.edu.au/~Alistair.Rendell/papers/coa.pdf 和 http://iosrjen.org/Papers/vol3_issue11%20(part-4)/I031145055.pdf
但我还不知道如何正确编码。
for (i = 0; i < N; i += block) {
for (j = 0; j < i; j += block ) {
for(ii=i;ii<i+block;ii++){
for(jj=j;jj<j+block;jj++){
temp1[ii][jj] = A2[ii][jj];
temp2[ii][jj] = A2[jj][ii];
A2[ii][jj] = temp1[ii][jj];
A2[ii][jj] = temp2[ii][jj];
}
}
}
}
temp1 和 temp2 是两个大小为块 x 块的矩阵,用零填充。
当我将值返回到A2(转置矩阵前后)时,我不确定是否需要再做一次for。
我也试过这个:
for (i = 0; i < N; i += block) {
for (j = 0; j < N; j += block ) {
ii = A2[i][j];
jj = A2[j][i];
A2[j][i] = ii;
A2[i][j] = jj;
}
}
我期待比“天真的”矩阵转置算法有更好的性能:
for (i = 1; i < N; i++) {
for(j = 0; j < i; j++) {
TEMP= A[i][j];
A[i][j]=A[j][i];
A[j][i]=TEMP;
}
}
【问题讨论】:
标签: c caching matrix block transpose