图中红色的1是什么意思
[attach]3461[/attach]
楼主您好,您的截图可能不完整,
第一列的红色代表您一个SM上只能上1个block(同时),
而右侧的8等数据则表明了最好情况下的最大可能值(8个blocks在1个SM上,同时)。
感谢来访。
这是由于每个线程占用寄存器太多造成呢吗?实际占用率只有可怜的16%。。。[attach]3462[/attach]
您的确寄存器用的有点多了。。。
在2.x和3.0上(但是3.5除外),最多就是63个。你可以适当考虑减少点。
当然,如果有条件,可以上3.5(255个),这个可能会对你的一些需要较多寄存器数目的算法有好处。
(有便宜的Gk208的3.5的(一般是GT640),你可以先买一个试试看)
寄存器占用太多是因为每个线程维护的私有变量太多吗?另外为什么每个sm的达到的占用率还不一样呢?每个sm的任务量应该是一样的~
[attach]3463[/attach]
举个例子说,如果您的任务分配不均衡,某些线程提前结束了,而某些线程始终赖着不走,都会影响你的“achieved occupancy"的。
你要看看你有没有类似的情况。
很多资源是以block为单位分配的,如果这个block中原本有100个线程,99个都退出了,却有1个线程在长期运行,这会导致其他99个线程的资源无法释放,导致很低的achieved occupancy的。
关于您询问的寄存器占用太多是怎么回事,这个一般是因为您使用了太多的私有变量的,您的理解无问题。
但是您可以通过限制-maxrregcount=N(在您的项目属性里的max registers used), 来通过限制N成一个较小的值,例如,30, 来强制降低寄存器使用量的。
(请注意,这不一定带来性能的提升)。
感谢版主的耐心指导啊~
楼主太客气。
愿论坛与你同在!