我的显卡是GeForce GTX670的,因为我的NVCC啥都看不到,所以我用GPU-Z看我的GPU占用情况
发现
GridDim(4,12,1)BlockDim(125,1,1)GPU占用率约60%-70%
GridDim(4,12,1)BlockDim(256,1,1)GPU占用率约70%-80%
GridDim(4,12,1)BlockDim(512,1,1)GPU占用率约70%-80%
1.用GPU-Z看GPU的占用率准吗
2.在这三种情况下,为何GPU的占用率不怎么变呢
3.如何写代码可以使我的GPU利用率达到更高,100%
多谢大神们提点啊!!!
GPU的占用率不再提高说明GPU基本被塞满了,继续往里塞应该也不再提升效率了。
对于如何继续提高占用率,我也说不好,减少kernel的寄存器和共享内存使用率有可能会有所帮助吧。
ps:写程序不一定要最优,感觉效率可以了就行了。就算你GPU的占用率100%也不一定是最快的
LZ您好:
1:无法回答此问题,请咨询TechPowerUp公司,此处GPU-Z软件统计GPU占用率的机制为何。
2:因为1:无法判定,所以2:的前提是不确定的,所以也无法回答。
3:这个和您的具体代码实现有关的,是非常细致的讨论内容,无法直接凭空给你答案。
以及因为1#给出的测试前提是模糊的,所以2#是建立在该模糊的前提上的,因此对于2#的所有结论,此处不予评价。
祝您好运~
楼主您好,
(1)gpu-z看到的是gpu load, 而不是occupancy。作为gpu load,这个值在gpu-z的采样的瞬间是准确的。
(2)gpu load只取决于SM的使用率,而SM的使用率和occupancy不一定成正比。
(3)如果想要gpu load更高,您需要更大的SM Efficiency(SM Ultilization), 这个值过低往往是因为SM无法进行下一条指令的指令,而被迫强制空闲,而这往往是因为:所有的warp都不出于就绪状态(例如它们都因为在等待延迟而无法继续)。
没有通用的方式能提高SM Efficiency, 但一般建议:
(1)尽量调整形状以能上更多的warps/block per SM,从而可能有更多的warps处于就绪状态,以减少SM空闲的几率(或者说这样能更好的掩盖延迟)。
(2)如果(1)已经无法提高,尽量在线程里使用受影响小的方式(例如,将访存和使用尽量分开的远一些,将前者尽量提前等)。从而使得每个warp的执行过程中,尽量可能的少受延迟的影响(或者说能更好的掩盖).
感谢您的周末到访。
版主大人您好,那个我有点糊涂了,你说“SM的使用率和occupancy不一定成正比”,那个occupancy不就是SM的使用率吗?求解释:o
我没有说过“occupancy就是SM的使用率”。
前者是上面加载的活动工作线程的多少,而后者是它保持繁忙的时间和总时间的比率。
打个比方说,你的cpu的负载率和当前OS负责调度的cpu线程数目无关的。(不太恰当,但是您可以参考)。
system
10
您好,如果您十分赞同2#,请具体阐述您的观点和看法,而不是这样无意义地回一句。
同时根据前面的讨论可知,2#混淆了GPU load和occupancy这两个概念,请问您依然赞同么?