什么是并行用于不同的for循环?

时间:2013-05-14 18:10:50

标签: parallel-processing openmp

我在这里有一些代码片段,我认为正确的答案并没有给出。我需要一些帮助来澄清这一点。

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?

1 个答案:

答案 0 :(得分:0)

reduction子句将dotp标记为共享并执行最终求和。

for循环中每个共享dotp的初始值为0.汇总的最后一步是添加dotp的先前版本(原始)值,在这种情况下,这是0但它可能是任何价值。

您不需要(也不应该)说它首先是私有的,以强制执行dotp的初始归零。