相关疑难解决方法(0)

Cuda按线程注册

正如我对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个寄存器,即使63*192是12096而64*192是12288,这是在SM的16384限制范围内.

所以任何想法为什么编译器仍然限制自己63个寄存器?可能是因为寄存器重用还是仍在溢出寄存器?

profiler cuda local-storage

8
推荐指数
1
解决办法
1万
查看次数

标签 统计

cuda ×1

local-storage ×1

profiler ×1