我目前正在开发一个CUDA应用程序,如果处理的数据足够大,则会使用尽可能多的全局设备内存(VRAM)。我使用
现在,我的问题是是否有一种方法可以检索我可以连续分配的最大设备内存量。
一种选择是采用试错方法,迭代减少尝试分配的数量,直到成功为止。然而,我不太喜欢这个想法。
背景:我有一个在GPU上执行锥形束CT重建的程序。这些体积可以变得相当大,因此需要在必要时将它们拆分成块。因此,我必须知道最大块的大小,以使它们仍适合全局设备内存。
cudaMalloc3d
分配了一个3D体积,因此我使用的内存必须是连续的。为此,我尝试使用函数cudaMemGetInfo
检索空闲设备内存的数量,然后分配尽可能多的可用内存。但是,这似乎行不通。尝试分配该内存量时仍会出现错误。现在,我的问题是是否有一种方法可以检索我可以连续分配的最大设备内存量。
一种选择是采用试错方法,迭代减少尝试分配的数量,直到成功为止。然而,我不太喜欢这个想法。
背景:我有一个在GPU上执行锥形束CT重建的程序。这些体积可以变得相当大,因此需要在必要时将它们拆分成块。因此,我必须知道最大块的大小,以使它们仍适合全局设备内存。
cudaGetLastError()
,否则后续的 cuda api 调用将会失败,并且再次给出内存不足的错误。我猜这与“非粘性”错误有关。请参考这个答案。@Robert Crovella: 有类似的问题,但它们无法提供一个好的解决方案,并且它们很老(2011年左右),因此期间可能发生了一些变化。 - bweber