我正在尝试使用 open mp 并行化前缀总和。我的代码是
int a ,rem,d;
#pragma omp parallel private (a,rem,d)
for( d =0 ; d < N ; ++d) //need not parallelize
{
#pragma omp barrier
#pragma omp for
for (int k = 1; k <= size ; ++k) //has to be parallelized
{
a = k + (2 ^ (d+1))-1;
rem = a % (2^d);
if ( rem == 0 && a <= size)
{
b = k;
first[a]+= first[b];
}
}
}
运行代码时出现浮动异常错误。当我使用 d 的值时,我相信错误在 int rem 中。有人可以帮助我。在 d 的每个值之后,必须对线程进行同步,所以我使用了 pragma 屏障。