我在设备上有大量生成的数据(A [i,j,k]),但我只需要一个'切片'的A [i,:,],并且在常规的CUDA中可以通过一些指针算法轻松完成。
在pycuda中可以做同样的事情吗?即
cuda.memcpy_dtoh(h_iA,d_A+(i*stride))
显然这是完全错误的,因为没有大小信息(除非从dest形状推断),但希望你能得到这个想法?
答案 0 :(得分:2)
pyCUDA gpuArray类支持切割一维数组,但不支持需要步长的更高维度(尽管它即将到来)。但是,您可以从gpuarray成员访问多维gpuArray中的基础指针,该成员是pycuda.driver.DeviceAllocation类型,以及来自gpuArray.dtype.itemsize成员的大小信息。然后,您可以执行相同类型的指针运算,以获得驱动程序memcpy函数将接受的内容。
它不是非常pythonic,但它确实有效(或者至少它是去年我做了很多pyCUDA + MPI黑客攻击时)。
答案 1 :(得分:0)
不太可能在PyCuda中实现。
我可以考虑以下解决方案: