我在设备上有大量生成的数据(A [i,j,k]),但我只需要A [i,:,:]的一个“切片”,在常规CUDA中,这很容易用一些指针算法完成。

pycuda可以做同样的事情吗?即

cuda.memcpy_dtoh(h_iA,d_A+(i*stride))


显然,这是完全错误的,因为没有尺寸信息(除非从目标形状推断出),但希望您能明白这一点?

最佳答案

pyCUDA gpuArray类支持一维数组的切片,但不支持需要跨步的更高维度(尽管即将到来)。但是,您可以从gpuarray成员(即pycuda.driver.DeviceAllocation类型)访问多维gpuArray中的基础指针,并从gpuArray.dtype.itemsize成员获取大小信息。然后,您可以执行与构思相同的指针算术,以获取驱动程序memcpy函数将接受的内容。

它不是很pythonic,但是它确实可以工作(或者至少在去年我做很多pyCUDA + MPI hacking的时候就可以了)。

关于python - PyCUDA内存寻址:内存偏移量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5720376/

10-14 04:50