C 目标和目标数据之间的差异?如何在没有teams指令的情况下进行teams/threads配置?

C 目标和目标数据之间的差异?如何在没有teams指令的情况下进行teams/threads配置?,c,compiler-construction,parallel-processing,openmp,gpgpu,C,Compiler Construction,Parallel Processing,Openmp,Gpgpu,关于新的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[

关于新的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);
}
extern void init(float*,float*,int);
外部无效输出(浮点*,整数);
无效向量(整数N)
{
int i;
浮点数p[N],v1[N],v2[N];
初始值(v1,v2,N);
#pragma omp目标映射(到:v1,v2)映射(从:p)
#pragma-omp并行
对于(i=0;我找到了第二个问题的答案。
如果我们想在没有teams指令的情况下在target的哪个部分使用parallel,编译器应该生成内核有1个块。另一方面,编译器必须通过块内的线程生成迭代。因此内核应该有许多线程(当然可以使用1个线程)。实现此指令的解决方案

  • 在这种情况下,您可以使用静态线程数创建内核
  • 这没有什么意义,但是可以用1个线程来配置内核
  • 最佳解决方案:)您需要analyzer来决定线程数、维度等
  • 您可以在本文中找到更多解决方案: