关于cuda性能分析

图中红色的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, 来强制降低寄存器使用量的。
(请注意,这不一定带来性能的提升)。

感谢版主的耐心指导啊~

楼主太客气。

愿论坛与你同在!