目标构造将代码区域从主机转移到目标设备。变量 p
,v1
,v2
使用 map 子句显式地映射到目标设备。
那么,“该构造创建将持续存在于目标数据区域中的变量”和“新设备数据环境创建”这两个说法暗示了什么呢?
- “该构造创建将持续存在于目标数据区域中的变量”
- “新设备数据环境创建”
就“目标数据”构造而言,这些代码在卸载机制方面有何不同之处?
void vec_mult1(float *p, float *v1, float *v2, int N)
{
int i;
init(v1, v2, N);
#pragma omp target map(to: v1[0:N], v2[:N]) map(from: p[0:N])
#pragma omp parallel for
for (i=0; i<N; i++)
p[i] = v1[i] * v2[i];
output(p, N);
}
void vec_mult2(float *p, float *v1, float *v2, int N)
{
int i;
init(v1, v2, N);
#pragma omp target device(mic0) data map(to: v1[0:N], v2[:N]) map(from: p[0:N])
{
//this code runs on accelerator card
#pragma omp target //if we omit it what difference will it make ?
#pragma omp parallel for
for (i=0; i<N; i++)
p[i] = v1[i] * v2[i];
}
output(p, N);
}
void vec_mult3(float *p, float *v1, float *v2, int N)
{
int i;
init(v1, v2, N);
#pragma omp target data map(to: v1[0:N], v2[:N]) map(from: p[0:N])
{
//target construct omitted
#pragma omp parallel for
for (i=0; i<N; i++)
p[i] = v1[i] * v2[i];
}
output(p, N);
}
我试图执行它们,但是我无法注意到它们之间的显着区别。