openmp on for循环

时间:2013-02-25 19:50:20

标签: c openmp

我有以下代码:

for(i=0; i<num1; i++)
{
 j=i%num2;
 a[j]=do_compute(j);
}

我们假设num2&lt;&lt; NUM1。如果我想使用omp,是否需要使用j作为私有?即如下:

#pragma omp parallel private(i,j)
{
 #pragma omp for
 for(i=0; i<num1; i++)
 {
  j=i%num2;
  a[j]=do_compute(j);
 }
}

或者这就足够了:

#pragma omp parallel
{
 #pragma omp for
 for(i=0; i<num1; i++)
 {
  j=i%num2;
  a[j]=do_compute(j);
 }
}

感谢。

1 个答案:

答案 0 :(得分:0)

如果j仅用于循环范围,我会执行以下操作:

[...]
unsigned int i;
#pragma omp parallel for
for(i = 0; i < num1; ++i)
{
    unsigned int j = i % num2;
    a[j] = do_compute(j);
}
[...]

不要在这里挑剔,但考虑到do_compute是确定性的并且没有副作用,你最好只使用

[...]
unsigned int i;
#pragma omp parallel for
for(i = 0; i < num2; ++i)
    a[i] = do_compute(i);
[...]