我想我有几个与调用堆栈相关的问题,但我的主要问题是,
“为什么只能在具有2.0+计算能力的设备上设置堆栈大小?”
另外,为什么我只能使用nvidia Nsight为具有2.0及以上计算能力的设备查看调用堆栈? 2.0+设备有什么特别之处,允许他们这样做,但不是1.x设备?
我知道这是一个非常广泛的问题,但是对于上述问题的答案甚至是关于CUDA设备上的堆栈调用的任何信息都会受到高度赞赏。
答案 0 :(得分:5)
较旧的1.x设备无法实现堆栈,因此允许它是没有意义的。 2.0+设备能够实现堆栈的至少一个原因是因为它们具有将通用指针作为操作数的指令。这意味着编译器不需要跟踪每个指针流经程序时的类型(共享,本地或全局) - 硬件可以解决它。这使得可以实现单独的编译(使用堆栈和ABI),因为编译器不需要对整个程序的可见性,以便跟踪每个指针的类型。