是否有与C++"-Wl,--stack,[a number, e.g. 4194304 for 4Mb of stack]"的 CUDA 等效性?

Is there a CUDA equivalence of "-Wl,--stack,[a number, e.g. 4194304 for 4Mb of stack]" as in C++?

本文关键字:stack of 4Mb for CUDA -Wl C++ --stack 是否 number 4194304      更新时间:2023-10-16

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

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

提前非常感谢!

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

cudaDeviceSetLimit(cudaLimit limit, size_t value)

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

完整文档

但是,请注意堆栈大小。CUDA 程序往往有数千个线程并发运行,系统将始终维护所有线程的堆栈内存。因此,您可能会很快耗尽内存。

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

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