确定可以连续分配的最大 GPU 设备内存量

bwe*_*ber 4 memory memory-management cuda

我目前正在开发一个 CUDA 应用程序,如果处理的数据足够大,它将使用尽可能多的全局设备内存 (VRAM)。我分配的是一个 3D 卷cudaMalloc3d,所以我使用的内存必须是连续的。为此,我尝试使用该函数检索空闲设备内存的数量,cudaMemGetInfo然后分配尽可能多的空闲内存。但是,这似乎不起作用。尝试分配该数量的内存时,我仍然遇到错误。

现在,我的问题是是否有办法检索我可以连续分配的最大设备内存量。

一种选择是试错法,我反复减少我尝试分配的数量,直到分配成功。但是,我不太喜欢这个想法。

背景:我有一个程序可以在 GPU 上进行锥束 CT 重建。这些卷可能会变得非常大,因此我在必要时将它们分成块。因此,我必须知道一个块最多可以有多大才能仍然适合全局设备内存。

Rob*_*lla 5

现在,我的问题是是否有办法检索我可以连续分配的最大设备内存量。

那没有。

通过一些反复试验,您可以得出估计的最大值,例如 80% 报告的可用内存cudaMemGetInfo(),然后使用它。

的情况cudaMalloc 通常类似于主机端分配器,例如malloc。如果您向主机操作系统查询可用内存,然后尝试在一次malloc调用中分配所有内存,则可能会失败。

  • 迭代方法确实是最好的方法。将 cudaMemGetInfo 设为免费,并以 1MiB 为增量递减,直到分配调用成功。这就是我总是这样做的方式 (3认同)
  • @user1488118:这完全取决于错误是什么。我不会调试我在评论中没有看到的代码。如果您有重现案例,请发布新问题。 (2认同)