Warp Scheduler

参考资料:

Introduction to NVIDIA Nsight Compute - A CUDA Kernel Profiler

A CUDA Kernel Profiler

【CUDA调优指南】Warp Scheduler讲解

warp scheduler定义

Warp Scheduler 负责调度和管理 warp(线程束)在 SM (Streaming Multiprocessor) 上的执行。

以Volta架构为例,每个SM有4个Warp Scheduler,每个Warp Scheduler对应一个Warp Pool。不同架构中Warp Pool的大小是不同的,Volta中每个Warp Scheduler负责16个warp slot,而Turing中每个Warp Scheduler负责8个warp slot。 但是每个cycle只能最多只能一个warp被issue。

image

warp的状态

根据自身的执行状态和是否被 warp scheduler 选取,可以将 warp 分为 2 类:unused warp和active warp。其中active warp又可细分为三类。

  • unused warp:没有被 allocate 到 warp slot 中,依然在 warp pool 中等待的 warp;
  • active warp:被 allocate 到 warp slot 中维护的 warp,stalled warp,eligible warp 和 selected warp 的总和;
    • stalled warp:因为一些原因(指令没有加载完成、依赖项没有得到等)而等待的 warp;
    • eligible warp:准备好被派发指令的 warp;
    • selected warp:被 warp scheduler 选中派发指令的 warp。

warp scheduler执行流程

  1. 初始状态:5 个 active warp,其中 2 个 eligible warp,3 个 stalled warp;

image

  1. 最简单的Scheduler策略,就是随机选取一个eligible warp进行issue,此时选取了slot3

image

  1. 周期 N + 1,选取slot4进行issue,同时slot3因为在周期N被issue了,且其指令至少需要数个周期,因此此时其状态变为stalled

image

  1. 周期 N + 2:warp4 指令执行完成后退出,剩余所有的 warp 都为 stalled warp,该周期没有可以选取派发指令的 warp

image

  1. 周期 N + 3:2 个新的 warp 从 warp pool 中被 allocate 到 warp slot 中,都为 stalled warp;warp1 和 warp2 的状态变为 selected warp,选取 warp2 派发指令。

image

Nsight Compute中的warp statics

如下图所示,在这4个周期中,我们可以得到下面的指标

  • cycles_active:4(周期数量)
  • warps_active:20(所有有颜色的方块数量)
  • warps_active / cycles_active:5(平均每个周期有颜色的方块数量)
  • achieved_occupancy:5 / 8 = 62.5%(平均每个周期有颜色的方块数量 / Warp Slot 的数量)
  • warps_stalled:15(深绿色方块数量)
  • warps_eligible:5(浅绿色方块数量)
  • warps_issued:3(浅绿色斜线方块数量)
  • warps_issued / cycles_active:0.75(有 warp 可以选取派发指令的周期比例)
  • issue_slot_utilization:75%(同上)

image

Share: X (Twitter) Facebook LinkedIn