2015-10-16 56 views
0

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

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

非常感谢。

+0

是否只有其中之一或它们的数组? – jefflarkin

+0

这是一个数组的结构;只有一个具有这两个分配数组的结构。 –

回答

0

“深度复制”是我们试图在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。