4. 进一步学习硬件结构
SM、Warp、SP
在前面第一章 1. GPU 基本架构 中,我们知道,GPU 本质是围绕 SM 进行扩展实现的,SM 内部有多个线程 (SP) 来实现 SIMD 的目标:

每个 GPU 通常都有多个 SM,当一个核函数被启动后,多个 Block 会被同时分配给可用的 SM 中执行,
- 那么在硬件上,当一个 Block 被分配到 SM 上后,硬件会严格将其划分为多个包含 32 个物理线程的 Warp;
- SM 配备了多个硬件 Warp 调度器,在每个时钟周期,调度器会扫描所有驻留的 Warp 状态,如果 Warp A 因为等待全局内存数据而处于 Stall 状态,调度器会选择其他已就绪的 Warp,并将其指令发射给执行单元 SP。某个时刻 T,SM 上只会执行一个 Warp (32 个线程), Warp 中所有线程执行相同的指令。
下面这个图展示了 软件 和 硬件 层面一些概念的对应,注意两者并不等价,只是在执行角度的对应:

简单总结:
| 软件逻辑结构 (Software) | 物理硬件单元 (Hardware) | 物理执行与调度特征 |
|---|---|---|
| Grid (网格) | GPU ( GPU 设备) | 整个执行网格的生命周期在单个特定的 GPU 芯片实体上独立执行并完成。 |
| Block (线程块) | SM (流多处理器) | 线程块不可分割地物理驻留于单一 SM 上。依据物理寄存器与共享内存的当前可用容量,一个 SM 可并发驻留多个 Block。 |
| Warp (线程束) | Warp Scheduler (硬件调度器) | 硬件将 Block 内部每 32 个连续逻辑线程强制捆绑为一个物理执行基准单位,由 SM 内部的调度器统一提取并分发指令。 |
| Thread (逻辑线程) | SP (流处理器) | 逻辑线程所携带的具体算术指令,在特定的微观时钟周期内被发射至 SP 或其他专职执行单元进行底层的标量电平运算。 |
GPU 架构历史
待续
说些什么吧!