Skip to content
Gains Summary
Main Navigation 首页 / Home
C++ 编程 / C++ Programming
系统与高性能 / Systems & Performance
Web 开发 / Web Development
人工智能 / Artificial Intelligence
工业软件 / Industrial Software
其他内容 / Other Topics
C++ 编程 / C++系统与性能 / SystemsWeb 开发 / Web人工智能 / AI工业软件 / Industrial

外观

Sidebar Navigation

← 系统与高性能 / Systems & Performance

计算系统 / Computing Systems

1. 计算系统:计算机如何执行与加速程序

2. 从 C++ 源码到 CPU 执行

3. CPU 流水线、乱序执行与分支预测

4. Cache、一致性、伪共享与 NUMA

5. GPU、SM、Warp 与显存

6. 计算执行模型:程序怎样映射到机器

7. SIMD 与编译器向量化

8. C++ 多线程与 OpenMP

9. CUDA 平台与编程模型

10. CUDA Kernel、内存与性能

11. CPU-GPU 异构流水线

12. MPI 与分布式并行

13. 并行算法模式

14. 性能模型与工具

15. 递进学习项目:从单线程到集群

历史完整正文 / Original Deep Dives

1. 历史完整正文:统一前文章逐篇保留

原体系结构与硬件 / Original Architecture

1. 硬件编程与高性能计算:一张可走通的学习地图 / A Practical Learning Map for Hardware Programming and HPC

2. 计算机体系结构:CPU、内存与 GPU / Computer Architecture: CPUs, Memory, and GPUs

3. 计算机架构基础——为什么 GPU 比 CPU 更快 / Computer Architecture Fundamentals: Why GPUs Outperform CPUs

4. 并行计算理论——30 天训练能优化到多快? / Parallel Computing Theory and the Limits of Training Acceleration

5. GPU 架构深入——上万个核心如何分工协作 / GPU Architecture and Massive Parallel Execution

6. CUDA 编程模型——把矩阵乘法映射到 GPU / The CUDA Programming Model for Mapping Matrix Multiplication to GPUs

7. CUDA 内存管理——百亿参数如何装进显存 / CUDA Memory Management for Large Models

8. CUDA 性能优化——从 30 天缩短到 10 天 / CUDA Performance Optimization

9. CPU 并行编程——OpenMP 与 SIMD 向量化 / CPU Parallel Programming with OpenMP and SIMD

10. HPC 集群与 MPI——多节点分布式训练 / HPC Clusters and MPI for Distributed Training

11. 异构计算——CPU 与 GPU 如何协同工作 / Heterogeneous Computing with CPUs and GPUs

12. 深度学习训练优化实战——从 30 天到 3 天 / Deep Learning Training Optimization from Thirty Days to Three

13. 性能分析工具——找到真正的瓶颈 / Performance Analysis Tools for Finding Real Bottlenecks

14. NPU 全景——昇腾/寒武纪/TPU/苹果生态 / The NPU Landscape: Ascend, Cambricon, TPU, and Apple

15. 未来趋势——2030 年的计算机会是什么形态 / Future Computing Trends Toward 2030

16. 硬件与高性能计算:从“程序为什么慢”开始 / Hardware and HPC Starting from Why Programs Are Slow

原并行计算 / Original Parallel Computing

1. 并行计算:从 SIMD 到 MPI / Parallel Computing from SIMD to MPI

2. 并行计算全景:从晶体管、CPU、GPU 到计算集群 / Parallel Computing from Transistors, CPUs, and GPUs to Clusters

3. 并行计算基础:任务分解、加速比与可扩展性 / Parallel Computing Fundamentals: Decomposition, Speedup, and Scalability

4. 处理器体系结构:从指令流水线到多核芯片 / Processor Architecture from Instruction Pipelines to Multicore Chips

5. CPU 并行:多线程、SIMD、Cache 一致性与 NUMA / CPU Parallelism with Threads, SIMD, Cache Coherence, and NUMA

6. 内存层次:Cache、带宽、局部性与一致性 / Memory Hierarchies, Bandwidth, Locality, and Coherence

7. GPU 体系结构:SIMT、Warp、SM 与吞吐优先设计 / GPU Architecture with SIMT, Warps, and Streaming Multiprocessors

8. CUDA 编程模型:Thread、Block、Grid 与内存协作 / CUDA Threads, Blocks, Grids, and Cooperative Memory Access

9. 并行算法模式:Map、Reduce、Scan、Stencil 与任务图 / Parallel Patterns: Map, Reduce, Scan, Stencil, and Task Graphs

10. 异构计算:CPU、GPU、NPU 如何协同工作 / Heterogeneous Computing with CPUs, GPUs, and NPUs

11. 分布式并行:MPI、集合通信、RDMA 与多机多卡 / Distributed Parallelism with MPI, Collective Communication, and RDMA

