CUDA核心概念快速入门:一文看懂warp、共享内存与tile(Maths, CS AI Compendium GPU编程指南)
2026/9/18 16:48:44 网站建设 项目流程

CUDA核心概念快速入门:一文看懂warp、共享内存与tile(Maths, CS & AI Compendium GPU编程指南)

【免费下载链接】maths-cs-ai-compendiumBecome a cracked AI/ML researcher/engineer with this unconventional textbook covering maths, computing, and ML with intuition.项目地址: https://gitcode.com/GitHub_Trending/mat/maths-cs-ai-compendium

Maths, CS & AI Compendium是一本从零基础讲起、覆盖数学、计算机科学与AI/ML的非传统开源教材。本文基于其第16章「SIMD与GPU编程」,带你快速搞懂 CUDA 编程中最核心的三个概念——warp(线程束)共享内存tile(分块),即使不写一行 CUDA 代码,也能建立正确的 GPU 性能心智模型。

为什么AI/ML人必须懂GPU编程?

训练一个 Transformer 需要数万亿次乘加运算,而 CPU 通常只有 4–128 个核心,现代 NVIDIA GPU 则有超过10,000 个 CUDA 核心。这就是 GPU 统治深度学习的原因。

CPUGPU
核心数4–128(复杂、快)1,000–20,000(简单、多)
设计目标低延迟(把单个任务做完)高吞吐(每秒完成更多任务)
缓存大(32MB+ L3)小(每SM一块共享内存)
分支预测精密无(同一warp内线程走同一条路径)
FP32算力1–5 TFLOPS30–80 TFLOPS
内存带宽50–100 GB/s1–3 TB/s

💡关键洞察:GPU 的内存带宽优势(10–30倍)往往比算力优势更重要。大量 ML 操作(逐元素运算、归一化、注意力)都是访存密集型的——瓶颈不在计算,而在喂数据。

GPU如何分任务:Grid、Block、Thread三层结构

CUDA 把一次内核(kernel)启动的任务组织成三层金字塔:

  • Thread(线程):最小执行单元,每个线程有唯一 ID,负责一小块数据
  • Block(线程块):一组最多1024 个线程,可以共享内存、互相同步
  • Grid(网格):一次启动的所有 Block,可达数百万个

可以类比成:Grid 是一个大工地,Block 是一个施工班组,Thread 是班组里的一名工人。每个线程通过「班组号 × 班组人数 + 自己在班组的编号」算出自己的全局工位,各干各的活。

warp是什么:GPU速度的秘密(与代价)

GPU 并不按单个线程执行,而是以warp(线程束)为单位——32 个线程组成一个 warp,同一时刻执行同一条指令(SIMT 模型,即 GPU 版的 SIMD)。

这就是 GPU 快的原因:32 路并行零开销。

⚠️ 但这也带来一个著名陷阱——warp 分歧(warp divergence)

  • 当同一 warp 里的线程在if/else中走不同分支时,GPU 无法同时执行两条指令,只能串行执行两个分支,并用掩码屏蔽不该参与的线程
  • 结果:性能直接腰斩甚至更差

实用建议:写内核时尽量让判断条件对所有线程一致,或改写为无分支形式(例如用乘数/系数代替 if),这是新手最容易忽略的性能点。

共享内存与tile:GPU调优最重要的优化

先认识 GPU 的内存层级——离核心越近,越快但越小

内存容量延迟作用域
寄存器~256 KB/SM0 周期每个线程
共享内存48–228 KB/SM~5 周期同一 Block
L1 / L2 缓存128KB–96 MB~30 / ~200 周期SM / 全局
全局内存(HBM)24–192 GB~400 周期全局

Tiling(分块)模式正是 GPU 编程的看家技巧:

  1. 从慢速的全局内存,把一个TILE_SIZE × TILE_SIZE 的数据小方块(tile)一次性载入快速的共享内存
  2. Block 内所有线程直接对这个 tile 反复计算
  3. 算完再写入全局内存

没有 tiling 时,矩阵乘法的每个线程每次乘加都要跑一趟全局内存;有了 tiling,数据加载一次、被整个 Block 复用 TILE_SIZE 次,全局内存流量直接减少相应倍数。这就是为什么矩阵乘法是 GPU 上最经典的性能教学案例。

3条你应该记住的CUDA性能法则

  • 合并访问(coalescing):让相邻线程访问相邻地址,GPU 会把 32 个请求合并成一次 128 字节的事务;跨步访问(strided)则可能把带宽利用率打到 3%
  • 避免warp分歧:分支越少越快,必要时改写为无分支代码
  • 内核融合(kernel fusion):把matmul → 加bias → ReLU三步合成一个内核,中间结果不再落盘——这是 ML 中最有影响力的单点优化,PyTorch 的torch.compile正是在自动化这件事

📌 还有一个方法论:先**剖析(profile)**再优化。NVIDIA 的 Nsight 工具链(ncu/nsys)可以告诉你瓶颈是内存、算力还是延迟——大多数 ML 负载是访存密集型,换更快的 GPU 往往不如换更快的内存管用。

继续学习:教材相关章节与资料清单

想动手写代码或深挖原理,教材第16章是完整的学习路线:

  • 入门动机与框架原理:chapter 16 - SIMD and GPU programming/00. why C++ and how ML frameworks work.md
  • 硬件基础与Roofline模型(判断访存/计算瓶颈):chapter 16 - SIMD and GPU programming/01. hardware fundamentals.md
  • 本文核心章节,含完整CUDA内核示例与3个编程任务:chapter 16 - SIMD and GPU programming/04. GPU architecture and CUDA.md
  • 跨平台视野(Triton、TPU等):chapter 16 - SIMD and GPU programming/05. triton, TPUs and pallax.md
  • 推理侧延伸(量化、混合精度与Tensor Core):chapter 17 - AI inference/01. quantisation.md
  • 全书章节索引:llms.txt · 项目总览:README.md

该仓库还内置了一个MCP 服务器(源码见 mcp/src/index.ts),可以让 Claude Code、Cursor 等 AI 助手直接把这本教材当知识库调用。它需要一个本地仓库副本:

git clone https://gitcode.com/GitHub_Trending/mat/maths-cs-ai-compendium

小结:GPU 用「海量简单核心 + 分层内存」换吞吐;warp 是它的执行节拍,共享内存 + tile 是它的加速杠杆,合并访问与内核融合是它的日常纪律。掌握这几点,你就读懂了 GPU 编程的一半——另一半,去第16章把代码跑起来吧。⚡

【免费下载链接】maths-cs-ai-compendiumBecome a cracked AI/ML researcher/engineer with this unconventional textbook covering maths, computing, and ML with intuition.项目地址: https://gitcode.com/GitHub_Trending/mat/maths-cs-ai-compendium

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询