В чем разница между cudaMemcpy () и cudaMemcpyPeer () для P2P-копирования?

Я хочу скопировать данные из GPU0-DDR в GPU1-DDR напрямую, без CPU-RAM.

Как сказано здесь на странице-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 )?Должен ли я использоватьcudaMemcpy() указатели, которые я получил в результате функцииcudaHostGetDevicePointer(& uva_ptr, ptr, 0)?Есть ли преимущества функцииcudaMemcpyPeer()и если нет никаких преимуществ, зачем это нужно?

Ответы на вопрос(1)

Ваш ответ на вопрос