在使用 CUDA 的内核调用中使用 new
时,检查内存分配是否成功的最佳方法是什么?如果没有办法继续执行内核,即使在内存分配失败的情况下,是否有类似于 (nothrow)
的东西?
谢谢!
最佳答案
我不认为设备端正式支持 new
。此外 - 据我所知 - 设备端不支持异常,因此 nothrow
之类的注释无效。
您可以在内核中做的是调用malloc
。失败时,该函数仅返回 NULL
,您可以正常检查。
请注意
- 设备端
malloc
仅在设备 2.0 (Fermi) 及更高版本上受支持。 - 默认情况下您只有 8MB 的堆内存。如果你想拥有更多,你需要通过
cudaDeviceSetLimit
设置更高的限制。
进一步阅读:CUDA C 编程指南,v.5.0,第 B.17 章 - 动态全局内存分配
更新:测试表明 new
似乎得到支持并且似乎以相同的方式工作,即在失败时返回 NULL
。
关于memory-management - Nothrow with CUDA 新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14541332/