title: 什么是线程束调度器?
线程束调度器是流式多处理器 (SM)的核心组件,负责在每个时钟周期决定执行哪一组线程。
H100 SM 内部架构图。橙色部分为线程束调度器和分发单元。改编自 NVIDIA 的 H100 白皮书。
这些被称为线程束的线程组会在每个时钟周期(约一纳秒)进行切换——类似于 CPU 中同步多线程("超线程")的细粒度线程级并行处理,但规模更为庞大。线程束调度器能够在指令操作数就绪时快速切换大量并发任务,这种能力是实现 GPU 延迟隐藏特性的关键所在。
完整的 CPU 线程上下文切换需要数百到数千个时钟周期(更接近微秒级而非纳秒级),因为需要保存当前线程上下文并恢复另一个线程的上下文。此外,CPU 的上下文切换会降低数据局部性,通过增加缓存未命中率进一步影响性能(参见 Mogul and Borg, 1991)。
由于每个线程都拥有从 SM 的寄存器文件分配的私有寄存器,GPU 的上下文切换无需任何数据移动来保存或恢复上下文。
而且由于 GPU 的 L1 缓存可完全由程序员管理,并在共同调度到 SM 的线程束之间共享(参见协作线程数组),GPU 的上下文切换对缓存命中率的影响要小得多。有关 GPU 中程序员管理缓存与硬件管理缓存交互的详细信息,请参阅 CUDA C 编程指南的"最大化内存吞吐量"章节。
线程束调度器还负责管理线程束的执行状态。