3

我想我有几个与调用堆栈相关的问题,但我的主要问题是,

  • “为什么只能在计算能力 2.0+ 的设备上设置堆栈大小?”

  • 另外,为什么我只能使用 nvidia Nsight 查看计算能力为 2.0 及以上的设备的调用堆栈?2.0+ 的设备有什么特别之处可以做到这一点,而 1.x 的设备则不行?

我知道这是一个相当广泛的问题,但任何对上述问题的答案的深入了解,甚至是关于 CUDA 设备上的堆栈调用的信息,都将受到高度赞赏。

4

1 回答 1

5

较旧的 1.x 设备无法实现堆栈,因此允许它没有意义。2.0+ 设备能够实现堆栈的至少一个原因是因为它们具有将通用指针作为操作数的指令。这意味着编译器不需要在每个指针流经程序时跟踪它的类型(共享的、本地的或全局的)——硬件可以找出它。这使得实现单独编译(使用堆栈和 ABI)成为可能,因为编译器不需要对整个程序的可见性来跟踪每个指针的类型。

于 2013-08-27T23:42:42.913 回答