了解cudaMemcpyDeviceToHost

时间:2014-06-11 01:21:21

标签: cuda nvidia

我见过这种cudamemcpy的例子: (cudaMemcpyAsync(m_haParticleID + m_OutputParticleStart,m_daOutputParticleID + m_OutputParticleStart,size,cudaMemcpyDeviceToHost,m_CudaStream)  在上面的例子中我无法理解cudaMemcpyDeviceToHost和cudaMemAsync的过程,任何人都可以建议我“上面的代码如何工作?”

1 个答案:

答案 0 :(得分:2)

cudaMemcpyAsync(m_haParticleID + m_OutputParticleStart,m_daOutputParticleID+ m_OutputParticleStart,size, cudaMemcpyDeviceToHost, m_CudaStream);
  1. cudaMemcpyAsync是一个cuda运行时API调用,通常用于在GPU和主机之间传输数据。此api调用具有Async后缀,因为必须使用cuda stream指定它,并立即将控制权返回给主机线程(在传输实际开始之前)。此功能的主要用途是需要实现某种concurrency,通常在GPU上的数据复制和计算操作之间。
  2. cudaMemcpyDeviceToHost指定数据传输的方向。相同的api调用可用于从主机到设备或从设备到主机的传输。 (它也可以用于从设备内存中的一个位置转移到另一个位置。)
  3. 就像memcpy一样,第一个参数(m_haParticleID + m_OutputParticleStart)是目标指针,第二个参数(m_daOutputParticleID+ m_OutputParticleStart)是源指针
  4. 第三个参数是要传输的字节数
  5. 最后一个参数是cuda流指示符。传输将在该流中的任何先前的cuda函数之后,以及随后向该流发布的任何cuda函数之前进行。即,发送给特定流的cuda呼叫在流中相互序列化。