
提到 NVIDIA GPU,大家通常会关注 CUDA 核心数量、Tensor Core 算力或者最新架构的代号。然而,有一个真正影响性能效率的底层物理细节,却很少被深入讨论:一个流多处理器内部,实际上由4个物理上完全独立的小核心构成。
在官方的技术文档里,它们被称为 SMSP,即 SM Sub-Partition(SM子分区)。英伟达的架构图通常不会刻意标注,但这个结构确确实实被刻入了每一代安培、Ada、Hopper 等 GPU 的硅片之中。

1. SMSP:SM 里的“半独立小处理器”
你可以把一个 SM 想象成一个拥有“4室1厅”结构的房子:
- 4个房间:就是4个 SMSP,每个都是一套完整的迷你计算单元。
- 1个客厅:则是4个 SMSP 共享的资源,例如 L1 数据缓存、共享内存以及纹理单元。
以安培架构 GA100 为例,每一个 SMSP 在硬件上都自带:
- 用于计算的各种核心(整数、单精度、双精度 CUDA 核心)
- 负责线程束调度的 Warp 调度器
- 负责数据读写的 Load/Store 单元
- 用于 AI 与高性能计算加速的 Tensor Core
- 派发指令的 Dispatch 单元
- 存储临时数据的寄存器文件
- 执行超越函数等特殊运算的 SFU(特殊函数单元)
关键点在于:这些计算资源是物理焊死在芯片上的电路,并非由软件虚拟或动态调配出来的逻辑单元。对于从事 GPU 高性能计算 或 AI 模型训练的开发者而言,理解这个物理层级的设计至关重要。
2. 最关键的规则:Warp 一旦分配,就“定居”了
这是许多人在编写 CUDA Kernel 时,感觉代码跑得慢却难以定位根源的常见原因之一。
当一个线程块被调度到一个 SM 上执行后,其内部的线程束(Warp)会被静态分配给那4个 SMSP 之一。
分配是终身的:一旦某个 Warp 被分配到一个特定的 SMSP,那么它的整个生命周期都将在这个 SMSP 上完成,绝不会迁移到其他 SMSP。
这就带来一个直接后果:如果某个 SMSP 上分配到的 Warp 都在等待内存访问或数据依赖而卡住,那么这个 SMSP 就会直接空闲下来,无法执行任何计算任务。它无法将自己的任务转移给旁边可能空闲的 SMSP。
简而言之:4 个 SMSP 是各自为战、互不帮忙的独立单元。
3. 对代码编写与性能优化的实际影响
SMSP 的这种静态分区结构,直接设定了 GPU 执行效率的理论上限,也带来了现实的优化挑战:
- 负载不均衡:如果你的任务分配不均,很可能会出现一些 SMSP 忙得不可开交,而另一些 SMSP 却无所事事的局面。
- 资源浪费:包含大量高延迟内存访问、频繁陷入停顿的 Warp,会直接“废掉”整个 SMSP 的计算能力。
- 隐形瓶颈:这正是 GPU 使用率看似不低,但 Kernel 实际性能就是上不去的常见隐形瓶颈。它隐藏在更底层的硬件调度机制中,仅通过顶层的利用率指标很难察觉。
4. 总结
SMSP 是 NVIDIA GPU 架构中最底层、最物理、也最容易被忽略的设计细节:
- 1 个 SM = 4 个物理独立的 SMSP。
- 每个 SMSP 自身是一套功能完整的小型计算核心集群。
- Warp 与 SMSP 是静态绑定的,不存在任务迁移或算力借用。
理解 SMSP 是深入进行 CUDA 内核优化时,一个非常关键的知识点。许多讨论 GPU 优化的话题往往停留在线程块配置、共享内存使用等层面,而触及不到这个硬件调度根基。希望本文能帮你多看清一层 GPU 的工作原理。如果你想了解更多关于 GPU 编程或 人工智能 底层硬件的知识,欢迎到 云栈社区 与更多开发者交流探讨。
|