我有一个结构A的数组,该数组具有数组和int变量。如何将它们映射到目标
Strcut A{
int **a;
int *x;
int *y;
int ny;
int nx;
}A;
A arrayA = (A*)malloc(sizeof(A)*MaxSize);
for(int i=0; i<MaxSize; i++){
arrayA[i].a = (int**)(malloc(sizeof(int*)*arrayA[i].nx);
for(int j=0; j< arrayA[i].nx; j++)
arrayA[i].a[j] = (int*)(malloc(sizeof(int)*arrayA[i].ny);
arrayA[i].x = (int*)(malloc(sizeof(int)*arrayA[i].ny);
arrayA[i].y = (int*)(malloc(sizeof(int)*arrayA[i].ny);
}
#pragma omp target data map(from:arrayA[i].y) map(to:arrayA[i].x,arrayA[i].a, arrayA[i].ny,arrayA[i].nx)
#pragma omp target teams distribute parallel for
for(i=0;i<MaxSize; i++){
methodA(arrayA[i].x,arrayA[i].a, arrayA[i].ny,arrayA[i].nx, arrayA[i].y);
}
但是,这不起作用。传递arrayA的最佳方法是什么?
我正在使用gcc 8.3
答案 0 :(得分:0)
只需使用
map(tofrom:arrayA)
应该可以解决问题。
如果这不起作用,请向我们提供您收到的错误。
您是否已正确安装目标的软件(nvcc-Nvidia编译器)?请参阅this问题以确保已设置。如果没有,请从here下载该工具包。
编辑:
下面的代码已编译:
typedef struct{
int **a;
int *x;
int *y;
int ny;
int nx;
} A;
A *arrayA = (A*)malloc(sizeof(A) * maxSize);
for(int i=0; i<maxSize; i++){
arrayA[i].a = (int**)(malloc(sizeof(int*)*arrayA[i].nx));
for(int j=0; j< arrayA[i].nx; j++)
arrayA[i].a[j] = (int*)(malloc(sizeof(int)*arrayA[i].ny));
arrayA[i].x = (int*)(malloc(sizeof(int)*arrayA[i].ny));
arrayA[i].y = (int*)(malloc(sizeof(int)*arrayA[i].ny));
}
#pragma omp target data map(tofrom:arrayA)
#pragma omp target teams distribute parallel for
for(int i=0;i<maxSize; i++){
methodA(arrayA[i].x,arrayA[i].a, arrayA[i].ny,arrayA[i].nx, arrayA[i].y);
}