private(i,j)在这段代码中的作用是什么?如果我从私人(i,j)省略i或j,会有任何改变吗?

时间:2017-03-02 18:48:13

标签: c parallel-processing openmp

这是一个在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线程。谢谢。

1 个答案:

答案 0 :(得分:1)

  

私有(i,j)在此代码中的作用是什么?

无。

  

如果我从私人(i,j)省略i或j,会有任何改变吗?

不,因为OpenMP指定了

  

forparallel fortaskloop或{{1}的关联 for-loop(s)中的循环迭代变量构造是(是)私有的。

您不需要显式声明迭代变量是私有的,并且这样做不会改变任何内容。通常,您不能为具有预定数据共享属性的变量声明数据共享属性,但OpenMP会对冗余属性声明的某些情况(包括此情况)发出特殊异常。