3

new在使用CUDA 进行内核调用时,检查内存是否成功分配的最佳方法是什么?即使在内存分配失败的情况下,是否有类似(nothrow)的方法可以继续执行内核?

谢谢!

4

1 回答 1

3

我不认为这new在设备端得到正式支持。此外-据我所知-设备端不支持异常,因此注释之类nothrow的无效。

可以在内核中做的是调用malloc. 失败后,该功能将返回NULL,您可以正常检查。

请注意

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

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


更新:测试表明new似乎支持并且似乎以相同的方式工作,即NULL在失败时返回。

于 2013-01-26T20:43:47.540 回答