CUDA 学习(八)、线程块调度

一、调度

       如果我们有19个线程块和4个SM,将所有的线程都分配到一个SM上进行处理,显然不够合理。如果让前3个SM每个处理6个线程块,最后一个SM处理一个线程块,那么最后一个线程块就会很快处理完,然后SM会闲置。这样做设备的利用率会很低。

       如果我们用轮流交替的方式将线程块分配到SM 中,每个SM处理4个线程块(4*4=16 个线程块),还剩下三个线程单独用一个SM 再次处理,假设每个线程块执行所花费的时间是一样的,那么通过让每个SM能均衡处理线程块,而不是像之前那样有的SM负载过重,有的SM负载过轻,这样我们就可以减少17%的执行时间。

       而在实际的程序中,我们往往会用到成千上万个线程块。在线程块调度者为每个SM初始化分配了线程之后,就会处于闲置状态,直到有线程执行完毕。当线程执行完毕之后就会从SM中撤出,并释放其占用的资源。由于线程块都相同的大小,因此一个线程块从SM 中撤出后另一个在等待队列中的线程块就会被调度执行。所有线程块的执行顺序是随机、不确定的,因此,当我们在编写一个程序解决一个问题的时候,不要假定线程块的执行顺序,因为线程块根本就不会按照我们所想的顺序执行。

       我们在设计核函数时,最好保证线程块的数目是SM数目的整数倍,以此提高设备的利用率。


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值