我有这样的代码:
#pragma omp parallel
{
#pragma omp single
{
int x;
#pragma omp task depend(inout:x)
{
for (int i = 1; i < 16; i++)
{
#pragma omp task
DoComputationOnPartition(i);
}
#pragma omp taskwait
}
for (int i = 1; i < 16; i++)
{
#pragma omp task depend(in:x)
{
OperateOnPartition(i);
}
}
#pragma omp task depend(inout:x)
{
for (int i =1; i < 16; i++) x++;
}
for (int i = 1; i < 16; i++)
{
#pragma omp task depend(in:x)
{
OperateOnPartition(i);
}
}
#pragma omp taskwait
}
}
我发现主线程永远不会执行嵌套在第一个任务中的 DoComputationOnPartition 任务。有人可以解释一下吗?它应该工作,对吧?#pragma omp taskwait 是一个调度点,因此团队的任何线程都应该能够获得任务。主线程到达最终任务等待,它应该能够获得嵌套任务。他们有足够长的时间来允许这样做。
谢谢。