交换 PyCuda DeviceAllocation 对象是个坏主意吗?

Is it a bad idea to swap PyCuda DeviceAllocation objects?

假设我们使用如下两个调用在设备上分配了相同数量的内存:

pointerA = cuda_driver.mem_alloc(myArray.nbytes)
pointerB = cuda_driver.mem_alloc(myArray.nbytes)

然后我们将两个 DeviceAllocation 对象的相同数据复制到设备上。

cuda_driver.memcpy_htod(pointerA, myArray)
cuda_driver.memcpy_htod(pointerB, myArray)

然后交换这两个 DeviceAllocation 对象是个坏主意吗?例如,它们可以这样交换:

tempPointer = pointerA
pointerA = pointerB
pointerB = tempPointer

不,这不是一个坏主意,恰恰相反。 PyCUDA 中的指针对象交换得到完全支持,通常是正确的做法。

一般来说,CUDA 代码中的大多数设备到设备的拷贝都是不必要的,可以用指针交换来代替。唯一不起作用的情况是设备到设备的传输仅将部分源内存复制到目标内存(反之亦然)。