正如我对 2.x 计算能力设备的正确理解,每个线程有 63 个寄存器限制。您知道计算能力为 1.3 的设备的每个线程的寄存器限制是多少吗?
我有一个正在 GTX260 上测试的大内核。我很确定我使用了很多寄存器,因为内核非常复杂并且我需要很多局部变量。根据 Cuda 分析器,我的寄存器使用量是 63(静态 Smem 是 68,虽然我不太确定这意味着什么,动态 Smem 是 0),虽然我很确定我有超过 63 个局部变量,所以我想编译器正在重用寄存器或将它们溢出到本地内存中。
现在我认为计算能力 1.3 的设备每个线程的寄存器限制高于 2.x 设备。我的猜测是编译器选择了 63 个限制,因为我使用的是 256 个线程块,在这种情况下,256*63 是 16128,而 256*64 是 16384,这是该设备的 SM 的寄存器限制数量。所以我的猜测是,如果我降低每个块的线程数,我可以增加正在使用的寄存器数量。所以我用 196 个线程块运行内核。但是,即使 63*192 是 12096 并且 64*192 是 12288(这在 SM 的 16384 限制之内),分析器也会再次显示 63 个寄存器。
那么知道为什么编译器仍将自身限制为 63 个寄存器吗?这可能是因为寄存器重用还是仍然溢出寄存器?