【问题标题】:openmp conditional parallel loopopenmp 条件并行循环
【发布时间】:2017-01-03 19:14:45
【问题描述】:

如果某个条件成立,我正在尝试使用 openmp for 循环。如果条件成立,我可以简单地使用 if else 语句来使用并行 for 循环,但是 for 循环中的代码有点长,如果我只使用 if else 语句,它将使代码的长度加倍。所以基本上,我想要一个更好的方法来做到这一点:

if(condition_holds){
   // use parallel for loop
   #pragma omp parallel for
   for(...){
     // Long piece of code
   }
}else{
  // Don't use parallel for loop
  for(...){
    // Long piece of code
  }
}

这样我就不必在 for 循环中编写两次代码了。

【问题讨论】:

  • 你可以用函数或函数对象来包装你的“长代码”,例如拉姆达。两个for 循环都只包含一个调用。

标签: c++ openmp


【解决方案1】:

使用 OpenMP 的 if 子句有条件地启用并行性:

#pragma omp parallel for if(condition_holds)
for(...) {

}

由于循环体被 OpenMP 实现分离为一个函数,因此您可能会获得一个额外的函数调用的开销。

【讨论】:

  • 并行模式库 (PPL) 是否有类似的功能?
  • @user2399267 ......似乎不错 看起来没有。但是您必须使用 lambda 或某种可调用的方法调用并行算法,因此您可以将其捕获到变量中并从 else 子句循环调用它。这应该很容易模板化为parallel_for_if 算法...
猜你喜欢
  • 2013-12-08
  • 1970-01-01
  • 2020-04-16
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 2022-01-19
相关资源
最近更新 更多