我试图提高转置方阵的效率。这是一种天真的方式(MSIZE是方阵的长度):
int i,j;
for(i=0; i<MSIZE; i++)
for(j=0; j<MSIZE; j++)
d[j][i]=c[i][j];
大约需要7秒钟。
我意识到我可以通过阻止来改进它,所以我成功地完成了它并集成了一些并行化。我把它降到了0.5秒。
int i,j, row, col;
int blocksize = 16;
#pragma omp parallel for private(i, j, row, col) schedule(static, 2)
for ( i = 0; i < MSIZE; i += blocksize) {
for ( j = 0; j < MSIZE; j += blocksize) {
for (row = i; row < i + blocksize && row < MSIZE; row++) {
for (col = j; col < j + blocksize && col < MSIZE; col++) {
d[row][ col] = c[col][row];
}
}
}
}
所以我的目标是尽可能地减少这个。我愿意回到天真的方式并并行化,如果我真的不能并行化阻塞方法。任何想法如何提高时间效率?
由于