是否存在CUDA等效的" -Wl, - stack,[数字,例如4194304 for 4Mb stack]"就像在C ++中一样?

时间:2018-04-06 17:12:21

标签: c++ cuda stack

我对CUDA比较陌生。在运行CUDA程序时,我注意到如果我将数组x[ITERATION]增加到一定长度,即ITERATION"足够"很大,CUDA代码在执行时会崩溃,同时编译成功。

在C ++中,我可以g++ -Wl,--stack,4194304 program myCode.cc将堆栈大小增加到4Mb,从而解决了这个问题。有没有办法在CUDA中做到这一点?我试过了nvcc -Wl,--stack,4194304,但它没有用。

非常感谢提前!

1 个答案:

答案 0 :(得分:2)

是的,您可以控制堆栈的大小。它在内核启动之前通过API函数在运行时设置:

cudaDeviceSetLimit(cudaLimit limit, size_t value)

limit是枚举,指定您要控制的限制。在你的情况下,它将是cudaLimitStackSize。第二个参数value是该堆栈的大小(以字节为单位)。

Full documentation

但要小心堆栈大小。 CUDA程序往往会同时运行线程,系统将始终为所有线程维护堆栈内存。因此,您可能会很快耗尽内存。

例如,如果你的目标是4MB堆栈内存,你运行60个块,每个块有512个线程(这些是合理的值!) - 这将是60 * 512 * 4MB =〜30GB的设备内存消耗。大多数GPU的内存都少于此。

通常,大数组最好在所有线程之间共享。