为什么只有具有2.0+计算能力的CUDA GPU设备才能设置堆栈大小?

3
我猜我有几个与调用栈相关的问题,但我的主要问题是:
  • “为什么只能在具备计算能力2.0及以上设备上设置堆栈大小?”

  • 此外,为什么只有在具备计算能力2.0及以上设备上使用NVIDIA Nsight才能查看调用栈? 2.0+ 设备有什么特殊之处,使它们可以这样做,而1.x设备却不行?

我知道这是一个相当广泛的问题,但任何关于以上问题答案的洞察或甚至关于CUDA设备上调用栈的信息都将受到高度赞赏。

1个回答

5

老旧的1.x设备无法实现���栈,因此允许它们实现没有意义。 2.0+设备之所以能够实现堆栈,至少有一个原因是它们具有接受通用指针作为操作数的指令。这意味着编译器不需要跟踪每个指针(共享、本地或全局)在程序中流动时的类型 - 硬件可以自行解决。这使得实现分离编译(具有堆栈和ABI)成为可能,因为编译器不需要对整个程序可见才能跟踪每个指针的类型。


有见地!那么,为什么您想要能够更改堆栈的大小呢?是为了在堆栈上分配更多的本地变量和函数调用吗?这个空间从哪里获取? - SaiyanGirl
栈的大小控制着函数调用和递归的深度。栈越大,递归就越深。 - Jared Hoberock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接