12. 性能工程:测量、Roofline、瓶颈定位与优化闭环 / Performance Engineering with Measurement, Roofline, and Bottleneck Analysis

13. 并行计算实战:AI、CAE、图像与科学计算 / Parallel Computing for AI, CAE, Imaging, and Scientific Computing

14. 并行计算实践路线:从单核优化到多机多卡 / A Parallel Computing Project Path from Single-Core to Multi-Node GPUs

本页目录

GPU 体系结构:SIMT、Warp、SM 与吞吐优先设计 / GPU Architecture with SIMT, Warps, and Streaming Multiprocessors ​

📅 创建时间:2026-07-20 🏷️ 标签:#GPU #SIMT #Warp #SM #CUDA 📚 前置知识:[[04-memory-hierarchy]] 📚 相关知识:[[/02-systems-and-performance/02-computer-architecture-and-hardware/03-gpu-architecture]]


1. GPU 为什么拥有大量计算单元 ​

CPU 需要高效处理复杂控制流、操作系统、中断和低延迟任务,因此每个核心包含复杂的预测、乱序和缓存结构。

GPU 面对的是大量相似任务:

text
为每个像素着色
为每个向量元素做运算
为矩阵中的大量输出元素做乘加
1
2
3

GPU 减少单线程控制资源,把更多芯片面积用于算术单元,通过同时维护大量线程隐藏等待延迟。


2. SIMT 执行模型 ​

SIMT 是 Single Instruction, Multiple Threads:

  • 编程时看到许多独立线程
  • 硬件把线程分组执行
  • 同组线程通常执行同一条指令

NVIDIA GPU 通常以 32 个线程组成一个 Warp。

text
Warp 0:Thread 0 ... Thread 31
Warp 1:Thread 32 ... Thread 63
1
2

它与 SIMD 相似,但编程抽象是线程,硬件负责将线程映射到执行通道。


3. SM:GPU 的基本执行组织 ​

Streaming Multiprocessor(SM)可以理解为 GPU 上负责调度和执行线程块的一组资源,通常包含:

  • Warp 调度器
  • FP32/INT 执行单元
  • Tensor Core
  • 寄存器文件
  • Shared Memory / L1 Cache
  • Load/Store 单元

一个 GPU 包含多个 SM。线程块会被分配到某个 SM 上执行,通常不会在执行中迁移到其他 SM。


4. 用大量线程隐藏延迟 ​

当 Warp A 等待显存数据时,SM 可以切换到已经就绪的 Warp B:

text
Warp A:等待内存 ───────────┐
Warp B:执行计算 ████████   │ 交错执行
Warp C:准备执行     ███████│
1
2
3

这种切换由硬件完成,成本远低于操作系统线程上下文切换。

前提是 SM 上有足够多的活跃 Warp。如果单个线程使用过多寄存器或单个 Block 使用过多 Shared Memory,可同时驻留的 Block 数会下降。


5. 分支发散 ​

同一个 Warp 中的线程走不同分支时,硬件可能需要分别执行各条路径:

cpp
if (threadIdx.x % 2 == 0)
    pathA();
else
    pathB();
1
2
3
4

概念上变成:

text
先让偶数线程执行 A,奇数线程等待
再让奇数线程执行 B,偶数线程等待
1
2

分支本身不是禁止项,真正的问题是同一 Warp 内分支不一致且两条路径工作量较大。


6. GPU 内存层次 ​

text
寄存器          每线程私有,最快,容量有限
Shared Memory   每 Block 共享,可编程管理
L1/L2 Cache     硬件缓存
Global Memory   GPU 显存,容量大、延迟高
Host Memory     CPU 内存,通常需通过 PCIe/NVLink 访问
1
2
3
4
5

GPU 优化的核心经常是:

  • 合并全局内存访问
  • 把重复使用的数据放入 Shared Memory
  • 控制寄存器使用
  • 减少 CPU 与 GPU 间的数据往返

7. 合并访存 ​

如果一个 Warp 中相邻线程访问相邻地址,硬件可以把访问合并成较少的内存事务:

text
线程 0 → a[0]
线程 1 → a[1]
...
线程 31 → a[31]   ✓ 连续、容易合并
1
2
3
4

跨步或随机访问会浪费带宽:

text
线程 0 → a[0]
线程 1 → a[1024]
线程 2 → a[2048]  ✗ 分散访问
1
2
3

8. Tensor Core 与专用数据通路 ​

现代 GPU 不只有通用浮点单元,还包含针对矩阵乘加设计的 Tensor Core。它们以块为单位执行:

text
D = A × B + C
1

使用 FP16、BF16、TF32、FP8 等低精度格式可以显著提高吞吐,但必须考虑数值范围、累加精度和算法稳定性。


