1

阅读 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
}

尽管tasks 以任意顺序执行,但这些target区域是以原子方式执行的,一次一个区域。

4

0 回答 0