-1

我正在尝试使用 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 屏障。

4

1 回答 1

0

解决方案是微不足道的。并行化没有错误。错误出现在幂函数中。在 c 中 ^ 指的是 XOR。我将其更改为 pow(2,d) 并且效果很好

于 2013-03-28T16:12:52.930 回答