多GPU上的cudaMallocHost/cudaHostAlloc

多GPU上的cudaMallocHost/cudaHostAlloc,cuda,Cuda,在CUDA文档中,特别是在关于cudaSetDevice的设备管理部分的CUDA运行时API中,它是这样写的 使用cudaMallocHost()或cudaHostAlloc()或CUDAHOSTERGISTER()从此主机线程分配的任何主机内存的生存期都将与设备关联 所以我的问题是: 如果我在当前设备为dev 0的情况下使用cudaHostAlloc分配主机内存,然后将该主机内存转移到dev 1中的设备内存,是否存在任何限制或问题?在“传统”CUDA内存模型中,如果您想在多个上下文中使用映射的

在CUDA文档中,特别是在关于
cudaSetDevice
的设备管理部分的CUDA运行时API中,它是这样写的

使用cudaMallocHost()或cudaHostAlloc()或CUDAHOSTERGISTER()从此主机线程分配的任何主机内存的生存期都将与设备关联

所以我的问题是: 如果我在当前设备为dev 0的情况下使用cudaHostAlloc分配主机内存,然后将该主机内存转移到dev 1中的设备内存,是否存在任何限制或问题?

在“传统”CUDA内存模型中,如果您想在多个上下文中使用映射的主机内存分配,必须使用
cudaHostAllocPortable
标志,使用
cudaHostAlloc()
分配内存。这将使内存在所有上下文中都可移植

如果您在具有统一寻址支持的平台上运行,那么只要您在该内存上的任何
cudaMemcpy()
操作中使用
cudaMemcpyDefault
,您就不必担心它。

如果您还有其他问题(这确实是一个不同的问题),请开始一个新问题。不要将其编辑为已回答和接受的问题。人们不太可能看到新的编辑,因为这个问题已经有了公认的答案。