我有以下代码:
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);
}
}
感谢。
答案 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);
[...]