文中图片大部分来自NVIDIA 产品白皮书
TODO:英伟达显卡型号梳理

目录

一、NVIDIA GPU的架构演变历史
二、Tesla 架构
三、Fermi架构
四、Kepler架构
五、Maxwell架构
六、Pascal架构
七、Volta架构
八、Turing架构
九、Ampere架构
十、Hopper架构

一、NVIDIA GPU的架构演变历史和基本概念[1]

截止2021年,发布时间离我们最近的8种NVIDIA GPU微架构是:

  • Tesla  (特斯拉)
  • Fermi(费米)
  • Kepler(开普勒
  • Maxwell(麦克斯韦
  • Pascal(帕斯卡
  • Volta(伏特)
  • Turing(图灵)
  • Ampere(安培)
  • Hopper(赫柏)

NVIDIA一般以历史上一些著名科学家的名字命名自己的GPU微架构,上面8种微架构分别是:特斯拉费米开普勒麦克斯韦帕斯卡伏特图灵安培,赫柏

其中最新的是2020年宣布的Ampere架构。

二、Tesla 架构

Tesla 架构的资料在官网也没找到多少,不过这是英伟达第一个实现统一着色器模型的微架构。

显卡架构变化 显卡架构命名_显卡架构变化

经典型号是G80,在Fermi架构白皮书的开篇部分有对G80的简要介绍:

  • G80 是第一款支持 C 语言的 GPU,让程序员无需学习新的编程语言即可使用GPU的强大功能。
  • G80 是第一款用单一、统一的处理器取代独立的顶点和像素管道的 GPU,该处理器可以执行顶点、几何、像素和计算程序。
  • G80 是第一款使用标量线程处理器的 GPU,无需程序员手动管理向量寄存器
  • G80 引入了单指令多线程 (SIMT) 执行模型,即多个独立线程使用一条指令并发执行。
  • G80 为线程间通信引入了共享内存(shared memory)和屏障同步(barrier synchronization)。

显卡架构变化 显卡架构命名_CUDA_02

G80 显卡

三、Fermi架构[2]

Fermi 架构是NVIDIA GPU 架构自初代 G80 以来最重大的飞跃。

NVIDIA的GPU研发团队从G80和GT200两个型号上汲取经验,采用全新的设计方法来创建世界上第一个计算 GPU。在这个过程中,专注于提高以下关键领域:

  • 提高双精度性能——虽然单精度浮点性能大约是桌面 CPU 性能的十倍,但一些 GPU 计算应用程序也需要更高的双精度性能。
  • ECC 支持——ECC 允许 GPU 计算用户在数据中心安装中安全地部署大量 GPU,并确保医疗成像和金融期权定价等数据敏感应用程序免受内存错误的影响。
  • True Cache Hierarchy—— 一些并行算法无法使用 GPU 的共享内存,用户需要一个真正的缓存架构来帮助他们。
  • 更多共享内存——许多 CUDA 程序员要求超过 16 KB 的 SM 共享内存来加速他们的应用程序。
  • 更快的上下文切换——用户要求在应用程序和更快的图形和计算互操作之间进行更快的上下文切换。
  • 更快的原子操作(Atomic Operations)——用户要求为他们的并行算法提供更快的读-修改-写原子操作。

基于以上出发点,Fermi架构有以下四大亮点:

第三代流式多处理器 (SM)

  • 每个 SM 有 32 个 CUDA 内核,是 GT200 的 4 倍
  • 8 倍于 GT200 的峰值双精度浮点性能
  • Dual Warp Scheduler 同时调度和分派来自两个独立 warp 的指令
  • 64 KB RAM,可配置共享内存和 L1 cache

第二代并行线程执行 ISA

  • 具有完整 C++ 支持的统一地址空间
  • 针对 OpenCL 和 DirectCompute 进行了优化
  • 完整的 IEEE 754-2008 32 位和 64 位精度
  • 带有 64 位扩展的完整 32 位整数路径
  • 支持过渡到 64 位寻址的内存访问指令
  • 通过预测提高性能

改进的内存子系统

  • 具有可配置 L1 和Unified L2 Caches 的 NVIDIA Parallel DataCache TM 层次结构
  • 第一个支持 ECC 内存的 GPU
  • 大幅提升原子内存操作性能

NVIDIA GigaThread TM 引擎

  • 应用程序上下文切换速度提高 10 倍
  • 并发内核执行
  • 乱序线程块执行
  • 双重叠内存传输引擎

以上是Fermi 架构相较于初代架构提升的地方

下面具体看看Fermi 架构的配置

显卡架构变化 显卡架构命名_显卡架构变化_03

Fermi 架构

第一个基于Fermi架构的GPU,使用 30 亿个晶体管实现,共计512个CUDA内核。

这512 个 CUDA 内核被组织成 16 个 SM,每个 SM 是一个垂直的矩形条带(红框中的内容),分别位于一个普通的 L2 cache周围,每个 SM 有32 个CUDA 内核。

一个CUDA 内核为一个线程在每个时钟周期里执行一条浮点或整数指令

6个64-bit显存分区,组成一个384-bit的显存接口,总共支持高达 6GB 的 GDDR5 DRAM显存。

GDDR5:第五版图形用双倍数据传输率存储器
DRAM:动态随机存取存储器

主机接口(host interface )通过 PCI-Express 将 GPU 连接到 CPU。 Giga Thread 全局调度器将线程块分发给 SM 线程调度器。

显卡架构变化 显卡架构命名_云计算_04

Fermi图形渲染架构

整个 GPU 有多个 GPC(图形处理集群),单个GPC包含一个光栅引擎(Raster Engine),四个 SM(流式多处理器),GPC 可以被认为是一个独立的 GPU。所有从 Fermi 开始的 NVIDIA GPU,都有 GPC。

显卡架构变化 显卡架构命名_显卡架构变化_05

Fermi Streaming Multiprocessor (SM)

上图是将16个SM中的 1 个拿出来放大后的详细结构图,其中包含:

  • 橙色部分:2 个 Warp Scheduler/Dispatch Unit
  • 绿色部分:32 个 CUDA 内核,分在两条 lane 上,每条分别是 16 个
  • 浅蓝色部分:register file-寄存器文件和 L1 cache
  • 16 个 Load/Store units (LD/ST Unit)
  • 4 个 Special Function Units (SFU)

每个 SM 具有 32 个 CUDA 内核,就是图中写着Core的绿色小方块儿,每个 CUDA 内核都有一个完全流水线化的整数算术逻辑单元 (ALU) 和浮点单元 (FPU):

显卡架构变化 显卡架构命名_浮点_06

CUDA 内核

SM(Streaming Multiprocessors)是GPU架构中非常重要的部分,GPU硬件的并行性就是由SM决定的。

四、Kepler架构

显卡架构变化 显卡架构命名_Core_07

Kepler架构的思路是:减少SM单元数(在这一代中叫SMX单元),增加每组SM单元中的CUDA内核数。在Kepler架构中,每个SM单元的CUDA内核数由Fermi架构的32个激增至192个。

显卡架构变化 显卡架构命名_浮点_08

在每个SMX中:

  • 4 个 Warp Scheduler,8 个 Dispatch Unit
  • 绿色:192个 CUDA 内核,分在12条 lane 上,每条分别是 16 个
  • 黄色:64 个DP双精度运算单元,分在4条 lane 上,每条 lane 上 16 个
  • 32 个 LD/ST Unit
  • 32 个 SFU

五、Maxwell架构

Maxwell架构的SM单元和Kepler架构相比,又有很大变化,这一代的SM单元更像是把4个Fermi 架构的SM单元,按照2x2的方式排列在一起,这一代称为SMM单元:

显卡架构变化 显卡架构命名_浮点_09

显卡架构变化 显卡架构命名_云计算_10

SMM 使用基于象限的设计,具有四个 32 核处理块(processing blocks),每个处理块都有一个专用的 warp 调度程序,能够在每个时钟分派两条指令。

每个 SMM 单元提供

  • 八个纹理单元(texture units)
  • 一个多态引擎(polymorph engine-图形的几何处理)
  • 专用寄存器文件和共享内存。

每个处理块中:

  • 1个 Warp Scheduler,2 个 Dispatch Unit
  • 绿色:32个 CUDA 内核
  • 8个 LD/ST Unit
  • 8个 SFU

CUDA内核总数 从Kpler时代的每组SM单元192个减少到了每组128个,但是每个SMM单元将拥有更多的逻辑控制电路,便于精确控制。

参考:
Maxwell: The Most Advanced CUDA GPU Ever Made | NVIDIA Developer Blog

六、Pascal架构

显卡架构变化 显卡架构命名_云计算_11

pascal架构的GP100核心

这里有一个新概念:核心

NVIDIA不同的架构会有几种不同的核心,Pascal架构有GP100、GP102两种大核心:

  • GP100:3840个CUDA核心,60组SM单元;
  • GP102:3584个CUDA核心,28组SM单元;

第2组数据存疑

核心是一个完整的GPU模组,上图展示了一个pascal架构的GP100核心,带有 60 个 SM 单元。

不同的显卡产品可以使用不同的 GP100 配置,一般是满配或者减配,比如Tesla P100 使用了 56 个 SM 单元。

显卡架构变化 显卡架构命名_显卡架构变化_12

GP100核心的SM单元

每个SM单元中,分为2个Process Block,每个Process Block中:

  • 1个 Warp Scheduler,2 个 Dispatch Unit
  • 绿色:32个 CUDA 内核
  • 黄色:16 个DP双精度运算单元,分在2条 lane 上,每条 lane 上 8个
  • 8个 LD/ST Unit
  • 8个 SFU

CUDA内核总数从Maxwell时代的每组SM单元128个减少到了每组64个,这一代最大的特点是又把DP双精度运算单元加回来了。

制程工艺升级到了16nm,性能大幅提升,功耗却不增加。

七、Volta架构

显卡架构变化 显卡架构命名_CUDA_13

Volta架构的GV100核心

显卡架构变化 显卡架构命名_CUDA_14

GV100核心的SM单元

每个SM单元中,分为4个Process Block,每个Process Block中:

  • 1个 Warp Scheduler,1个 Dispatch Unit
  • 8 个 FP64 Core
  • 16 个 INT32 Core
  • 16 个 FP32 Core
  • 2 个 Tensor Core
  • 8个 LD/ST Unit
  • 4个 SFU

在前几代架构中:

一个CUDA 内核在每个时钟周期里只能为一个线程执行一条浮点或整数指令

但是从Volta架构开始,将一个CUDA 内核拆分为两部分:FP32 和 INT32,好处是在同一个时钟周期里,可以同时执行浮点和整数指令,提高计算速度。

Volta架构在传统的单双精度计算之外还增加了专用的Tensor Core张量单元,用于深度学习、AI运算等。

八、Turing架构

显卡架构变化 显卡架构命名_浮点_15

Turing架构的TU102核心

Turing架构目前一共有三种核心:

  • TU102核心
  • TU104核心
  • TU106核心

显卡架构变化 显卡架构命名_云计算_16

TU102核心的SM单元

每个SM单元有4个处理块,每个处理块中:

  • 1 个 Warp Scheduler,1 个 Dispath Unit
  • 16 个 INT32 Core
  • 16 个 FP32 Core
  • 2 个 Tensor Core
  • 4 个 LD/ST Unit
  • 4 个 SFU

这一代架构去掉了对FP64的支持。

九、Ampere架构

显卡架构变化 显卡架构命名_CUDA_17

Ampere架构的GA102核心

显卡架构变化 显卡架构命名_显卡架构变化_18

GA102核心的SM单元

每个SM单元分成4个处理块,每个处理块中:

  • 1 个 Warp Scheduler,1 个 Dispatch Unit
  • 8 个 FP64 Core
  • 16 个 FP32 Core
  • 16 个 INT32 Core
  • 1 个 Tensor Core
  • 8 个 LD/ST Unit
  • 4 个 SFU

这一代架构又把FP64 Core加回来了,同时也是自Volta架构以来的,NVIDIA第三代Tensor技术,保持一代架构更新一次Tensor。

显卡架构变化 显卡架构命名_浮点_19

十、Hopper架构

NVIDIA Hopper架构的H100芯片采用台积电4nm工艺(N4是台积电N5工艺的优化版),核心面积为814平方毫米,比A100小14平方毫米。虽然核心面积比A100小14平方毫米,但得益于4nm工艺,晶体管密度数量从542亿提升到800亿。

显卡架构变化 显卡架构命名_CUDA_20

  从核心设计图来看,NVIDIA Hopper架构与苹果UltraFusion相似,但它在本质上还是单独的一颗晶片,而不是苹果M1 Ultra那种将两块芯片桥接起来。顶层拓扑与Ampere架构差别不大,整个Hopper架构GPU由8个图形处理集群(Graphics Processing Cluster,GPC)“拼接”组成,但每4个GPC共享25MB得L2缓存。核心两侧则是HBM3显存,拥有5120 Bit的位宽,最高容量可达80GB。

  片上的每个GPC由9个纹理处理集群(Texture Processor Cluster,TPC)组成,由PCIe5或接口进入的计算任务,通过带有多实例GPU(Multi-Instance GPU,MIG)控制的GigaThread引擎分配给各个GPC。GPC通过L2缓存共享中间数据,GPC计算的中间数据通过NVLink与其他GPU互通。每个TPC由2个流式多处理器(Streaming Multiprocessor)组成。

显卡架构变化 显卡架构命名_CUDA_21

  Hopper架构的性能提升和主要变化体现在新型线程块集群技术和新一代的流式多处理器。NVIDIA在Hopper中引入了新的线程块集群机制,可实现跨单元进行协同计算。H100中的线程块集群可在同一GPC内的大量并发运行,对较大的模型具有更好的加速能力。

显卡架构变化 显卡架构命名_显卡架构变化_22

  每个包括128个FP32 CUDA核心、4个第4代张量核心(Tensor Core)。每个单元的指令首先存入L1指令缓存(L1 Instruction Cache),再分发到L0指令缓存(L1 Instruction Cache)。与L0缓存配套的线程束排序器(Wrap Scheduler,线程束)和调度单元(Dispatch Unit)为CUDA核心和张量核心分配计算任务。通过使用4个特殊函数单元(Special Function Unit,SFU)单元,进行超越函数和插值函数计算。

  NVIDIA在Hopper架构中引入新一代流式多处理器的FP8张量核心(Tensor Core),用来加速AI训练和推理。FP8张量核心支持FP32和FP16累加器以及两种FP8 输入类型(E4M3和E5M2)。与FP16或BF16相比,FP8将数据存储要求减半,吞吐量翻倍。在Transformer引擎的分析中,还会看到使用FP8可自适应地提升Transformer的计算速度。

  在GPU中,张量核心AI加速的关键模块,也是Ampere及之后GPU架构与早期GPU的重要区别。张量核心是用于矩阵乘法和矩阵累加 (Matrix Multiply-Accumulate,MMA) 数学运算的专用高性能计算核心,可为AI和HPC应用程序提供突破性的性能加速。

显卡架构变化 显卡架构命名_CUDA_23

  Hopper的张量核心支持FP8、FP16、BF16、TF32、FP64和INT8 MMA数据类型。这一代张量核心的关键点是引入Transformer引擎。Transformer算子是主流的BERT到GPT-3等NLP模型的基础,越来越多地应用于计算机视觉、蛋白质结构预测等不同领域。

显卡架构变化 显卡架构命名_CUDA_24

  与上一代A100相比,新的Transformer引擎与Hopper FP8张量核心相结合,在大型NLP模型上提供高达9倍的AI训练速度和30倍的AI推理速度。为了提升Transformer的计算效率,新Transformer引擎使用混合精度,在计算过程中智能地管理计算精度,在Transformer计算的每一层,根据下一层神经网络层及所需的精度,在FP8和其他浮点格式中进行动态格式转换,充分运用张量核心的算力。

显卡架构变化 显卡架构命名_CUDA_25

  Hopper架构中新增加张量存储加速器 (Tensor Memory Accelerator,TMA) ,以提高张量核心与全局存储和共享存储的数据交换效率。新的TMA使用张量维度和块坐标指定数据传输,而不是简单的按数据地址直接寻址。TMA通过支持不同的张量布局(1D-5D张量)、不同的存储访问模式、显著降低寻址开销并提高了效率。

显卡架构变化 显卡架构命名_CUDA_26

  TMA操作是异步的,多个线程可以共享数据通道,排序完成数据传输。TMA的关键优势是可以在进行数据复制的时候,释放线程的算力来执行其他工作。例如,在A100由线程本身负责生成所有地址执行所有数据复制操作;但Hopper中得TMA来负责生成地址序列(这个思路类似DMA控制器),接管数据复制任务,让线程去做其他事。

  与Ampere A100线相比,基于Hopper架构的H100计算性能提高大约6倍。性能大幅提升的核心原因是NVIDIA引入FP8张量核心和针对NLP任务的Transformer引擎,加上TMA技术减少单元在数据复制时的无用功。