OpenMP Transpose Matrix

时间:2016-05-29 00:54:16

标签: c matrix openmp transpose

我试图提高转置方阵的效率。这是一种天真的方式(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];
            }
        }
    }
}

所以我的目标是尽可能地减少这个。我愿意回到天真的方式并并行化,如果我真的不能并行化阻塞方法。任何想法如何提高时间效率?

由于

0 个答案:

没有答案