关于SM多处理器处理block中wrap的问题

  • 2 replies
  • 330 views
关于SM多处理器处理block中wrap的问题
« 于: 五月 31, 2019, 03:01:59 pm »
现用的显卡是teslaK80,哪里有比较详细的文档可以确定里面1个SM对应可以控制的最大Block块数?只知道1个SM最大处理的线程数是2048个,然后每个Block的最大线程数是1024个。
背景是:修改一个两层循环成GPU并行的模式,内外层循环都是320
问题一 :
        设块数Block(20,20,1),每块线程数(16,16,1),对于teslaK80而言,共2x13=26个sm,以32个线程为一个wrap,这里每块可以分为8个wrap,那我这多处理器总共要处理的wrap数是20x20x8=3200个wrap,然而我只有26个sm,那这26个sm开始对应的是26个block里的1个wrap,还是3个block里的24个wrap+1个block2个wrap?知道sm处理wrap时是有先后顺序的,那么他是如何实现那么多线程的并行呢?

问题二:
        对同样的320的2层循环,块数(20,20,1),线程数(16,16,1);跟块数(40,40,1),线程数(8,8,1);
        第一种情况共400块,每块可分8个wrap;第二种情况共1600块,每块可分2个wrap;
        每个wrap里面的线程数都是满32的,总的wrap数也相同,但是他们测得的时间有差距,第二种的时间更少些,这个是为什么呢?是怎么造成的呢?
        新人小白求解答。

Re: 关于SM多处理器处理block中wrap的问题
« 回复 #1 于: 六月 05, 2019, 01:27:46 pm »
现用的显卡是teslaK80,哪里有比较详细的文档可以确定里面1个SM对应可以控制的最大Block块数?只知道1个SM最大处理的线程数是2048个,然后每个Block的最大线程数是1024个。
背景是:修改一个两层循环成GPU并行的模式,内外层循环都是320
问题一 :
        设块数Block(20,20,1),每块线程数(16,16,1),对于teslaK80而言,共2x13=26个sm,以32个线程为一个wrap,这里每块可以分为8个wrap,那我这多处理器总共要处理的wrap数是20x20x8=3200个wrap,然而我只有26个sm,那这26个sm开始对应的是26个block里的1个wrap,还是3个block里的24个wrap+1个block2个wrap?知道sm处理wrap时是有先后顺序的,那么他是如何实现那么多线程的并行呢?

问题二:
        对同样的320的2层循环,块数(20,20,1),线程数(16,16,1);跟块数(40,40,1),线程数(8,8,1);
        第一种情况共400块,每块可分8个wrap;第二种情况共1600块,每块可分2个wrap;
        每个wrap里面的线程数都是满32的,总的wrap数也相同,但是他们测得的时间有差距,第二种的时间更少些,这个是为什么呢?是怎么造成的呢?
        新人小白求解答。

关于你的几个问题:
(1)所有Kepler卡的(计算能力3.0到3.7)的最大SM驻留Blocks数量为16. 这应当是最接近你的“SM能控制多少blocks“的回答。

(2)SM上面能驻留所有Blocks,取决于每个block的资源使用(寄存器,shared,barrier等等),只要有资源,就能上blocks,所有能上去的blocks,在SM内部采取自动调度,谁处于就绪状态就可能会执行谁(精确的说,是每个里面的warp)。暂时未能上去的blocks,则可以当某个SM中有某个block结束后,自动上去。

(3)形状影响性能是一个常见的现象。这个和具体问题有关。无法直接回答为何特定的某个形状性能好(或者不好)。你得反复自己试验。

抱歉回复晚了。

Re: 关于SM多处理器处理block中wrap的问题
« 回复 #2 于: 六月 05, 2019, 01:39:48 pm »
此外,block不能被拆分到多个SM的(请考虑shared memory属于单个SM,如果能拆分,同时还使用了shared memory,岂非抓瞎了?)