【发布时间】:2014-04-10 11:14:28
【问题描述】:
目标构造将代码区域从主机卸载到目标设备。
变量 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);
}
我尝试执行它们,但我无法注意到它们之间的显着差异。
【问题讨论】:
标签: c++ c multithreading parallel-processing openmp