Memory management 诺思罗与CUDA新

Memory management 诺思罗与CUDA新,memory-management,cuda,Memory Management,Cuda,在CUDA内核调用中使用new时,检查内存分配是否成功的最佳方法是什么?如果没有办法继续执行内核,即使在内存分配失败的情况下,是否有类似于(nothrow)的方法 谢谢 我不认为设备端正式支持new。此外,据我所知,设备端不支持异常,因此像nothrow这样的注释没有效果 您可以在内核中调用malloc。失败时,函数只返回NULL,您可以正常检查 请注意 设备端malloc仅在设备2.0(费米)及更高版本上受支持 默认情况下,您只有8MB的堆内存。如果您想要更多,需要通过cudaDeviceS

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


谢谢

我不认为设备端正式支持
new
。此外,据我所知,设备端不支持异常,因此像
nothrow
这样的注释没有效果

您可以在内核中调用
malloc
。失败时,函数只返回
NULL
,您可以正常检查

请注意

  • 设备端
    malloc
    仅在设备2.0(费米)及更高版本上受支持
  • 默认情况下,您只有8MB的堆内存。如果您想要更多,需要通过
    cudaDeviceSetLimit
    设置更高的限制
进一步阅读:CUDA C编程指南,v.5.0,第B.17章-动态全局内存分配



更新:测试表明,
new
似乎得到了支持,并且似乎以相同的方式工作,即在出现故障时返回
NULL

'new'确实在设备端得到了支持(CUDA 2.0及更高版本)。我认为异常是不受支持的,我真的想知道内存分配失败是否会停止内核的执行。谢谢我在编程指南中没有看到任何关于
新的
支持的内容。如果支持
new
,它可能会在引擎盖下调用
malloc
,并且可能会有类似的行为,即失败时返回NULL。我明白了,这是有道理的,谢谢您的解释@Twiltie-I say>可能只是使用new运行了一个分配大内存的测试,它确实返回了一个空指针,失败对内核执行没有影响(甚至在多个线程上失败)。谢谢大家!