请问一下有谁比较清楚内核中寄存器到底是如何分配的?

请问一下有谁比较清楚内核中寄存器到底是如何分配的?
当我的内核使用比较多的局部变量时,寄存器使用很多,并且会放入本地存储中
但当我减少局部变量,将其放入smem或者gmem中,之后只是从这些里面调用,但寄存器以及本地存储的使用还是很多
这是什么原因造成的呢?谢谢

不太清楚哦

我之前也遇到过这个问题,但现在已经有所改善,下面是我的两点经验
1.虽然你减少了局部变量,但中间的指令应该没有减少吧,寄存器也需要来存放指令流之类的,你可以尝试细化你的kernel,这样寄存器的使用会有一定的改善
2.本地存储器的访问仅对某些自动变量发生,自动变量即不带任何限定符的变量。编译器可能放入本地存储器的变量是:不能确定是用常数量索引的数组,可能消耗太多寄存器空间的大结构或数组,内核使用的超过可用寄存器的任何变量。可以通过检查PTX代码进行分辨,若变量在编译时被放入本地存储器,会使用.local助记符声明,使用ld.local和st.local访问。
在我之前的程序中就是有比较大中间数组,所以用到了lmem。你可以在ptx中找出是哪部分用到了lmem,然后进行相应的优化。