首页 文章

cudaMallocManaged vs cudaMalloc - 设备内存限制方案

提问于
浏览
2

据我所知, cudaMallocManaged 通过消除主机和设备上显式内存分配的需要,简化了内存访问 . 考虑主机内存明显大于设备内存的情况,例如16 GB主机和2 GB设备,这些现在相当常见 . 如果我正在处理从外部数据源读取的大尺寸输入数据,例如4-5 GB . 我是否被迫采用明确的主机和设备内存分配(因为设备内存不足以同时容纳)或者CUDA统一内存模型是否有办法解决这个问题(例如,根据需要自动分配/解除分配)?

1 回答

  • 6

    我是否被迫采用显式主机和设备内存分配?

    您不必使用显式主机和设备内存分配,但您将被迫手动处理分配的内存量 . 这是因为,至少在当前硬件上,CUDA统一虚拟内存不允许您超额预订GPU内存 . 换句话说,一旦分配的内存超过设备上可用的内存, cudaMallocManaged 将失败 . 但是,这并没有使用 cudaMallocManaged ,它只是意味着您必须通过"streaming"数据跟踪分配的内存量并且永远不会超过设备可以支持的内存,而不是一次性分配所有内容 .

    纯粹的猜测,因为我不能代表NVIDIA,但我相信这可能是未来硬件未来的改进之一 .


    事实上,在上述预测之后一年半,从CUDA 8开始,Pascal GPU现在增强了页面错误功能,允许内存页面在主机和设备之间进行迁移,而无需程序员的明确干预 .

相关问题