第6章 GPU 架构、CUDA编程与占用率最大化
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
本章将首先回顾单指令多线程(SIMT)执行模型,并阐述如何通过波束、线程块和网格将基于GPU的算法映射到流式多处理器(SM)上。
我们将回顾现代NVIDIA GPU上的SIMT执行模型,包括warp、线程块和网格如何映射到SM。随后深入探讨CUDA编程模式,解析片上内存层次结构(寄存器文件、共享/L1缓存、L2缓存、HBM3e),并演示GPU异步数据传输能力——包括张量内存加速器(TMA)及作为张量核心运算累加器的张量内存(TMEM)。
同时将引入屋顶线分析法,用于识别计算有界型与内存有界型内核。这些基础知识将为现代GPU系统突破理论峰值吞吐量上限提供关键路径。
理解GPU架构
与优化 实现低延迟单线程性能的CPU不同,GPU是为并行运行数千个线程而设计的吞吐量优化处理器。图6-1展示了CPU与GPU之间简单的CUDA编程流程。
图6-1. 简单 CUDA编程流程
初始阶段,主机将数据加载至CPU内存。随后将数据从CPU复制到GPU内存。调用GPU内存中的数据运行GPU内核后,CPU将结果从GPU内存复制回CPU内存。此时结果数据已返回CPU进行后续处理。
GPU依赖大规模并行性来隐藏数据传输延迟,例如图6-1所示的CPU-GPU数据传输。每个GPU包含多个SM单元,其功能大致类似于CPU核心,但经过并行化优化。在Blackwell架构中,每个SM最多可管理64个warp(32个线程组)。
每块GPU包含多个SM单元——类似于CPU核心但针对吞吐量进行优化。在现代GPU上,每个SM可同时跟踪多达64个线程组(2048个线程)。Blackwell GPU的每个SM配备64K个32位寄存器(总计256KB)及256KB的L1缓存/共享内存。其中最多可配置228KB(可用227KB)SRAM作为每个SM的用户管理共享内存。任意单线程块最多可请求227KB动态共享内存(其中1KB由CUDA预留)。这些特性使SM能够支持GPU的高线程级并行度。
在Blackwell SM内部,多个线程组调度器向可用流水线发出指令;四个独立的线程组调度器允许每个周期最多四个线程组向流水线发出指令。此外,每个调度器支持双指令发射,可为每个线程组同时发出两条独立指令(例如一条算术运算和一条内存操作)。需注意双指令发射必须来自同一线程组,不可跨线程组。
在最佳情况下,每个调度器可每周期让一个流式单元并发发出指令,实现每周期四个流式单元的并行执行。如图6-2所示,当采用指令混合执行时,这将进一步提升吞吐量。
图6-2. Blackwell流 处理器单元包含四个独立的线程组调度器,每个调度器每周期可发出一个线程组指令,并支持双指令发射(即每个调度器可同时发出一个数学运算和一个内存操作指令)
在此架构中,每个SM被划分为四个独立调度分区——各分区配备专属的波段调度器和调度逻辑。可将SM视为共享片上资源的四个"微型SM"。该设计使硬件能在每个时钟周期内从最多四个不同波段中选取就绪波段并发出指令。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access