CUDA ptxas警告(进入的堆栈大小)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CUDA ptxas警告(进入的堆栈大小)相关的知识,希望对你有一定的参考价值。

我收到以下警告,在编译CUDA代码时我不明白:

CUDACOMPILE:ptxas警告:无法静态确定入口函数'_Z24gpu_kernel_get_3d_pointsiPK8RtmPointS1_PKfS3_P10RtmPoint3DPif'的堆栈大小

内核原型是:

__global__ void gpu_kernel_get_3d_points(int count1, const RtmPoint *pPoints1, const RtmPoint *pPoints2, const float *PL, const float *PR, 
RtmPoint3D *pPoints3D, int *pGlobalCount, float bbox)

所有指针都是指向设备内存的指针。我不明白为什么编译器在确定堆栈大小时应该有问题。内核中有一些局部变量但不是很多。有任何想法吗?这个警告有关系吗?

答案

看起来您的内核使用malloc()或new运算符在GPU堆上动态分配内存。它可能会对内核的性能产生负面影响。

另一答案

当函数递归时会发生此警告。 Cuda尝试在执行之前分配堆栈空间,这不是什么大问题,除非你使用递归。它的问题是堆栈大小是不可预测的。递归的深度不是已知值,因此堆栈将使用的内存未知。此警告并不真正相关,但如果您使用数据超出GPU堆栈,则必须手动增加堆栈大小。

以上是关于CUDA ptxas警告(进入的堆栈大小)的主要内容,如果未能解决你的问题,请参考以下文章

CUDA 退出代码 255,并且 ptxas 致命

CUDA --ptxas-options="-v" 不显示任何输出

CUDA 中大小为 4 的非法写入

为啥数组会引起nvlink警告:入口函数的堆栈大小不能静态确定

ptxas fatal : Unresolved extern function Error 255

CUDA 堆栈帧大小增加 __forceinline__