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

时间:2016-03-31 11:19:59

标签: memory memory-management cuda

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

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

一种选择是试错法,我迭代地减少我尝试分配的金额,直到分配成功。但是,我不太喜欢这个想法。

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

1 个答案:

答案 0 :(得分:4)

  

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

没有。

通过一些试验和错误,您可以得出估计的最大值,比如cudaMemGetInfo()报告的可用内存的80%,并使用它。

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