运行 CUDA 内核时会发生什么?
本文深入探讨了运行 CUDA 内核时 GPU 内部发生的底层细节,从主机端调用到线程在流式多处理器(SM)上的调度与执行。文章解释了网格、线程块与 warp 的概念,以及内存层次结构(全局内存、共享内存、寄存器)如何协同工作。作者通过逐步拆解,帮助读者理解 GPU 并行计算的真实运作机制。
背景速读
CUDA(Compute Unified Device Architecture)是英伟达(NVIDIA)推出的并行计算平台和编程模型,允许开发者利用GPU(图形处理器)进行通用计算,而不仅限于图形渲染。GPU拥有数千个小型核心,擅长同时执行大量简单运算——这与CPU的少量、强大核心形成鲜明对比。
- CUDA kernel(内核):用CUDA C/C++编写的函数,在GPU上以数千个并行线程运行。开发者通过“启动配置”(launch configuration)指定线程数量和组织方式。
- 传统上,程序员把数据从CPU内存复制到GPU显存(VRAM),启动kernel并行处理,再把结果复制回CPU——这套流程称为“offloading”(卸载)。
- 本文深入GPU内部执行细节:线程束(warp,32线程一组的调度单元)、SIMT(单指令多线程)模型、内存层级(全局/共享/寄存器内存)、以及warp divergence(分支分歧,同一warp内线程走不同分支会导致性能下降)。
- 理解这些底层机制对高性能计算、深度学习(训练/推理)、科学模拟等重度依赖GPU加速的领域至关重要。近年来AI大模型爆发,CUDA优化更成为热点话题。