使用OPENMP编写并行代码

时间:2015-03-16 17:37:02

标签: openmp

考虑以下代码段

sum = 0;
for (i=0; i<n; i++)
sum = myfunc(a[i])+ sum;

使用OPENMP编写相应的并行代码段。

我这样做了,

sum = 0;
#pragma omp parallel for
for (i=0; i<n; i++)
sum = myfunc(a[i])+ sum;

我是并行计算的新手。你认为这是对的吗?

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

sum变量将成为争用点,因为每次迭代都会触及它。由于您正在进行减少,因此您应该使用reduction子句让OpenMP知道您希望在所有线程中累积该变量:

sum = 0;
#pragma omp parallel for reduction(+ : sum)
for (i=0; i<n; i++)
  sum = myfunc(a[i])+ sum;