GPU 计算执行栈
GPU 计算执行栈描述一个高层算子如何从 CPU 侧框架进入 GPU 并完成计算。它连接软件图优化、Runtime、内核驱动、命令队列、GPU 前端、调度器和执行单元,是理解 AI 性能瓶颈与算子优化的共同地图。
端到端路径
算子/计算图
→ 图编译器与 Runtime(选择/生成 kernel,准备依赖与参数)
→ 驱动(显存、地址空间、队列和命令描述符)
→ Ring Buffer / Doorbell(提交并通知)
→ Command Processor / DMA(解析命令与搬运数据)
→ Block / Warp / SM 调度
→ Fetch / Decode / Dispatch / Scoreboard
→ ALU / SFU / LSU / Tensor Core
→ 写回显存与同步三个关键边界
编译器 vs Runtime
编译器负责图重写、算子融合、布局选择和 kernel 生成;Runtime 负责具体执行时的参数、依赖、流与提交。两者边界会因框架和编译模式变化。
Runtime vs 驱动
驱动提供资源管理和快速提交接口:控制面常通过 ioctl 管理显存/上下文/队列,数据面可用 mmap 暴露 Doorbell 页面,减少每次提交的系统调用开销。
命令 vs 代码
命令描述符通常不携带完整 kernel 源码,而是引用已加载到 GPU 地址空间的二进制,并附 grid/block、共享内存、参数和同步信息。
性能分析意义
- CPU 提交或同步慢:看 Runtime、驱动、队列与过细 kernel。
- 数据搬运慢:看 DMA、显存布局、PCIe/NVLink 与重叠执行。
- GPU 利用率低:看占用率、依赖、分支、访存与调度。
- 算子多且碎:优先看图融合、Kernel Fusion 与批处理。
架构差异:CUDA/PTX/SASS 与 SM/Warp 是 NVIDIA 语境;其他 GPU/加速器采用不同命名和实现。本文提供跨层心智模型,不是某一代芯片的官方微架构说明。