cuda 从CPU到GPU的结构体数组传输

结构体的数组传输,目前的理解是在GPU开辟一块显存,和CPU中的数据的排列顺序一一对应,并在GPU定义一个结构体,能够灵活的访问数据。

现在就以pycudaDemoStruct为例来进行说明。目前指针只用到了一维的,在GPU中定义结构体:

 

在这个结构体中有三个变量datalen__paddingptr。其中ptr是一个指针,datalen指的当前ptr中的数据长度,__padding为占位符无具体意义,为了能够访问到ptr

根据当前结构体的定义,我们可以发现,在这个结构模型中使用的内存空间为4+4+8=16个字节。那么在CPU端申请GPU端的结构体时,一个结构体需要的GPU空间为16个字节。

现在申请GPU内存空间:

 

如图所示,其中DoubleOpStruct.mem_sizeGPU端结构体的空间大小,及16个字节。

在该程序中,向GPU传输数据写在了python的构造函数中,其中array为数组,cuda.to_device(array)array数组传到GPU上,并返回一个GPU地址,之后将返回的地址传到GPU上结构体对应的地址上。 


如图所示,接下来构造第二个结构体 ,即将起始地址移动一个结构体大小,寻找下一个结构体的起始位置,依次类推。

数据传输完成后,就可以在GPU上以结构体的方式访问数据了。 

猜你喜欢

转载自blog.csdn.net/UserName11/article/details/80270395
今日推荐