我有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&lt;&lt;&lt;&lt; 1,1&gt;&gt;&gt;”
答案 0 :(得分:0)
如果我们想在目标内部使用 parallel 而不使用 teams 指令,编译器应该生成内核有1个块。另一方面,编译器必须通过块内部的线程生成迭代。出于这个原因,内核应该有很多线程(当然可以使用1个线程)。实现此指令的解决方案
您可以在本文中找到更多解决方案: http://rosecompiler.org/ROSE_ResearchPapers/Liao-OpenMP-Accelerator-Model-2013.pdf