关于寄存器内存的使用

斑竹好,如下是程序的编译信息
ptxas : info : 0 bytes gmem, 8576 bytes cmem[2] (任务 ID: 19)

1> ptxas : info : Compiling entry function ‘_Z4echoPdP11gpu_Complexddd’ for ‘sm_21’ (任务 ID: 19)
1> ptxas : info : Function properties for _Z4echoPdP11gpu_Complexddd (任务 ID: 19)
1> 16 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads (任务 ID: 19)
1> ptxas : info : Used 52 registers, 120 bytes cumulative stack size, 64 bytes cmem[0] (任务 ID: 19)

是说使用了52B 的寄存器内存吗,根据Occupancy Calculator 计算,瓶颈在寄存器内存方面,有什么方法可以减少寄存器内存的使用?
感谢斑竹回答!

LZ您好:

这是52个寄存器(每个4B)而不是52B寄存器。

如果要减少寄存器使用的话,只能修改kernel实现了。
您可以强制将寄存器spill到local memory,使得occupancy上升,但是这样一般会变得更慢的。

大致如此,供您参考。

祝您好运~

谢谢斑竹的解答:D

谢谢斑竹,另外这里显示的52个register,是一个block所用的register大小吧。
如果我的程序其他未动,只是把block由原来的512改为128,是不是应该这个register会变小呢,我再次编译发现还是没有变化,纠结ing

LZ您好:

这是一个线程使用的寄存器数量,fermi架构一个线程最多可以使用63个寄存器,SM3.5的kepler一个线程最多可以使用255个寄存器。

所以,您修改block规模是不影响这个数值的,您观测到的现象是正常的。

祝您编码顺利~