Memory management 诺思罗与CUDA新
在CUDA内核调用中使用Memory management 诺思罗与CUDA新,memory-management,cuda,Memory Management,Cuda,在CUDA内核调用中使用new时,检查内存分配是否成功的最佳方法是什么?如果没有办法继续执行内核,即使在内存分配失败的情况下,是否有类似于(nothrow)的方法 谢谢 我不认为设备端正式支持new。此外,据我所知,设备端不支持异常,因此像nothrow这样的注释没有效果 您可以在内核中调用malloc。失败时,函数只返回NULL,您可以正常检查 请注意 设备端malloc仅在设备2.0(费米)及更高版本上受支持 默认情况下,您只有8MB的堆内存。如果您想要更多,需要通过cudaDeviceS
new
时,检查内存分配是否成功的最佳方法是什么?如果没有办法继续执行内核,即使在内存分配失败的情况下,是否有类似于(nothrow)
的方法
谢谢 我不认为设备端正式支持
new
。此外,据我所知,设备端不支持异常,因此像nothrow
这样的注释没有效果
您可以在内核中调用malloc
。失败时,函数只返回NULL
,您可以正常检查
请注意
- 设备端
仅在设备2.0(费米)及更高版本上受支持malloc
- 默认情况下,您只有8MB的堆内存。如果您想要更多,需要通过
设置更高的限制cudaDeviceSetLimit
更新:测试表明,
new
似乎得到了支持,并且似乎以相同的方式工作,即在出现故障时返回NULL
。'new'确实在设备端得到了支持(CUDA 2.0及更高版本)。我认为异常是不受支持的,我真的想知道内存分配失败是否会停止内核的执行。谢谢我在编程指南中没有看到任何关于新的支持的内容。如果支持new
,它可能会在引擎盖下调用malloc
,并且可能会有类似的行为,即失败时返回NULL。我明白了,这是有道理的,谢谢您的解释@Twiltie-I say>可能只是使用new运行了一个分配大内存的测试,它确实返回了一个空指针,失败对内核执行没有影响(甚至在多个线程上失败)。谢谢大家!