最优的cuda线程配置
1 每个SM上面失少要有192个激活线程,寄存器写后读的数据依赖才能被掩盖
2 将 寄存器 的bank冲突降到最低,应尽量使每个block含有的线程数是64的倍数
3 block的数量应设置得令可用的计算资源被充分的利用。由于每个block映射到一个sm上面,所以至少应该让block的数目跟sm的数目一样多。
4 当Block中的线程被同步时或者等待读取设备存储器时,相应的SM会闲置。通常让block的数目是sm的2倍以上,使其在时间轴上重叠
5 如果block的数目足够多,则每个Block里的线程数应设置成warp尺寸的整数倍,以免过小的warp浪费计算资源。
6 给每个block分配越多的线程,能更高效的让他们在时间片上工作。但是相应的每个线程的寄存器也就越少。当寄存器过少,有可能因为访问溢出的寄存器,而导致数据的存储变慢。
7 当每个线程占用的寄存器较多时,不宜在Block内分配过多的线程,否则也会减少block的数目。从而使SM的工作效率降低
8 每个block内的线程数应遵循 相应的 计算能力等级中的规定数目。
原文来自《GPGPU编程技术--从GLSL、CUDA到OPENCL》