在多GPU上使用cudaMallocHost / cudaHostAlloc

5
在CUDA文档中,特别是在CUDA Runtime API的设备管理部分关于cudaSetDevice的内容,它被写成这样:
"使用cudaMallocHost()或cudaHostAlloc()或cudaHostRegister()从此主机线程分配的任何主机内存将其生命周期与设备关联"
所以我的问题在于:
如果我使用当前设备为dev 0使用cudaHostAlloc分配主机内存,然后将该主机内存转移到dev 1的设备内存中,是否存在任何限制或问题?

如果你有另外一个问题(并且这是真正不同的问题),请开一个新的问题。不要将它编辑到已经回答和接受的问题中。因为问题已经有一个被接受的答案,人们很可能不会看到新的编辑内容。 - talonmies
1个回答

4
在“传统”的CUDA内存模型中,如果您想在多个上下文中使用映射的主机内存分配,则必须使用cudaHostAlloc()并使用cudaHostAllocPortable标志来分配内存。这将使内存在所有上下文中可移植。
如果您正在运行支持统一寻址的平台,则只要在该内存上进行任何cudaMemcpy()操作时使用cudaMemcpyDefault,则不需要担心它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接