首先,这是示例代码:
#include <iostream>
int main()
{
int x = 100;
#pragma omp parallel
{
#pragma omp single
{
#pragma omp task depend (in: x)
{ x += 1; }
#pragma omp task depend (out: x)
{ x *= 2; }
}
}
printf("x = %d\n", x); // prints 202
}
据我所知,
task depend(in: x)
应该等待具有depend(out: x)
的任何内容,但似乎并没有发生这种情况。在这种特定情况下,输出结果为
202
,表明先增加x
,然后再加倍。事实上,我尝试了in/out和out/in,以及交换任务定义顺序。无论如何,在/出依赖关系的情况下,任务始终从上到下执行。
我是否误解了
task depend
的含义?
// prints
的注释。 - Zulan