我已经在设备上生成了大量的数据(A [i,j,k]),但我只需要A [i,:,]的一个'slice',并且在常规的CUDA中,用一些指针算术很容易实现。PyCUDA内存寻址:内存偏移量?
pycuda可以做同样的事情吗?即
cuda.memcpy_dtoh(h_iA,d_A+(i*stride))
显然,这是因为那里有完全错误没有大小信息(除非从DEST形状推断),但希望你的想法?
我已经在设备上生成了大量的数据(A [i,j,k]),但我只需要A [i,:,]的一个'slice',并且在常规的CUDA中,用一些指针算术很容易实现。PyCUDA内存寻址:内存偏移量?
pycuda可以做同样的事情吗?即
cuda.memcpy_dtoh(h_iA,d_A+(i*stride))
显然,这是因为那里有完全错误没有大小信息(除非从DEST形状推断),但希望你的想法?
pyCUDA gpuArray类支持一维数组的切片,但不支持需要跨步的较高维(虽然它即将到来)。但是,您可以从gpuarray成员(它是pycuda.driver.DeviceAllocation类型)和gpuArray.dtype.itemsize成员的大小信息访问多维gpuArray中的基础指针。然后你可以做同样类型的指针算术,以获得驱动程序memcpy函数可以接受的东西。
这不是pythonic,但它确实有效(或者至少在我去年做了很多pyCUDA + MPI黑客攻击时)。
在PyCuda中实现的可能性不大。
我认为以下解决方案:
无论如何,我选择了第一个选项,但是让问题开放了几个小时,看看是否有其他人有我们没有想到的神奇解决方案。 – Bolster 2011-04-19 19:16:24
是的,我也这么做,即使超过一周。不是每个人都可以每天阅读 – fabrizioM 2011-04-19 19:46:50