这是一个在openmp c中转置矩阵的程序,我使用的编译器是gcc。 我分别尝试了私人(i,j)和私人(i)。因为它是线程的,我无法找到确切发生的变化。
#pragma omp parallel for private (i,j)
for(i=1; i<size; i++)
{
#pragma omp parallel for
for(j=0; j<i; j++)
{
temp = mat1[i][j];
mat1[i][j] = mat1[j][i];
mat1[j][i] = temp;
}
}
运行时每次都不同。即使我有双核,我试过5线程。谢谢。
答案 0 :(得分:1)
私有(i,j)在此代码中的作用是什么?
无。
如果我从私人(i,j)省略i或j,会有任何改变吗?
不,因为OpenMP指定了
for
,parallel for
,taskloop
或{{1}的关联 for-loop(s)中的循环迭代变量构造是(是)私有的。
您不需要显式声明迭代变量是私有的,并且这样做不会改变任何内容。通常,您不能为具有预定数据共享属性的变量声明数据共享属性,但OpenMP会对冗余属性声明的某些情况(包括此情况)发出特殊异常。