使用openmp优化循环

时间:2014-10-05 12:51:43

标签: c++ openmp

我有以下循环:

    while (a != b) {
#pragma omp parallel
        {
#pragma omp for
            // first for 
#pragma omp for
            // second for
        }
    }

通过这种方式,团队在每个循环中创建。是否可以重新安排代码以便拥有一个团队? ""在循环内部使用omp原子访问变量," b"是一个常数。

1 个答案:

答案 0 :(得分:2)

我唯一想到的是这样的事情:

#pragma omp parallel
{
  while (a != b) {
  #pragma omp barrier 
  // This barrier ensures that threads 
  // wait each other after evaluating the condition
  // in the while loop
  #pragma omp for
  // first for (implicit barrier)
  #pragma omp for
  // second for (implicit barrier)
  // The second implicit barrier ensures that every 
  // thread will have the same view of a
  } // while
} // omp parallel

通过这种方式每个线程将评估条件,但每个评估将与其他评估一致。如果您真的想要一个线程来评估条件,那么您应该考虑将工作共享构造转换为任务构造。