我正在尝试将前缀sum与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 barrier。
答案 0 :(得分:0)
解决方案很简单。并行化没有错误。错误发生在电源功能中。在c ^中指的是异或。我将它改为pow(2,d)并且它工作得很好