cuda的warp scheduler知识

背景

在cuda中,每32个线程会被『捆』成一束(线程束),英文是warp, 一个warp执行一个指令,换句话说32个线程每次都是执行相同的指令。指令发射任务是由warp scheduler来完成的,具体工作原理如下:

warp scheduler

warp slot

假如sm中有1个warp scheduler(线程束调度器),调度器最多可以管理8个warp。下图做简单的展示,这里的slot个数就是调度器可以管理的warp最大值,为了方便后面解释,用涂有颜色的块表示某个slot被使用,空白则表示没有被使用。
在这里插入图片描述

warp的状态

在上面的warp slots解释中,其实可以理解其就是一个存放warp的池子,在cuda中凡是进入这些池子的warp,都被称作active warp。在active中的warp还可以被分为三个状态,分别是stalled, eligible, selected,具体是啥意思呢?根据我自己的理解,stalled顾名思义就是困住的,当下warp的指令没法被发射,造成stalled主要有以下5中情况:

  • 在取指令
  • 依赖内存指令的访存结果
  • 依赖之前指令的执行结果
  • pipeline正在忙
  • 同步barrier
    那么eligible就比较好理解,就是各项指标都符合,可以被发射,selected就是当下被选择发射的warp。这里分别用三个颜色表示三种状态。
    在这里插入图片描述

状态切换和指令发射

对于一个warp scheduler(指令发射器),每个时钟周期可以发射出一个指令(因为只有一个issue slot)。对下面的四个时钟周期进行解释。

  • 在时钟周期1的时候,有5个激活的warp, 其中3是eligible, 4号被选中发射,5,6,7是stalled。
  • 在时钟周期2的时候,由于4号在运行中所以这里是stalled(可能依赖当下指令的完成),3号被选中发射,所以3号是selected。
  • 在时钟周期3的时候,有个warp估计是执行完了退出了,而且没有可发射的, 所以时钟周期3的时候,发射槽闲置了。
  • 在时钟周期4的时候,warp slots中的warp又有状态更新,这里5和6都是可以执行的,所以5被运到发射槽,状态标记为selected, 6标记为eligible。
    在这里插入图片描述

nsight compute

在做性能分析的时候,会有相关指标来衡量,我们可以看到在4个时钟周期内,一共有20个active warps(20= 5+5+4+6), 那么平均每一个时钟周期有5个active warps, 而warp slots有8个槽,所以利用率(achieved_occupancy)是62.5%。而在4个时钟周期内,warps_stalled=15, warps_eligible=5,warp_issued(selected)=3, 所以发射槽的利用率为75%(issue_slot_utilization)。对标nisght compute的相关指标我们就知道是什么意思了,该如何去做优化。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值