我希望能够直接从GPU0-DDR复制数据到GPU1-DDR,无需通过CPU-RAM进行中转。
正如在第15页上所述:http://people.maths.ox.ac.uk/gilesm/cuda/MultiGPU_Programming.pdf
正如在第15页上所述:http://people.maths.ox.ac.uk/gilesm/cuda/MultiGPU_Programming.pdf
Peer-to-Peer Memcpy
Direct copy from pointer on GPU A to pointer on GPU B
With UVA, just use cudaMemcpy(…, cudaMemcpyDefault)
Or cudaMemcpyAsync(…, cudaMemcpyDefault)
Also non-UVA explicit P2P copies:
cudaError_t cudaMemcpyPeer( void * dst, int dstDevice, const void* src,
int srcDevice, size_t count )
cudaError_t cudaMemcpyPeerAsync( void * dst, int dstDevice,
const void* src, int srcDevice, size_t count, cuda_stream_t stream = 0 )
- 如果我使用
cudaMemcpy()
,那么我必须首先设置一个标志cudaSetDeviceFlags(cudaDeviceMapHost)
吗? - 我必须使用从函数
cudaHostGetDevicePointer(&uva_ptr, ptr, 0)
获得的指针来使用cudaMemcpy()
吗? - 函数
cudaMemcpyPeer()
有什么优势,如果没有任何优势,为什么需要它?
cudaMemcpyPeer(p1, 1, p0, 0, size);
之前,我必须在哪个上下文(setCudaDevice(0 or 1);
)中,是0还是1? - AlexcudaMemcpyPeer
时指定了源设备和目标设备。 - VitalitycudaMemcpyPeerAsync(,,,,stream);
,那么我必须使用setCudaDevice();
设置创建此流的上下文吗? - AlexcudaMemcpyPeerAsync
调用将显示在分配给它的流(和设备)中_,特别是源设备。请参见 Multi-GPU Programming 第 20 页上的示例。 - VitalitycudaMemcpyPeerAsync
参数的stream
已经在点对点异步内存传输的源设备上创建。 - Vitality