在OpenMP中使用非共享外循环嵌套循环

时间:2013-03-26 16:37:42

标签: for-loop parallel-processing openmp nested-loops

我正在尝试将前缀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。

1 个答案:

答案 0 :(得分:0)

解决方案很简单。并行化没有错误。错误发生在电源功能中。在c ^中指的是异或。我将它改为pow(2,d)并且它工作得很好