0

OpenMp プログラムを作成しようとしています。100回繰り返すforループがあります。私はそれを10のスレッドに分けました。各スレッドは 10 回の反復を実行し、いくつかの条件に基づいていくつかのカウントを生成します。したがって、このロジックに従って、各スレッドは独自のカウントを生成します。

私が望むのは、このカウントを、すべてのスレッドからのすべてのカウントの合計を保持する変数にコピーすることだけです。この変数(共有)をループに書き込むようにすると、スレッドがシリアル化されると思います。各スレッドの最後のカウントをグローバル変数にコピーしたいだけです。このようにして、10 個の割り当てステートメントのみをシリアル化します。使用しようとしましlastprivateたが、自分の要件に合わせて使用​​する方法について混乱しています。

これが私のコードです

#pragma omp parallel for private(i) schedule(dynamic) shared(count)
for (i = 1; i <= 100 ; i++)
{
    if(i%2==0)
        count++; 
}
printf("Total = %d \n", count);
4

1 に答える 1

5

削減を使用する必要があります

int count = 0;
int i;
#pragma omp parallel for private(i) schedule(dynamic) reduction(+:count)
for (i = 1; i <= 100 ; i++)
    if(i%2==0)
        count++; 
于 2013-01-28T19:54:26.970 に答える