2016-11-26 15 views
1

ここで、条件を満たす場合はすべてのスレッドでカウント変数をインクリメントしたいのですが、クリティカルブロックにカウント変数を囲む以外の方法がありますcount []を配列として使用していますか?OpenMPでインクリメント演算子を並列に使用するにはどうすればよいですか?

マルココメントパー
#pragma omp parallel for num_threads(number_of_threads) 
    { 
    int id = omp_get_thread_num();  
    for(i=1; i < ht; i++) { 
     for(j=1; j < wd; j++) { 

       // Some random code 

       double mag = sqrt(a[i] * a[i] + b[j] * b[j]); 

       if(mag > 100) {   
         #pragma omp critical 
         { 
          count++; 
         } 
       } else { 
         // do nothing 
       } 
      } 
     } 
    } 
+3

あなたはおそらくOpenMPの 'reduce'変数を探しています。 –

答えて

1

criticalブロックを取り除くと、これは、各スレッドを与える

#pragma omp parallel for num_threads(number_of_threads) reduction(+:count) 

omp parallelブロックを置き換えるomp parallelブロック

から出るときに、その後独立してインクリメント加算され、民間 count
関連する問題