一个gpu有5个sm,在gpu上只运行一个kernel时,gpu的5个sm都是繁忙的吗?
那不一定的。您至少需要5个block才可以。
反之,如果您的kernel的启动的线程数/block数目过少,例如极端的说,只有1个线程,那么显然它只会位于1个SM上。
以及补充一下横扫斑竹,LZ询问的“繁忙”没有给出确切定义。
是“只要有活干就算繁忙”呢?还是“跑满才算繁忙”?
如果LZ的意思是后者,那么涉及的方面就更多了。
请LZ做出进一步的解释。
祝LZ好运~
程序中block数量有几千个,threads/block有250-350个。先不考虑thread不能被warp整除带来的影响。
繁忙是指满负荷工作。
LZ您好,就您新给出信息,我来简要说一下:
1:您的block规模和线程数量规模是没问题的,block内部的线程数量也处于合理范围内。因此,这两个因素应该不会成为限制因素。
2:那么在此条件下,GPU能否达到繁忙或者比较繁忙呢?这取决于您的算法实现。以及一般来说,在具体算法实现的固有约束下,很难让计算单元和访存单元同时满载,一般认为在合理优化下,其中之一满载,即认为GPU处于繁忙状态。
综上,在您4#的补充条件下,您1#的问题回答为:如果您的算法实现是合理的,优化的,那么您4#指出的计算规模足以保证一个5 SM的GPU处于繁忙的状态。
大致如此,供您参考。
祝您编码顺利~
这个谁都无法保证你满符合。一个严重无法掩盖延迟的kernel有100000000个blocks也没用。
楼主可以看下SM Efficiency (也叫SM Ultilization, 根据你的profiler版本不同), 这个能反应您的SM在您的kernel运气期间的每SM的平均使用率。例如90%证明只有10%的时间在空闲(一般因为无法继续执行下去,例如卡在等待长延迟的数据到来)。如果这个数字较低(例如10%)则证明贵kernel极度无法让SM满载中。
但只是从数量上说,加上您的4#的繁忙定义。无法确定。
谢谢,我看了一些资料后明白了。之前理解错了。
您客气了。版主们很荣幸能服务您。