以下代码基于OpenMP 4.0规范工作:
out和inout依赖类型。生成的任务将是所有之前生成的兄弟任务的依赖任务,这些任务引用了in、out或inout依赖类型列表中的至少一个列表项。
这意味着任务3成为任务2的依赖任务。但这没有意义!为什么一个输入输出依赖的任务要成为一个输入依赖任务的依赖任务呢?
那么,我需要做什么来使它们独立? p.s:在Linux上使用g++ 4.9测试过代码。
out和inout依赖类型。生成的任务将是所有之前生成的兄弟任务的依赖任务,这些任务引用了in、out或inout依赖类型列表中的至少一个列表项。
这意味着任务3成为任务2的依赖任务。但这没有意义!为什么一个输入输出依赖的任务要成为一个输入依赖任务的依赖任务呢?
那么,我需要做什么来使它们独立? p.s:在Linux上使用g++ 4.9测试过代码。
#include <stdio.h>
#include <omp.h>
#include <unistd.h>
int main() {
int x,y;
#pragma omp parallel num_threads(10)
{
#pragma omp single nowait
{
#pragma omp task depend (out:x) //task1
{
x=1;
}
#pragma omp task depend(in:x) depend(out:y) //task2
{
sleep(2); //Does task3 wait for us? Yes!
y=x+1;
}
#pragma omp task depend (inout:x) //task3
{
x++;
printf("task3(x): %d\n" , x);
}
#pragma omp task depend (in:x,y) //task4
{
printf("task4 (x+y): %d\n" , x+y);
}
}
}
return 0;
}