9. GPU 不适合什么 ​

  • 数据规模很小,启动开销占主导
  • 分支高度不规则
  • 每个任务工作量差异巨大
  • 大量指针追逐和随机访问
  • CPU-GPU 传输比计算本身更贵
  • 必须频繁进行全局同步

GPU 的核心优势不是“单个核心更快”,而是让海量相似工作以高吞吐方式执行。


历史 GPU 架构补充 ​

本页保留课程合并前的 GPU 架构说明。

当前版本增加 SOL、功耗、虚拟化、拓扑和工具流程。

SM ​

SM 包含调度、执行、Register、Shared Memory 与 Cache 资源。

Kernel 的资源使用决定驻留能力。

Warp ​

Warp 以共同指令执行线程。

就绪 Warp 用于隐藏延迟。

发散 ​

同一 Warp 不同分支路径会分阶段执行。

分区和专用 Kernel 是候选方案。

Register ​

线程私有且快速。

过多使用降低驻留或导致 Spill。

Shared Memory ​

Block 内共享,适合 Tile 与复用。

注意 Bank、容量和 Barrier。

Global Memory ​

容量大,访问应尽量合并。

线程索引与布局共同决定事务。

Cache ​

L1/TEX 和 L2 减少部分重复访问。

命中率需要结合字节和时间。

Occupancy ​

Occupancy 是驻留比例,不是性能分数。

足够隐藏延迟后继续提高可能无益。

Warp Stall ​

常见等待:

  • Memory;
  • Barrier;
  • Dependency;
  • Execution Unit;
  • Atomic;
  • Instruction Fetch。

Stall 指标需要结合源码和指令。

SOL ​

Memory SOL 高提示接近内存路径上限。

Compute SOL 高提示接近计算路径上限。

两者低可能是延迟和并行度问题。

Tensor Core ​

针对特定矩阵和精度。

检查布局、Tile、累加与数值。

Copy Engine ​

传输与计算能否重叠取决于 Pinned Memory、Stream 和硬件。

多 GPU ​

考虑 PCIe、NVLink、P2P、NUMA 和集合通信。

功耗 ​

频率受功耗与温度限制。

长任务记录稳态而非短时峰值。

共享环境 ​

多进程与容器会引入队列、Context 和显存竞争。

端到端延迟包含等待。

Nsight Systems ​

查看 CPU/GPU、传输、Kernel、Stream、同步和 Idle。

Nsight Compute ​

查看单 Kernel 的 Warp、SM、Memory 和指令。

先系统后 Kernel。

实验记录 ​

  • GPU;
  • Driver;
  • Toolkit;
  • Compute Capability;
  • 输入;
  • Grid/Block;
  • Register;
  • Shared Memory;
  • Stream;
  • Profile;
  • 正确性。

历史参数边界 ​

SM 数、Warp、Cache、Tensor Core 和指标随架构变化。

旧型号阈值不能直接外推。

当前课程映射 ​

当前文章补充:

  • 资源细节;
  • SOL;
  • Tensor Core;
  • Copy Engine;
  • 多 GPU;
  • 功耗;
  • 虚拟化;
  • Profile;
  • 实验和完成标准。

阅读完成标准 ​

应能:

  • 解释 SM/Warp;
  • 分析发散;
  • 理解内存层次;
  • 判断 Occupancy;
  • 解释 SOL;
  • 分析拓扑;
  • 使用 Nsight;
  • 限定历史结论。

归档验证清单 ​

  • 架构与设备记录;
  • Driver/Toolkit 记录;
  • Kernel 配置记录;
  • 资源使用记录;
  • 传输计入时间;
  • Profile 原始文件;
  • CPU 参考结果;
  • 数值容差;
  • 功耗与温度;
  • 多 GPU 拓扑;
  • 共享环境说明;
  • 当前文档入口;
  • 旧指标版本边界;
  • 构建命令;
  • 输入校验和;
  • 原始样本。 所有结论都绑定记录的 GPU 架构。

核心总结 ​

  • GPU 用大量线程和执行单元换取吞吐。
  • Warp 是理解分支和访存行为的关键层次。
  • SM 资源限制决定同时活跃的线程数量。
  • 合并访存、数据复用和分支一致性直接影响效率。
  • Tensor Core 是矩阵计算的专用高吞吐通路。

下一篇:[[06-cuda-programming-model]]

最后更新于:

Pager
上一篇6. 内存层次:Cache、带宽、局部性与一致性 / Memory Hierarchies, Bandwidth, Locality, and Coherence
下一篇8. CUDA 编程模型:Thread、Block、Grid 与内存协作 / CUDA Threads, Blocks, Grids, and Cooperative Memory Access

持续记录,持续成长

Copyright © Tidenflow