openmp 条件并行循环
Posted
技术标签:
【中文标题】openmp 条件并行循环【英文标题】:openmp conditional parallel loop 【发布时间】: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
循环都只包含一个调用。
【参考方案1】:
使用 OpenMP 的 if
子句有条件地启用并行性:
#pragma omp parallel for if(condition_holds)
for(...)
由于循环体被 OpenMP 实现分离为一个函数,因此您可能会获得一个额外的函数调用的开销。
【讨论】:
并行模式库 (PPL) 是否有类似的功能? @user2399267 ......似乎不错 看起来没有。但是您必须使用 lambda 或某种可调用的方法调用并行算法,因此您可以将其捕获到变量中并从else
子句循环调用它。这应该很容易模板化为parallel_for_if
算法...以上是关于openmp 条件并行循环的主要内容,如果未能解决你的问题,请参考以下文章