1999 年,英伟达发明了 GPU(graphics processing unit),本文将介绍英伟达 GPU 从 Fermi 到 Blackwell 共 9 代架构,时间跨度从 2010 年至 2024 年,具体包括费米(Feimi)、开普勒(Kepler)、麦克斯韦(Maxwell)、帕斯卡(Pashcal)、伏特(Volt)、图灵(Turing)、安培(Ampere)和赫柏(Hopper)和布莱克韦尔(Blackwell)架构。经过 15 年的发展,CUDA 已成为英伟达的技术“护城河”,Tensor Core5.0,NVLink5.0,NVswitch4.0,Transformer Engine2.0 等技术迭代更新,正如英伟达公司官方宣传语所言:“人工智能计算领域的领导者,推动了 AI、HPC、游戏、创意设计、自动驾驶汽车和机器人开发领域的进步。”
架构名称 | 中文名字 | 发布时间 | 核心参数 | 特点&优势 | 纳米制程 | 代表型号 |
---|---|---|---|---|---|---|
Fermi | 费米 | 2010 | 16 个 SM,每个 SM 包含 32 个 CUDA Cores,一共 512 CUDA Cores | 首个完整 GPU 计算架构,支持与共享存储结合的 Cache 层次 GPU 架构,支持 ECC GPU 架构 | 40/28nm, 30 亿晶体管 | Quadro 7000 |
Kepler | 开普勒 | 2012 | 15 个 SMX,每个 SMX 包括 192 个 FP32+64 个 FP64 CUDA Cores | 游戏性能大幅提升,首次支持 GPU Direct 技术 | 28nm, 71 亿晶体管 | K80, K40M |
Maxwell | 麦克斯韦 | 2014 | 16 个 SM,每个 SM 包括 4 个处理块,每个处理块包括 32 个 CUDA Cores+8 个 LD/ST Unit + 8 SFU | 每组 SM 单元从 192 个减少到每组 128 个,每个 SMM 单元拥有更多逻辑控制电路 | 28nm, 80 亿晶体管 | M5000, M4000GTX 9XX 系列 |
Pascal | 帕斯卡 | 2016 | GP100 有 60 个 SM,每个 SM 包括 64 个 CUDA Cores,32 个 DP Cores | NVLink 第一代,双向互联带宽 160GB/s,P100 拥有 56 个 SM HBM | 16nm, 153 亿晶体管 | P100, P6000, TTX1080 |
Volta | 伏特 | 2017 | 80 个 SM,每个 SM 包括 32 个 FP64+64 Int32+64 FP32+8 个 Tensor Cores | NVLink2.0,Tensor Cores 第一代,支持 AI 运算,NVSwitch1.0 | 12nm, 211 亿晶体管 | V100, TiTan V |
Turing | 图灵 | 2018 | 102 核心 92 个 SM,SM 重新设计,每个 SM 包含 64 个 Int32+64 个 FP32+8 个 Tensor Cores | Tensor Core2.0,RT Core 第一代 | 12nm, 186 亿晶体管 | T4,2080TI, RTX 5000 |
Ampere | 安培 | 2020 | 108 个 SM,每个 SM 包含 64 个 FP32+64 个 INT32+32 个 FP64+4 个 Tensor Cores | Tensor Core3.0,RT Core2.0,NVLink3.0,结构稀疏性矩阵 MIG1.0 | 7nm, 283 亿晶体管 | A100, A30 系列 |
Hopper | 赫柏 | 2022 | 132 个 SM,每个 SM 包含 128 个 FP32+64 个 INT32+64 个 FP64+4 个 Tensor Cores | Tensor Core4.0,NVLink4.0,结构稀疏性矩阵 MIG2.0 | 4nm, 800 亿晶体管 | H100 |
Blackwell | 布莱克韦尔 | 2024 | - | Tensor Core5.0,NVLink5.0, 第二代 Transformer 引擎,支持 RAS | 4NP, 2080 亿晶体管 | B200 |
Fermi 架构
2006 年英伟达提出 G80 架构,使开发者可以基于 C 语言在 GPU 上进行开发。2008 年基于 G80 架构提出 GT200,增加了流处理器核的数量,更高的精度和并行能力使 GPU 进行科学计算和高性能计算成为可能。
2010 年英伟达提出 Feimi 架构,最大可支持 16 个 SMs,每个 SM 有 32 个 CUDA Core,一共 512 个 CUDA Core,架构设计主要是以当时游戏用户的需求为主,因此整个 GPU 有多个 GPC(图形处理簇),单个 GPC 包含一个光栅引擎(Raster Engine)和 4 个 SM。
GPU 拥有 6 个 64 位内存分区,总共是 384 位内存,最多支持 6 GB GDDR5 DRAM 内存。主机接口通过 PCI-Express 连接 GPU 和 CPU。GigaThread 全局调度器将线程块分配给 SM 线程调度器。因为计算核心较多,因此将 L2 Cache 放在处理器中间位置,使得数据可以在 CUDA Core 之间快速传输。
恩里科·费米(Enrico Fermi)是意大利裔美国物理学家,20 世纪最重要的物理学家之一,被誉为“原子能时代之父”。他在核物理、量子力学和统计力学等领域做出了重要贡献。主要成就包括:
提出费米子统计,即著名的费米-狄拉克统计,描述了半整数自旋的粒子的统计性质。
领导了芝加哥大学的“费米堆”课程,成功实现了世界上第一座自持核链反应堆。
参与了曼哈顿计划,对原子弹的研发做出了重要贡献。
获得了 1938 年的诺贝尔物理学奖,以表彰他在人类利用新的放射性同位素所作出的贡献。
Fermi 架构采用第三代流处理器,每个 SM 有 16 个加载/存储单元(Load/Store, LD/ST),允许为每个时钟 16 个线程计算源地址和目标地址,支持将每个地址的数据加载并存储到缓存或 DRAM 中。特殊功能单元(Special Function Unit, SFU)执行超越函数,如 sin、cos、导数和平方根。每个 SFU 在每个线程、每个时钟执行一条指令,一次 warp(由 32 个线程组成的线程组)要经过 8 个时钟周期。SFU 管线与调度单元解耦,允许调度单元在占用 SFU 时向其他执行单元发出命令。双精度算法是高性能计算应用的核心,每个 SM、每个时钟可执行多达 16 个双精度融合乘加运算。
每个 SM 有两个 warp 调度器和两个指令调度单元,允许同时发出和执行两个 warp。并行计算主要在 CUDA 中进行处理,每个 CUDA 处理器都有一个完整的流水线整数算术逻辑单元(ALU)和浮点单元(FPU),可以选择 FP 32 或者 INT 8 执行计算,但是 FP Unit 和 INT Unit 的执行不是并行的。
Fermi 架构支持新的并行线程执行 PTX 2.0(Parallel Thread Execution)指令集架构。一个 CUDA 程序被称作并行的 Kernel,线程分为三级,包含线程(Threads)、块(Blocks)和网格(Grid),每个层次结构对应硬件,Thread 可以共享局部内存(Local memory),线程块使用共享内存(Shared Memory),Grid 共享全局内存(Global Memory),具有相应的每个线程专用、每个块共享和每个应用程序全局内存空间。
Kepler 架构
2012 年英伟达提出 Kepler 架构,由 7.1 亿个晶体管组成的 Kepler GK110 将提供超过 1 TFlop 的双精度吞吐量,采用台积电 28 nm 制程,每瓦的性能是费米架构的 3 倍。由 15 个 SMX 单元和 6 个 64 bit 内存控制器,内存子系统提供额外的缓存功能,在每个层次结构的存储器有更大的带宽,实现更快的 DRAM I/O,同时为编程模型提供硬件支持。
约翰内斯·开普勒(Johannes Kepler)是一位德国天文学家、数学家和占星术士,被誉为现代天文学的奠基人之一。他生活在 16 世纪末至 17 世纪初,是科学革命时期的重要人物,他的工作对天文学和物理学领域产生了深远的影响,为后来伽利略和牛顿等科学家的研究奠定了基础。主要成就包括:
提出了行星运动的三大定律,即开普勒定律:
第一定律:行星绕太阳运行的轨道是椭圆形的,太阳位于椭圆的一个焦点上。
第二定律:行星在其轨道上的矢量面积与时间的比率是常数。
第三定律:行星轨道的半长轴与公转周期的平方成正比。
通过观测和分析提出了行星运动的椭圆轨道理论,颠覆了当时的圆周运动观念。
对光学、天文学和数学领域都做出了重要贡献,为日后牛顿的引力理论奠定了基础。
开普勒架构相比上一代 Fermi 架构,SM(Streaming Multiprocessor)更名为 SMX,但是本身的概念没有改变,每个 SMX 具有四个 warp 调度器和八个指令调度单元,允许同时发出和执行四个 warp。Fermi 架构共有 32 核,Kepler 架构拥有 192 核,大大提升了 GPU 并行处理的能力。Fermi 支持最大线程数是 1536,Kepler 最大线程数达到 2048。64 个双精度(Double-Precision,DP)单元,32 特殊功能单元(SFU)和 32 个 LD/ST(load/store)单元,满足高性能计算场景的实际需求。
Kepler 架构支持动态并行(Dynnamic Parallelism),在不需要 CPU 支持的情况下自动同步,在程序执行过程中灵活动态地提供并行数量和形式。Hyper-Q 使多个 CPU 核使用单个 GPU 执行工作,提高 GPU 利用率并显着减少 CPU 空闲时间,允许 32 个同时进行的硬件管理连接,允许从多个 CUDA 流处理,多个消息传递进程中分离出单个进程。使用网格管理单元(Grid Management Unit,GMU)启用动态并行和调度控制,比如挂起或暂停网格和队列直到执行的环境准备好。
英伟达 GPUDirect 可以使单个计算机内的 GPU 或位于网络上不同服务器中的 GPU 直接交换数据,而无需转到 CPU 系统内存,RDMA 特性允许第三方设备直接访问同一系统内多个 GPU 上的内存,减少了对系统内存带宽的需求,释放 GPU DMA 引擎供其它 CUDA 任务使用。
Maxwell 架构
2014 年英伟达提出 Maxwell 架构,麦克斯韦架构相比上一代架构没有太大改进,其中 SM 又使用了原来的名称,整体的核心个数变为 128 个,因为核心数不需要太多,可以通过超配线程数来提升 GPU 并行计算的能力。
SMM 使用基于象限的设计,其中每个 SMM 有四个共 32 核处理块,每个处理块都有一个专用的 warp 调度器,能够在每个时钟调度两条指令。每个 SMM 提供 8 个纹理单元,一个图形的几何处理引擎,以及专用的寄存器文件(Register File)和共享内存(Shared Memory)。单核性能是 Kepler 架构的 1.35 倍,performance/watt(性能与功耗的比率)是 Kepler 架构的两倍,在相同功耗下能够提供更高的性能。
詹姆斯·克拉克·麦克斯韦(James Clerk Maxwell)是 19 世纪苏格兰物理学家,被誉为电磁理论之父。他在电磁学和热力学领域做出了重要贡献,开创了现代物理学的新时代。主要成就包括:
提出了麦克斯韦方程组,总结了电磁场的基本规律,揭示了电磁波的存在,并将电磁学和光学统一起来。
发展了统计力学,提出了分子速度分布的麦克斯韦-玻尔兹曼分布定律,为热力学的发展做出了重要贡献。
提出了色散理论,解释了光的色散现象,为光学研究提供了新的理论基础。
预言了电磁波的存在,并在后来的实验证实了这一理论,为无线电通信的发展奠定了基础。
对比 Kepler 和 Maxwell 架构,Maxwell 架构拥有更大的专用共享内存,通过将共享内存与 L1 缓存分离,在每个 SMM 中提供专用的 64KB 共享内存,GM204 Maxwell 每个 SMM 的专用共享内存提高到 96KB。和 Kepler 和 Fermi 架构一样,每个线程块的最大共享内存仍然是 48KB。GM204 Maxwell 具有更大的二级缓存(L2 Cache),GK104 Kepler 的四倍,带宽受限的应用程序可以获得更大的性能优势。每个 SM 有更多活动线程块(Thread Blocks),从 16 增加到 32 有助于提高运行在小线程块上的内核使用率。可以对 32 位整数的本机共享内存进行原子操作,使线程块上的列表和栈类型数据更高效,和 Kepler 一样支持动态并行。
GPU GeForce | GTX 680 (Kepler GK104) | GTX 980 (Maxwell GM204) |
---|---|---|
CUDA Cores | 1536 | 2048 |
Base Clock | 1006 MHz | 1126 MHz |
GPU Boost Clock | 1058 MHz | 1216 MHz |
GFLOPs | 3090 | 4612 |
Compute Capability | 3.0 | 5.2 |
SMs | 8 | 16 |
Shared Memory / SM | 48KB | 96KB |
Register File Size / SM | 256KB | 256KB |
Active Blocks / SM | 16 | 32 |
Texture Units | 128 | 128 |
Texel fill-rate | 128.8 Gigatexels/s | 144.1 Gigatexels/s |
Memory | 2048 MB | 4096 MB |
Memory Clock | 6008 MHz | 7010 MHz |
Memory Bandwidth | 192.3 GB/sec | 224.3 GB/sec |
ROPs | 32 | 64 |
L2 Cache Size | 512 KB | 2048 KB |
TDP | 195 Watts | 165 Watts |
Transistors | 3.54 billion | 5.2 billion |
Die Size | 294 mm² | 398 mm² |
Manufacturing Process | 28-nm | 28 nm |
Pascal 架构
2016 年英伟达提出 Pascal 架构,相比之前的架构,Pascal 帕斯卡架构在应用场景、内存带宽和制程工艺等多个方面做出了创新。将系统内存 GDDR5 换成 HBM2,能够在更高的带宽下处理更大的工作数据集,提高效率和计算吞吐量,并减少从系统内存传输的频率,而且 HBM2 原生支持数据纠错(Error correcting Code, ECC)。采用 16nm FinFET 工艺,拥有 15.3 亿个晶体管,相同功耗下算力提升提升一个数量级。同时提出第一代 NVLink,提升单机卡间通信之外扩展多机之间的带宽。支持统一内存,允许在 GPU 和 CPU 的完整虚拟地址空间之间透明迁移数据,降低了并行编程的门槛。支持计算抢占和针对 Pascal 架构优化的 AI 算法,可应用于高性能计算、深度学习和 GPU 计算密集型领域。
GP100 Pascal 由图形处理集群(GPCs)、纹理处理集群(TPCs)、流式多处理器(SMs)和内存控制器组成。一个完整的 GP100 由 6 个 GPCs、60 个 Pascal SMs、30 个 TPCs(每个都包括 2 个 SMs)和 8 个 512 位内存控制器(总共 4096 位)组成。每个 GPC 都有 10 个 SMs,每个 SM 有 64 个 CUDA 核和 4 个纹理单元,拥有 60 个 SMs,共有 3840 个单精度 CUDA Cores 和 240 个纹理单元。每个内存控制器都连接到 512 KB 的 L2 高速缓存上,每个 HBM2 DRAM 都由一对内存控制器控制,总共包含 4096 KB L2 高速缓存。
Pascal 架构在 SM 内部作了进一步精简,整体思路是 SM 内部包含的硬件单元类别减少,因为芯片制程工艺的进步,SM 数量每一代都在增加。单个 SM 只有 64 个 FP32 CUDA Cores,相比 Maxwell 的 128 核和 Kepler 的 192 核,数量少了很多,并且 64 个 CUDA Cores 分为了两个区块,每个处理块有 32 个单精度 CUDA Cores、一个指令缓冲区、一个 Warp 调度器和两个调度单元(Dispatch Unit)。分成两个区块之后,Register File 保持相同大小,每个线程可以使用更多的寄存器,单个 SM 可以并发更多的 thread/warp/block,进一步增加并行处理能力。
增加 32 个 FP64 CUDA Cores(DP Unit),FP32 CUDA Core 具备处理 FP16 的能力。此外,每个 SM 具有 32 个双精度(FP64)CUDA Cores,使得 GPU 更有效地处理双精度计算任务。与精度更高的 FP32 或 FP64 相比,存储 FP16 数据可以减少神经网络的内存使用,从而允许训练和部署更大的网络。为加速深度学习支持 FP16,与 FP32 相比可以提高 2 倍性能,同时数据传输需要的时间更少。
布莱斯·帕斯卡(Blaise Pascal)是 17 世纪法国数学家、物理学家、哲学家和神学家,视为文艺复兴时期最重要的思想家之一。他在多个领域都有重要的贡献,被认为是现代概率论和流体力学的奠基人之一。主要成就包括:
发明了帕斯卡三角形,这是一个数学工具,被广泛用于组合数学和概率论中。
提出了帕斯卡定律,描述了液体在容器中的压力传递规律,对流体力学的发展产生了重要影响。
发展了概率论,提出了帕斯卡概率论,为后来的概率统计学奠定了基础。
在哲学和神学领域,他提出了帕斯卡赌注,探讨了信仰与理性的关系,对基督教神学产生了深远的影响。
由于多机之间采用 InfiniBand 和 100 GB Ethernet 通信,单个机器内单 GPU 到单机 8 GPU,PCIe 带宽成为瓶颈,因此 Pascal 架构首次提出 NVLink,针对多 GPU 和 GPU-to-CPU 实现高带宽连接。NVLink 用以单机内多 GPU 内的点对点通信,带宽达到 160 GB/s,大约是 PCIe 3x16 的 5 倍,减少数据传输的延迟,避免大量数据通过 PCIe 回传到 CPU 的内存中,导致数据重复搬运,实现 GPU 整个网络的拓扑互联。在实际训练大模型的过程中,带宽会成为分布式训练系统的主要瓶颈,从而使得 NVLink 成为一项具有重要意义的创新。
Volta 架构
2017 年英伟达提出 Volta 架构,GV100 GPU 有 21.1 亿个晶体管,使用 TSMC 12 nm 工艺。伏特架构做了以下创新:
(1)CUDA Core 拆分,分离 FPU 和 ALU,取消 CUDA Core 整体的硬件概念,一条指令可以同时执行不同计算,同时对 CUDA 应用程序并行线程更进一步,提高了 CUDA 平台的灵活性、生产力和可移植性;
(2)提出独立线程调度,改进单指令多线程 SIMT 模型架构,使得每个线程都有独立的 PC(Program Counter)和 Stack,程序中并行线程之间更细粒度的同步和协作;
(3)专门为深度学习优化了 SM 架构,针对 AI 计算首次提出第一代张量核心 Tersor Core,提高深度学习计算中卷积运算进行加速;
(4)对 NVLink 进行改进,提出第二代 NVLink,一个 GPU 可以连接 6 个 NVLink,而不是 Pascal 时代的 4 个,16 GB HBM2 内存子系统提供了 900GB/秒的峰值内存带宽;
(5)提出 MPS 概念,在多个应用程序单独未充分利用 GPU 执行资源时,允许多个应用程序同时共享 GPU 执行资源,使得多进程服务可以更好的适配到云厂商进行多用户租赁,客户端数量从 Pascal 上的 16 个增加到 Volta 上的 48 个,支持多个单独的推理任务并发地提交给 GPU,提高 GPU 的总体利用率;
(6)结合 Volta 架构新特性优化 GPU 加速库版本,如 cuDNN、cuBLAS 和 TensorRT,为深度学习推理和高性能计算(HPC)应用程序提供更高的性能。英伟达 CUDA 9.0 版本提供了新的 API 支持 Volta 特性,更简单的可编程性。英伟达 TensorRT 是一款用于高性能深度学习推理的 SDK,包含深度学习推理优化器和运行时,可为推理应用程序提供低延迟和高吞吐量。
亚历山大·伏特(Alessandro Volta)是 18 世纪意大利物理学家,被誉为电池之父。他是电学领域的先驱之一,发明了第一种真正意义上的化学电池,被称为伏特电池,为电化学和现代电池技术的发展奠定了基础。主要成就包括:
发明了伏特电堆,这是由多个铜和锌片交替堆叠而成的装置,能够产生持续的电流,是第一个实用的化学电池。
提出了静电感应理论,探讨了静电现象的本质,对电学理论的发展产生了重要影响。
研究了气体的电学性质,发现了甲烷和氧气的反应可以产生火花,为后来的火花塞技术和火花点火系统的发展做出了贡献。
与上一代 Pascal GP100 GPU 一样,GV100 GPU 有 6 个 GPU 处理集群(GPCs),每个 GPC 有 7 个纹理处理集群(TPCs)、14 个流式多处理器(SMs),以及内存控制器。
Volta 伏特架构 SM 结构相比前几代架构,SM 的数目明显增多,SM 被划分为四个处理块,单个 SM 中包含 4 个 Warp Schedule,4 个 Dispatch Unit,64 个 FP32 Core(4*16),64 个 INT32 Core(4*16),32 个 FP64 Core(4*8),8 个 Tensor Core(4*2),32 个 LD/ST Unit(4*8),4 个 SFU,FP32 和 INT32 两组运算单元独立出现在流水线中,每个 Cycle 都可以同时执行 FP32 和 INT32 指令,因此每个时钟周期可以执行的计算量更大。Volt 架构新增了混合精度张量核心(Tensor Core)以及高性能 L1 数据缓存和新的 SIMT 线程模型。单个 SM 通过共享内存和 L1 资源的合并,相比 GP100 64 KB 的共享内存容量,Volta 架构增加到 96KB。
新的张量核心使 Volta 架构得以训练大型神经网络,GPU 并行模式可以实现深度学习功能的通用计算,最常见卷积/矩阵乘(Conv/GEMM)操作,依旧被编码成融合乘加运算 FMA(Fused Multiply Add),硬件层面还是需要把数据按照:寄存器-ALU-寄存器-ALU-寄存器方式来回来回搬运数据,因此专门设计 Tensor Core 实现矩阵乘计算。
英伟达计算硬件模型从 SIMT 发展成为了 SIMT+DSA 的混合,每个张量核心单时钟周期内执行 64 个浮点 FMA 操作,而 SM 中的 8 个张量核心单时钟周期总共执行 512 个 FMA 操作(或 1024 个单独的浮点操作)。每个张量核心在一个 4x4 矩阵上操作,并执行计算:$D=A×B+C \quad\quad\quad\quad\quad$,输入 A 和 B 矩阵是 FP16,而计算结果矩阵 C 和 D 可以是 FP16 或 FP32 矩阵,极大地减少了系统内存的开销,一个时钟周期内可以执行更多的矩阵运算,使得 GPU 在能耗上更有优势。CUDA 9 C++ API 有专门的矩阵乘和存储操作,有效地使用 CUDA-C++程序中的张量核心,同时 cuBLAS 和 cuDNN 库利用张量核进行深度学习研究。
英伟达伏特架构的 GPU 以 Tesla V100 Powered DGX Station 的形式对外出售工作站。此时不再使用 PCIe 连接 GPU,而是将多个 GPU 直接封装在同一块主板上,第二代 NVLink 每个连接提供双向各自 25 GB/s 的带宽,并且一个 GPU 可以接 6 个 NVLink,专门用于 GPU-GPU 通信,同时允许从 CPU 直接加载/存储/原子访问到每个 GPU 的 HBM2 内存。
此外,NVSwitch1.0 技术是 Volta 架构中的一项重要创新,旨在提高 GPU 之间的通信效率和性能。NVSwitch1.0 可以支持多达 16 个 GPU 之间的通信,可以实现 GPU 之间的高速数据传输,提高系统的整体性能和效率,适用于需要大规模并行计算的场景,比如人工智能训练和科学计算等领域。
英伟达 Tesla V100 将深度学习的新架构特性与 GPU 计算性能相结合,提供了更高的神经网络训练和推理性能。NVLink 使多 GPU 系统提供了性能可伸缩性,同时 CUDA 编程的灵活性允许新算法快速开发和部署,满足了人工智能、深度学习系统和算法的训练和推断的持续需求。