hujun21 发表于 2013-10-16 12:22
寄存器占用太多是因为每个线程维护的私有变量太多吗?另外为什么每个sm的达到的占用率还不一样呢?每个sm ...
举个例子说,如果您的任务分配不均衡,某些线程提前结束了,而某些线程始终赖着不走,都会影响你的“achieved occupancy"的。
你要看看你有没有类似的情况。
很多资源是以block为单位分配的,如果这个block中原本有100个线程,99个都退出了,却有1个线程在长期运行,这会导致其他99个线程的资源无法释放,导致很低的achieved occupancy的。
关于您询问的寄存器占用太多是怎么回事,这个一般是因为您使用了太多的私有变量的,您的理解无问题。
但是您可以通过限制-maxrregcount=N(在您的项目属性里的max registers used), 来通过限制N成一个较小的值,例如,30, 来强制降低寄存器使用量的。
(请注意,这不一定带来性能的提升)。 |