我在这里有一些代码片段,其中我认为正确的没有作为答案给出。我需要一些帮助来澄清这一点。
dotp=0;
for (i=0;i<n;i++){
dotp+= a[i]+b[i];
}
并行化此代码的给定答案是:
dotp=0;
#pragma omp parallel for reduction(+:dotp)
for (i=0;i<n;i++){
dotp+= a[i]+b[i];
}
我认为它需要将 dotp 添加为 firstprivate 才能在 for 循环中可见
dotp=0;
#pragma omp parallel for reduction(+:dotp) firstprivate(dotp)
for (i=0;i<n;i++){
dotp+= a[i]+b[i];
}
如果这不正确,为什么我们不必使用 firstprivate ?