目标和目标数据之间的差异?如何在没有团队指令的情况下进行团队/线程配置?

问题描述 投票:0回答:1

我有 2 个关于新 OpenMP 4.0 的问题。

第一个是我不明白目标和目标数据有什么区别?根据目标数据规范创建新的数据环境。那么数据环境是怎样的呢?顺便问一下,我们可以将 OpenMP 目标数据比作 OpenACC 数据指令吗?

第二个问题如下:

extern void init(float*, float*, int);
extern void output(float*, int);
void vec_mult(int N)
{
   int i;
   float p[N], v1[N], v2[N];
   init(v1, v2, N);
   #pragma omp target map(to: v1, v2) map(from: p)
   #pragma omp parallel for
   for (i=0; i<N; i++)
      p[i] = v1[i] * v2[i];
   output(p, N);
}

根据此示例,没有团队指令。那么OpenMP编译器应该如何配置设备内核呢?如果我们谈论 CUDA,调用可能类似于“kernel_func<<<1,1>>>”

c parallel-processing openmp gpgpu
1个回答
0
投票

我找到了第二个问题的答案。

如果我们想在 target 内部使用 parallel for 而没有 teams 指令,编译器应该生成具有 1 个块的内核。另一方面,编译器必须通过块内的线程产生迭代。因此内核应该有许多线程(当然也可以使用 1 个线程)。实施该指令的解决方案,

  1. 在这种情况下,您可以创建具有静态线程数的内核。
  2. 这没有意义,但可以用 1 个线程配置内核。内核调用<<<1,1>>>(参数1,参数2,...)
  3. 最佳解决方案:)您需要分析器来确定线程数、尺寸等。

您可以在本文中找到更多解决方案: http://rosecompiler.org/ROSE_ResearchPapers/Liao-OpenMP-Accelerator-Model-2013.pdf

© www.soinside.com 2019 - 2024. All rights reserved.