cudaMemcpy传输类型:默认vs HostToDevice / DeviceToHost

时间:2019-04-02 13:08:25

标签: memory cuda nvidia

cudaMemcpy允许程序员显式指定内存传输的方向。

手动指定内存传输方向(cudaMemcpyDeviceToHost / cudaMemcpyHostToDevice / cudaMemcpyDeviceToDevice)而不是让cuda从指针值自动推断(cudaMemcpyDefault)有什么优势吗?

2 个答案:

答案 0 :(得分:3)

tl; dr:几乎可以肯定没有优势。

UPDATE statistics SET counter = counter + 1 WHERE item = 'someItemId'; 是在GPU开始能够通过检查地址(“统一虚拟地址”)轻松识别内存空间时添加的IIRC。在此之前,您必须指定方向。参见例如CUDA 3文档,该文档可从here访问。在API参考中查找cudaMemcpyKind-无默认值,只有H2H,H2D,D2H和H2H。

当进行此更改时,我认为nVIDIA不必重载该函数或以不同的方式命名它,而只是为新功能添加一个不同的常量值。

我不是100%肯定没有区别,这只是非常合理;从轶事的个人经历讲,我还没有看到任何优势/差异。当然,复制并不快。

答案 1 :(得分:1)

摘自cudaMemcpy()的文档:

  

[...]建议传递cudaMemcpyDefault,在这种情况下,从指针值推断出传输类型。但是,cudaMemcpyDefault仅在支持统一虚拟寻址的系统上允许。 [...]

因此,如果您有一个允许统一虚拟寻址的GPU,请使用cudaMemcpyDefault,否则除了明确之外别无选择。

您可以使用

查询系统是否支持它
  

cudaGetDeviceProperties(),其设备属性为cudaDeviceProp::unifiedAddressing