【发布时间】:2011-06-27 19:29:03
【问题描述】:
我正在尝试确定使用 cudaHostAlloc(或 cudaMallocHost?)是否合适。
我正在尝试运行一个内核,其中我的输入数据超过了 GPU 上的可用数据量。
我可以 cudaMallocHost 比 GPU 上更多的空间吗?如果没有,假设我分配了 1/4 我需要的空间(这将适合 GPU),使用固定内存有什么好处吗?
我基本上仍然必须从那个 1/4 大小的缓冲区复制到我的完整大小的 malloc'd 缓冲区中,这可能并不比仅使用普通 cudaMalloc 快吗?
这种典型的使用场景是否适合使用 cudaMallocHost:
- 分配固定的主机内存(我们称之为“h_p”)
- 用输入数据填充 h_p-
- 在 GPU 上为 h_p 获取设备指针
- 使用该设备指针运行内核来修改数组的内容-
- 像平常一样使用 h_p,现在已经修改了内容-
所以 - 在第 4 步和第 5 步之间没有任何副本可以满足,对吧?
如果这是正确的,那么我可以看到至少一次适合 GPU 的内核的优势
【问题讨论】:
-
你似乎在问几个问题......
-
@Derek 为了避免在带有
cudaHostAlloc()的主机中使用不可分页内存(也称为固定内存)时出现副本,您只需使用标志cudaHostAllocMapped而不是cudaHostAllocDefault分配时。通过这种方式,您可以直接从 CUDA C 内核中访问主机内存。这被称为zero-copy memory。固定内存也像一把双刃剑,运行应用程序的计算机需要为每个页面锁定缓冲区提供可用的物理内存,因为这些缓冲区永远无法换出到磁盘,但这会导致更快的内存耗尽。跨度>