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

Python 交换PyCuda DeviceAllocation对象是个坏主意吗?,python,cuda,pycuda,Python,Cuda,Pycuda,假设我们使用两个调用在设备上分配了相同数量的内存,如下所示: 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, myArr

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

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代码中的大多数设备到设备副本都是不必要的,可以用指针交换来代替。大约唯一不起作用的时间是设备到设备的传输仅将部分源内存复制到目标内存(反之亦然)