张芷铭的个人博客

SM 流式处理器

流式多处理器(SM):GPU的核心计算单元

流式多处理器(Streaming Multiprocessor,SM)是NVIDIA GPU架构中最核心的并行计算单元,也是GPU实现大规模并行计算的基础——所有CUDA核心(CUDA Core)、张量核心(Tensor Core)等计算资源都依附于SM,GPU的并行计算能力本质上是多个SM同时工作的结果。

简单来说:GPU是“SM的集合”,而SM是“计算核心的集合”

一、SM的核心定位

GPU的设计目标是处理“单指令多数据(SIMT)”类型的并行任务(如图形渲染、深度学习、科学计算),而SM正是执行这类并行任务的“最小独立单元”:

  • 每个GPU芯片包含数十到上百个SM(例如NVIDIA A100有108个SM,RTX 4090有128个SM);
  • 每个SM内部集成了大量计算核心、缓存、调度单元等,能独立调度和执行一批线程;
  • 多个SM可同时并行工作,共同支撑GPU的整体算力。

二、SM的核心组成(以NVIDIA Ampere架构为例)

不同架构(如Kepler、Maxwell、Volta、Ampere、Hopper)的SM结构略有差异,但核心模块一致,典型组成包括:

模块作用
CUDA核心(FP32/INT32)基础通用计算核心,执行单精度浮点运算、整数运算,是SM最核心的计算资源。
张量核心(Tensor Core)专用于深度学习的矩阵乘加(GEMM)运算,支持FP16/FP8/INT8等低精度计算,大幅提升AI算力。
双精度核心(FP64)处理高精度浮点运算(科学计算、流体仿真等场景),Ampere架构中FP64算力是FP32的1/2。
纹理单元(Texture Unit)处理图形纹理采样,也可用于通用数据加载优化。
线程调度器(Warp Scheduler)调度“线程束(Warp)”执行——GPU中线程以32个为一组(Warp),SM的调度器会为每个Warp分配计算资源,实现无间断流水线。
寄存器文件(Register File)为线程提供超低延迟的高速存储,每个线程有独立寄存器,SM的寄存器容量决定了可同时运行的线程数。
共享内存(Shared Memory)SM内的高速片上内存(带宽达TB/s级),供同一SM内的线程共享数据,是GPU优化的核心关键点。
L1缓存/常量缓存L1缓存用于临时数据缓存,常量缓存加速只读常量数据访问,降低对全局内存的依赖。

补充:Ampere架构的SM还引入了“SM Partition”设计,将单个SM拆分为2个独立的子SM(每个子SM有自己的调度器、寄存器和共享内存),进一步提升并行粒度。

三、SM的工作原理(SIMT模型)

GPU执行CUDA程序时,线程会被组织为线程块(Block),每个线程块会被分配到一个SM上执行(线程块无法跨SM),而SM内部的线程会被进一步拆分为32个一组的线程束(Warp)

  1. 线程调度器为每个Warp分配计算资源,同一Warp内的所有线程执行相同的指令(SIMT),但处理不同的数据;
  2. 当某个Warp因访存、同步等原因阻塞时,调度器会立即切换到另一个就绪的Warp执行,实现“隐藏延迟”,让SM的计算核心始终处于忙碌状态;
  3. 单个SM可同时容纳多个线程块(取决于寄存器、共享内存的占用),这也是“并发线程”的核心来源。

关键特性:SM的并行能力由“同时活跃的Warp数”决定,而Warp数又受SM的寄存器容量、共享内存大小限制——优化寄存器/共享内存使用,可大幅提升SM的利用率。

四、SM与CPU核心的核心差异

维度SM(GPU核心)CPU核心
设计目标大规模数据并行复杂逻辑串行/轻并行
核心数量单GPU数十~上百个SM单CPU通常2~64个核心
线程调度硬件级快速切换Warp(无开销)操作系统调度线程(有开销)
缓存/寄存器共享内存为主(片上高速)多级缓存为主(容量更大)
适用场景矩阵计算、渲染、AI推理操作系统、数据库、复杂逻辑

总结

SM是NVIDIA GPU的“计算引擎”,通过集成大量并行计算核心、高速片上存储和高效的线程调度机制,实现对海量数据的并行处理。理解SM的结构和工作原理,是优化CUDA程序、提升GPU算力利用率的关键——核心思路是让SM的计算核心尽可能不空闲,同时最大化利用共享内存/寄存器降低访存延迟。

💬 评论