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 に答える