是否有与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++?
我对 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 的内存都比这少。
通常,大数组最好在所有线程之间共享。
相关文章:
- Usages of std::move
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 具有变量Number of Arguments的std::函数的矢量
- Capacity of a deque
- Deprecation of _writeBarrier()
- constexpr begin of a std::array
- 如何调整 std::vector of Eigen::MatrixXd 的大小
- C++ "error: invalid use of void expression"
- 我看到"use of undeclared identifier"错误,有人可以告诉我如何解决它吗?
- 赛通"Cannot take address of memoryview slice"
- C++ Version Of Double.longBitsToDouble
- 收到错误"invalid use of non-static data member 'stu::n' "
- C++ Usage of AsyncCallback
- 错误:"Left of getValue must have class/struct/union"
- Centos7 g++ "to_string is not in a member of std"
- 是否有与C++"-Wl,--stack,[a number, e.g. 4194304 for 4Mb of stack]"的 CUDA 等效性?
- "directory containing symbolic versions of my app's shared libraries"的位置(ndk-stack)
- C语言中有没有类似'minimizing stack overflow of an array'的东西?
- 使用 C 字符串会发出警告:"Address of stack memory associated with local variable returned"