在CUDA文档中,特别是在关于cudaSetDevice
的设备管理部分的CUDA运行时API中,它是这样编写的
使用cudaMallocHost()或cudaHostAlloc()或cudaHostRegister()从此主机线程分配的任何主机内存都将使其生命周期与设备相关联
所以我的问题在这里:
如果我使用cudaHostAlloc
分配主机内存,当前设备是dev 0,然后我将该主机内存转移到dev 1中的设备内存,是否有任何限制或问题?
答案 0 :(得分:3)
在“传统”CUDA内存模型中,如果要在多个上下文中使用映射主机内存分配,则必须使用cudaHostAlloc()
标志使用cudaHostAllocPortable
分配内存。这将使内存在所有上下文中都可移植。
如果您在具有统一寻址支持的平台上运行,那么只要您在该内存的任何cudaMemcpyDefault
操作中使用cudaMemcpy()
,就不必担心它。