关于SM和Block的思考,求解
最近学习CUDA,写了个小程序,由于程序需要,设置Block的尺寸为:5*5,然后Grid尺寸:4*4。运行之。然后第二次设置Grid尺寸为:8*8,第三次为16*16,第四次为32*32,结果16*16的是最快的(Geforce GT 755M,2个SM)。然后到Tesla(30SM)上去运行相同的程序,结果在相同Grid尺寸情况下,Tesla上还没有GT的块!按理说SM越多程序会越快,但是结果却让我大跌眼镜,不知道是我的程序的Kernel部分没有设计好还是怎么的(结果和单机对比后是正确的,可能多半是Kernel设计有问题)。
查看了一些资料,例如sparrow986831的“CUDA:grid和block维度设计”,第一句话就是“按照CUDA的执行模型,grid中的各个block会被分配到GPU的各个SM中执行”。那么按照这个意思,就算block个数很多,但是它会分配到各个SM上,SM越多程序所花时间越短。
但是在《CUDA中如何选择Block的尺寸》中,如果block尺寸为8*8,一个SM最多2048个线程,那么block个数为2048/64=32,但是每个SM只能容纳16个block,所以每个SM上的线程数是16*64=1024。所以讲block尺寸设置为16*16的话,只需8个block,小于SM要求的16个。
感觉这些东西没懂,有点混乱,求解!