如何通过OpenACC复制用户定义的类型

时间:2015-10-16 16:06:25

标签: memory struct openacc

我正在使用PGI 15.7编译器。我想知道如何通过OpenACC将定义的结构从CPU复制到GPU。

typedef struct str_
{
  int n;       
  int m;      
  int* col;    // size [n*m]
  double* val; // size [n*m]
}str;

非常感谢。

1 个答案:

答案 0 :(得分:0)

" Deep Copy"是我们在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)

这样做是将结构本身复制到设备,然后复制其中包含的数组。然后我在回来的路上做反向。如果您不需要移动数据,可以使用create / delete替换copyin / copyout。