Ank*_*kit 7 c++ parallel-processing openmp
我有一个带有C++程序的OpenMP.平行区域包含#pragma omp task平行区域.现在,我想知道如何根据任何正在运行的线程满足的条件终止并行区域.
#pragma omp parallel
{
#pragma omp task
{
//upon reaching a condition i would like to break out of the parallel region. (all threads should exit this parallel region)
}
}
Run Code Online (Sandbox Code Playgroud)
您不能过早终止并行构造.OpenMP没有这方面的构造,它指定并行区域可能只有一个出口点(因此没有分支出区域...).
我认为唯一(理智且可移植)的方法是使用一个变量来指示工作是否已完成,并让线程定期检查该变量(使用原子指令和/或刷新来确保正确的可见性).如果变量指示工作已完成,则线程可以跳过剩余的工作(通过将剩余的工作放在if主体中,如果工作完成则不分支).
有可能编写系统特定的代码,它暂停其他线程并将它们设置到块的末尾(例如,操纵堆栈和指令指针......)但这似乎不太合适(意味着它可能非常脆弱).
如果您告诉我们更多关于您要做什么(以及为什么需要这样做),可能更容易帮助您(例如,通过设计不需要这样做的设计).
| 归档时间: |
|
| 查看次数: |
2823 次 |
| 最近记录: |