如何在OpenMP中并行使用增量运算符

时间:2016-11-26 01:42:46

标签: openmp

现在我想在满足条件的情况下在所有线程中递增count变量,除了将count变量封装在关键块中还是使用count []作为数组之外,还有更好的方法吗?

    #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
                 }
            }
        }
     }

1 个答案:

答案 0 :(得分:1)

根据Mark的评论,摆脱critical块并用

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

这为每个线程提供了一个私有count,它们独立递增,然后在退出omp parallel块时求和