如何计算每个thread占用的寄存器数量?
帮顶一下
我也很想知道啊
我也想知道
简单,编译的时候用 -Xptxas -v 选项就出来了
用NVIDIA Compute Visual Profiler,可以看到寄存器使用个数,除非你设置nvcc不优化,或指定最大寄存器数量,否则以profiler为准。
不优化自己算的话,要看一个sm运行多少个block,乘以每个block的thread数,就是一个sm”同时”运行的thread数n,用一个sm的寄存器总数除以n,就是每个线程的可以使用的寄存器数量,如果超过这个数,就悲剧了,会使用local memory,比起register超慢。因为有这些限制,程序优化才显得重要。
比如G80构架,每个sm最多768thread,一共8192个register,每个thread最多用10个register。最好别超过这个数,如果非得要使用更多register,可以考虑用share memory 代替,或者调整block size,使sm上“同时”运行的thread少一点,每个thread就可以使用更多的register。
楼上回答的像是挺完美了,可是就这个问题而言并没有解决。
1、如何知道自己的变量被声明到了register上。
2、如果自己的CU文件只是整个项目的一部分,比如我使用MFC,c++.net开发界面程序,使用profiler就难了。
不管你用什么开发集成,只要可以编译.cu,都可用profier的,你可以试试。
这个我倒没有尝试过呵呵。应该继续学习啊。。