Cuda每个线程寄存器 [英] Cuda registers per thread
本文介绍了Cuda每个线程寄存器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
正如我对2.x计算能力设备的正确理解,每个线程有63个寄存器限制。你知道对于计算能力1.3的设备,每个线程的寄存器限制是多少?
我有一个大内核,我在GTX260上测试。我很确定我使用了很多寄存器,因为内核是非常复杂的,我需要很多局部变量。根据Cuda profiler我的注册表使用率是63(静态Smem是68虽然我不太确定这意味着什么,动态Smem是0),虽然我很肯定我有超过63个局部变量,所以我想到了编译器重用寄存器或将它们溢出到本地内存中。
现在我认为计算能力1.3的设备每个线程的寄存器的限制比2.x设备更高。我的猜测是,编译器选择63限制,因为我使用256个线程的块,在这种情况下256 * 63是16128,而256 * 64是16384这是此设备的SM的寄存器的极限数。所以我的猜测是,如果我降低每个块的线程数量,我可以增加使用的寄存器的数量。所以我用196个线程的块运行内核。但是同样,分析器显示63个寄存器,即使63 * 192是12096和64 * 192是12288,这是在SM的16384限制内的方式。
编译器本身仍然限制到63个寄存器?