0

我正在尝试使用 openmp 编写一个程序,其中结构块是一个 while 循环。

#pragma omp parallel num_threads(x)
while(condition){

}

我必须决定编写任何线程停止条件的方式。我需要知道在 while 循环中使用 break 语句是否合适。

4

2 回答 2

4

我认为最好使用 omp 取消。

该代码看起来与此类似。

#pragma omp parallel
{       
    while(true) {
        #pragma omp cancellation point parallel

        // Do the heavy work

        if(condition==false) {
            #pragma omp cancel parallel
        }
    }
}
于 2018-03-22T15:03:07.713 回答
1

你的问题有点不完整。你说“任何线程都会停止的条件”,但是数学之后呢:

  1. 其余的线程也应该退出。
  2. 其余的线程应该继续,直到它们符合条件。

情况1:

bool abort = 0;
#pragma omp parallel num_threads(x) private(abort)
{
   while(!abort)
   {
      // The work you need to do.
      #pragma omp critical
      {
          if(condition==false)
          {
             abort = 1; 
          }
      }
   }
}

案例二:

#pragma omp parallel num_threads(x)
{
    while(condition)
   {
        // The work you need to do.
   }
}
于 2013-04-07T08:05:23.947 回答