我们假设我们使用两个调用在设备上分配了相同数量的内存:
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
答案 0 :(得分:3)
不,这不是一个坏主意,恰恰相反。完全支持PyCUDA中的指针对象交换,这通常是正确的。
通常,CUDA代码中的大多数设备到设备副本都是不必要的,可以通过指针交换替换。关于唯一不起作用的时间是设备到设备传输仅将部分源存储器复制到目标存储器(反之亦然)。