多 GPU 上的 cudaMallocHost / cudaHostAlloc

xno*_*nov 5 cuda

在 CUDA 文档中,特别是在设备管理部分的 CUDA Runtime API 中cudaSetDevice,它是这样写的

使用 cudaMallocHost() 或 cudaHostAlloc() 或 cudaHostRegister() 从该主机线程分配的任何主机内存都将具有与设备关联的生命周期

所以我的问题是:如果我使用cudaHostAlloc当前设备分配一个主机内存为 dev 0,然后将该主机内存传输到 dev 1 中的设备内存,是否有任何限制或问题?

tal*_*ies 4

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

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