【发布时间】:2019-08-23 19:55:21
【问题描述】:
cudaMemcpy 允许程序员明确指定内存传输的方向。
手动指定内存传输方向(cudaMemcpyDeviceToHost/cudaMemcpyHostToDevice/cudaMemcpyDeviceToDevice)而不是让 cuda 从指针值自动推断(cudaMemcpyDefault)有什么好处吗?
【问题讨论】:
-
手动指定方向允许 cuda 运行时进行一些额外的错误检查。例如,如果您指定 HostToDevice,cuda 运行时可以检查您传递的目标指针是否可以在设备上使用。如果您通过了默认值,并且错误地使用了两个主机指针,您将只获得一个主机->主机数据副本,而没有任何迹象表明有任何问题。
-
好点。我认为如果有静态类型检查来防止主机和设备指针的混合会更好。我有设备指针和内存 API 的包装器。这些确保在编译时不会发生这种无效的混合。文档建议使用
cudaMemcpyDefault而不是手动指定,但没有解释原因。 -
这给我的印象与您在问题中提出的问题不同。在您的问题中,您询问手动规范是否有优势,我对此做出了回应。我无法透露无证信息。如果您希望看到 CUDA 的改进,您可以在 developer.nvidia.com 提交错误报告(在这种情况下针对文档)