我目前正在开发一个CUDA应用程序,如果处理的数据足够大,它将使用尽可能多的全局设备内存(VRAM)。我正在分配的是使用cudaMalloc3d
的3D卷,因此我使用的内存必须是连续的。为此,我尝试使用函数cudaMemGetInfo
检索可用设备内存量,然后尽可能多地分配。但是,这似乎不起作用。尝试分配这么多内存时,我仍然会遇到错误。
现在,我的问题是是否有办法检索我可以连续分配的最大设备内存量。
一种选择是试错法,我迭代地减少我尝试分配的金额,直到分配成功。但是,我不太喜欢这个想法。
背景:我有一个程序在GPU上进行锥形束CT重建。这些卷可能变得非常大,所以我必要时将它们分成块。因此,我必须知道一个块最多可以保持多大,以便仍然适合全局设备内存。
答案 0 :(得分:4)
现在,我的问题是,是否有办法检索我可以连续分配的最大设备内存量。
没有。
通过一些试验和错误,您可以得出估计的最大值,比如cudaMemGetInfo()
报告的可用内存的80%,并使用它。
cudaMalloc
的情况通常类似于主机端分配器,例如malloc
。如果您向主机操作系统查询可用内存,然后尝试在单个malloc
调用中分配所有内存,则可能会失败。