【发布时间】:2019-02-05 09:29:20
【问题描述】:
我正在处理由数组引起的“无法静态确定入口函数的堆栈大小”警告,我需要帮助。
我正在处理我的代码中的“无法静态确定入口函数的堆栈大小”警告。 经过 CUDA ptxas warnings (Stack size for entry) 和 https://devtalk.nvidia.com/default/topic/524712/a-meaning-of-nvlink-warning-stack-size-for-entry-function-cannot-be-statically-determined/ 警告是由递归引起的。
但是,我在我的代码中没有找到递归,而是发现结构数组也会导致这样的警告。
这个问题可以用一个简单的例子来说明。 (编辑:我可以通过使用 union 来消除这些警告,但我仍然不知道为什么。这些代码在同一个 .cu 文件中)
class ClassABC {
public:
__host__ __device__ ClassABC() { ; }
int m_iValue;
};
class ClassDEF {
public:
__host__ __device__ ClassDEF() { ; }
//Witout warning
//union
//{
// ClassABC m_abc[1];
// int m_values[1];
//};
//With warning
ClassABC m_abc[1];
};
__global__ void TestFunc()
{
ClassDEF def[1];
}
int main()
{
TestFunc << <1, 1 >> > ();
return 0;
}
它有警告:
CUDALINK : nvlink warning : Stack size for entry function '_Z8TestFuncv' cannot be statically determined (target: sm_(35-75))
所以,我的问题是,为什么数组会导致警告,是因为我做错了什么吗? 如果我需要使用数组,我可以摆脱警告吗? 它们有害吗?
我在 Windows 10 和 Visual Studio 2017 上使用 CUDA 10.0.130。警告显示从 sm_35 到 sm_75。
我需要帮助,谢谢!
【问题讨论】:
-
所有这些都在同一个文件中吗?因为我无法以这种方式重现问题。
-
@RobertCrovella 是的,它们在同一个文件中。而且我可以通过使用联合来摆脱这些警告(但我仍然不知道为什么......),我将编辑我的问题以包含整个文件。
-
我假设您在项目中打开了“生成可重定位设备代码”选项。当您关闭它时,您是否看到相同的行为?
-
@RobertCrovella 是的,关闭它时,警告变为 CUDACOMPILE :ptxas 警告:无法静态确定入口函数 '_Z8TestFuncv' 的堆栈大小
-
我编辑了很多未使用的代码。请仔细检查我没有删除重要内容。
标签: cuda