与CUDA新的Nothrow

时间:2013-01-26 20:36:38

标签: memory-management cuda

在使用CUDA的内核调用中使用new时检查内存是否成功分配的最佳方法是什么?如果没有办法继续执行内核,即使在内存分配失败的情况下,还有类似于(nothrow)的内容吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

我不认为设备端正式支持new。此外 - 据我所知 - 设备端不支持异常,因此nothrow等注释无效。

在内核中可以做的是调用malloc。失败后,函数返回NULL,您可以正常检查。

请注意

  • 设备端malloc仅在设备2.0(费米)及更高版本上受支持。
  • 默认情况下,您只有8MB的堆内存。如果您想要更多,则需要通过cudaDeviceSetLimit设置上限。

进一步阅读:CUDA C编程指南,v.5.0,B.17章节 - 动态全局内存分配


更新:测试显示new似乎得到了支持,似乎也以同样的方式工作,即失败时返回NULL