高性能计算-CUDA 性能优化之线程束调度

1. 背景

  • 最开始在学习 cuda 编程时,只知道 warp scheduler 线程束调度的概念,但是不清楚调度的细节。现在查看 CUDA Pragramming Guide 性能优化篇看到了关于 warp 调度更清晰的细节。

2. 概念

  • 延时:一个线程束准备好执行下一条指令的时钟周期,受数据依赖,资源竞争,调度策略影响。
  • 指令延迟:指令从发出到完成的时钟周期,是硬件特性;
  • 独立指令:没有其他依赖的指令,可以是访存指令也可以是算数指令。比如:
FMA R1, R2, R3, R4  // 指令A:R1 = R2 * R3 + R4
LD R5, [R6]         // 指令B:加载内存到R5

3. 线程束调度

  • 不同架构配置不同,假如每个SM有4个 warp scheduler,最大容许 48个 warp, 每个warp scheduler有12个warp issue slots;
  • 指令发射:每个 warp scheduler 选择一条就绪指令,发射到 warp 的 active threads;
  • latency:该 warp 准备好执行下一条指令的延迟,大于指令延迟。
  • 指令延迟隐藏:比如在计算能力 7.x 的设备上,大多数算术指令通常需要 4 个时钟周期。那么该 SM 需要有 4 * 4 = 16个就绪 warp 才能隐藏指令延时;
  • 下一条指令:可能是属于该 warp,也有可能属于其他 warp,如果该 warp 有多个独立指令,则会发射这些指令到 active threads,用于延迟隐藏的 warp 数量需求就变少了。

4. warp scheduler

  • 作用:选择一个就绪指令发射到 active threads
  • 分类:
  • 单发射(Single-Issue)调度器:传统GPU(如Fermi架构)的调度器每次只能发射一个warp的一条指令,即使指令间无依赖关系,也需顺序执行。
  • 多发射(Multi-Issue)调度器:现代GPU(如Volta/Ampere架构)的调度器可同时检查多个warp的指令流,若发现同一warp内有独立指令(无数据依赖),可在同一时钟周期发射多条指令。
posted @ 2025-08-08 17:46  安洛8  阅读(45)  评论(0)    收藏  举报