memory-management - Nothrow with CUDA 新

标签 memory-management cuda

在使用 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/

相关文章:

iphone - NSDateFormatter 导致僵尸灾难

c++ - 什么决定了我的可执行文件的大小?

c++ - C++把静态成员变量放在什么地方,栈中还是数据段中

cuda - CUDA中的杂项和线程间通信指令

c++ - 从传递的 FORTRAN 数组生成 CUSP coo_matrix

c++ - 双向链表无限循环?

ios - 为什么这个最少的代码无法使用 OpenGL ES 1.1 绘制带纹理的三角形?

c - 为什么我们需要 cudaDeviceSynchronize();在带有 device-printf 的内核中?

c++ - 为什么 CUDA 在访问类成员时崩溃?

header - cuda 5.0 与 Visual Studio 2010 中的示例 .h 链接