4

在 CUDA 文档中,特别是在 CUDA Runtime API 的 Device Management about 部分中cudaSetDevice,它是这样写的

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

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

4

1 回答 1

3

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

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

于 2013-02-07T09:59:28.400 回答