1
这是一个在openmp c中转置矩阵的程序,我用的编译器是gcc。 我试了私人(我,j)和私人(我)分开。因为它是线程的,我无法找到准确发生的变化。private(i,j)在这段代码中的作用是什么?如果我从私人(i,j)省略i或j,会有什么变化吗?
#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线程。谢谢。
请参阅http://stackoverflow.com/q/37845291/620382 – Zulan
我会更担心temp的private/shared属性。 –
您是否设置了OMP_NESTED?如果没有,那么内部并行就会被忽略(这可能是你想要的:-)),如果你有,那么你可能会超出你的要求! (开始25个线程)。你最好采用一种在最小范围内声明变量的风格。那么你不必担心私人在这里。 –