我正在使用 PGI 15.7 编译器。我想知道如何通过 OpenACC 将定义的结构从 CPU 复制到 GPU。
typedef struct str_
{
int n;
int m;
int* col; // size [n*m]
double* val; // size [n*m]
}str;
非常感谢。
“深度复制”是我们试图在 3.0 规范中解决的功能。不过,今天以下内容应该对您有用。
#pragma acc enter data copyin(str)
#pragma acc enter data copyin(str.col[:n*m],str.val[:n*m])
...
#pragma acc exit data copyout(str.col[:n*m],str.val[:n*m])
#pragma acc exit data delete(str)
这样做是将结构本身复制到设备,然后复制其中包含的数组。然后我在回来的路上做相反的事情。如果不需要移动数据,可以将 copyin/copyout 替换为 create/delete。