【发布时间】:2016-04-20 01:37:41
【问题描述】:
如标题所示,有人可以对我了解更多关于 CUDA 中的堆和堆栈的信息吗?它与CPU内存中的原始堆和堆栈有什么不同吗?
当我在 CUDA 中增加堆栈大小时遇到问题,它似乎有其局限性,因为当我通过cudaDeviceSetLimit 将堆栈大小设置为超过 1024*300 (Tesla M2090) 时,我收到一个错误:argument invalid。
我想问的另一个问题是:当我将堆大小设置为非常大的数字(大约 2GB)以分配我的 RTree(数据结构)有 2000 个元素时,运行时出现错误:too many resources requested to launch
有什么想法吗?
P/s:我只用单线程启动 (kernel<<<1,1>>>)
【问题讨论】:
-
“请求启动的资源过多”错误可能与您在内核中使用的寄存器和线程的数量有关。尝试通过将 -Xptxas="-v" 添加到编译行来打印使用情况。
-
为什么需要增加栈/堆大小?请发布一个重现问题的示例。
-
寻求调试帮助的问题(为什么这段代码不起作用?)预计将包含 MCVE。概念问题也不例外(为什么可能我的代码,我没有展示,失败了?)如果有这样的例外,那么每个人都可以使用它和 MCVE requirement将毫无意义。
-
没有人想看到你的代码。我建议您先阅读MCVE 是什么。对于您在第二段和第三段中描述的两个问题,MCVE 可能只需要大约 20 行代码,也许更少。我认为在调用
cudaDeviceSetLimit时演示invalid argument不需要 1000 行代码。