C++ 等待OpenMP任务在隐式障碍下完成?
如果我创建了一组OpenMP任务,并且没有使用C++ 等待OpenMP任务在隐式障碍下完成?,c++,c,task,openmp,barrier,C++,C,Task,Openmp,Barrier,如果我创建了一组OpenMP任务,并且没有使用taskwait,那么程序在哪里等待该任务完成?考虑下面的例子: #pragma omp parallel { #pragma omp single { for (int i = 0; i < 1000; i++) { #pragma omp task ... // e.g., call some independent function } // no tas
taskwait
,那么程序在哪里等待该任务完成?考虑下面的例子:
#pragma omp parallel
{
#pragma omp single
{
for (int i = 0; i < 1000; i++) {
#pragma omp task
... // e.g., call some independent function
}
// no taskwait here
}
// all the tasks completed now?
}
#pragma omp并行
{
#布拉格omp单曲
{
对于(int i=0;i<1000;i++){
#pragma-omp任务
…//例如,调用一些独立函数
}
//没有任务在这里等
}
//现在所有的任务都完成了吗?
}
程序是否在单个
块末尾的隐式屏障处等待任务完成?我假设是这样,但在OpenMP规范中找不到有关此问题的任何信息
编辑
来自OpenMP规范中的屏障说明:
执行绑定并行区域的团队的所有线程必须
执行屏障区域并完成所有显式
在允许任何任务继续之前绑定到此并行区域的任务
超越障碍的执行
但是,这并不表示我是负责任务完成还是OpenMP运行时为我负责。OpenMP中的任务完成是隐式的,而不是显式的(1.2.5任务术语)
任务完成任务完成发生在与生成任务的构造相关联的结构化块结束时
在单个
工作共享结构的末尾有一个隐式屏障。正如你提到的,障碍等待明确的任务。因此,所有任务都将在单个块的末尾完成。谢谢。我没想到这会在规范的术语表部分定义。