0

我有以下代码:

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

让我们假设 num2 << 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);
 }
}

谢谢。

4

1 回答 1

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);
[...]
于 2013-02-25T20:16:34.947 回答