-1

プレフィックス合計をオープン 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 の各値の後、スレッドを同期する必要があるため、プラグマ バリアを使用しました。

4

1 に答える 1

0

解決策は簡単です。並列化にエラーはありませんでした。エラーは累乗関数にありました。c では ^ は XOR を指します。pow(2,d) に変更したところ、完全に正常に機能しました

于 2013-03-28T16:12:52.930 に答える