cudaMemcpy
允许程序员显式指定内存传输的方向。
手动指定内存传输方向(cudaMemcpyDeviceToHost
/ cudaMemcpyHostToDevice
/ cudaMemcpyDeviceToDevice
)而不是让cuda从指针值自动推断(cudaMemcpyDefault
)有什么优势吗?
答案 0 :(得分:3)
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
。