阅读 OpenMP 4 的一些教程,我发现区域可以使用该子句target
参与 CPU 任务的相同依赖关系图。depend
在对 OpenMP 任务进行编程时,我们知道它们可以同时运行。但这在 GPU 上可行吗?GPU 可以同时运行多个target
区域吗?
我试过这段代码:
#include <omp.h>
#include <stdio.h>
int main() {
int i;
#pragma omp parallel
#pragma omp single
{
#pragma omp task private(i)
#pragma omp target
{
for (i = 0; i < 100; i++)
printf("1 %d\n", i);
}
#pragma omp task private(i)
#pragma omp target
{
for (i = 0; i < 100; i++)
printf("2 %d\n", i);
}
#pragma omp task private(i)
#pragma omp target
{
for (i = 0; i < 100; i++)
printf("3 %d\n", i);
}
}
#pragma omp taskwait
}
尽管task
s 以任意顺序执行,但这些target
区域是以原子方式执行的,一次一个区域。