NVIDIA GPU 架构梳理_显卡架构有哪些-程序员宅基地

技术标签: 云计算  

文中图片大部分来自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)。

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 架构的配置

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 线程调度器。

Fermi图形渲染架构


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

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):

CUDA 内核

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

四、Kepler架构

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

在每个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单元:

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架构

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 单元。

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架构

Volta架构的GV100核心

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架构

Turing架构的TU102核心

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

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

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架构

Ampere架构的GA102核心

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。

十、Hopper架构

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

  从核心设计图来看,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)组成。

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

  每个包括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应用程序提供突破性的性能加速。

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

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

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

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

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tony_vip/article/details/123604308

智能推荐

雪球产品定价-蒙特卡罗模拟法_小雪球 估值 python-程序员宅基地

文章浏览阅读3.4k次。蒙特卡洛模拟法实现雪球产品定价_小雪球 估值 python

在VC中WININET使用HTTP的POSTA和GET方法_wincc post-程序员宅基地

文章浏览阅读1.1k次。原文:http://blog.csdn.net/zeng622peng/article/details/5969059Post资料:SUMMARYTo properly simulate a Form submission using WinInet, you need to send a header that indicates the proper Content_wincc post

Windows中启动rabbitmq主机名报错_mq启动的时候为什么事主机名sc-201809171409-程序员宅基地

文章浏览阅读1.2k次。记录一个被自己坑死的问题,,计算机名。。哥哥们千万不要命名为中文,,,会把自己坑死的,还不知道咋死的。今天在Windows安装rabbitMQ的时候,好像一切正常的样子。启动的时候,一直启动不了。emmm,报错:ERROR: epmd error for host neighbours:: nxdomain (non-existing domain)第一眼一看,这不是主机名有问题嘛,然后马上..._mq启动的时候为什么事主机名sc-201809171409

error LNK2019:无法解析的外部符号 ,该符号在函数**中被引用的解决方法(C++)_error lnk2019: 无法解析的外部符号 _openssl_init_crypto,该符号在-程序员宅基地

文章浏览阅读2.2k次。1>LiveWireView.obj : error LNK2019: 无法解析的外部符号 “public: __thiscall memBitmap::memBitmap(void)” (??0memBitmap@@QAE@XZ),该符号在函数 "public: virtual void __thiscall CLiveWireView::Dump(class CDumpContext &..._error lnk2019: 无法解析的外部符号 _openssl_init_crypto,该符号在函数 _gm3000_

反编译.class字节码文件的步骤_反编译字节码 **/*.class-程序员宅基地

文章浏览阅读792次。介绍三种反编译方式文章目录反编译存在于磁盘中的java文件一、使用javac命令二、使用反编译工具 jd-gui 对字节码文件进行反编译使用阿里开源 Arthas 工具对运行中的类进行反编译一、下载对应的工具二、解压Arthas的jar包三、选择需要反编译的类四、运行结果五、使用jad命令反编译六、成功反编译反编译 CGLIB动态代理 生成的字节码文件一、获取代理类的main方法的第一行输入如下代码进行执行二、发现生成了对应的三个字节码文件三、使用反编译工具 jd-gui 对字节码文件进行反编译反编译存_反编译字节码 **/*.class

使用DISM修复Windows更新错误_0x800736cc-程序员宅基地

文章浏览阅读2.5w次,点赞7次,收藏36次。在server 2012系统上安装IIS时报了一个错误,错误代码为0x800736cc,查了一下官方社区发现这个问题是系统被一些优化工具优化时或者一些其他操作造成了系统文件损坏,造成系统不能安装更新(安装IIS也是一个系统安装更新的过程),解决方法如下:1、如果系统可以联网管理员打开命令提示符,运行以下命令,扫描当前系统被损坏或修改的组件,一般扫描完毕就会列出当前系统那些组件损坏或者被修改了..._0x800736cc

随便推点

Android调用getSimSerialNumber获取iccid不完整(RK3288 7.1.2)-程序员宅基地

文章浏览阅读3k次。在Android中我们可以通过下面这段代码获取SIM的iccid,关于手机中常用术语简介可参考《Android中CS域和PS域以及手机中常用术语简介》 TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); String simSerialNumber = telephonyManager.getSimSerialNumber();_getsimserialnumber

二维离散傅里叶变换与逆变换的原理与实现(Matlab)_二维傅里叶逆变换需要正负频吗-程序员宅基地

文章浏览阅读2w次,点赞39次,收藏181次。前言在野外数据采集中,虽然单个仪器采集的是一维信号,但是当把多台仪器数据汇总并生成做二维剖面的图像时,噪声可不只有一维的,更有x,y两个方差同时存在的"二维噪声"!我们已经知道一维噪声可以用一维傅里叶变换到频域滤波,同理二维噪声也可以用二维傅里叶变换到"频率滤波"。二维傅里叶正变换的原理笔者很讨厌一上来就看到一连串复杂的公式!因此当我看懂一个原理后,我就会用最好理解的方式来重述它,毕竟我更偏..._二维傅里叶逆变换需要正负频吗

Java中SimpleDateFormat用法详解-程序员宅基地

文章浏览阅读3.2k次。Java中怎么才能把日期转换成想要的格式呢,或把字符串转换成一定格式的日期,如把数据库中的日期或时间转换成自己想要的格式,JAVA中提供了SimpleDateFormat类可以实现,以下是SimpleDateFormat的用法及实例:java.text类 SimpleDateFormatjava.lang.Object java.text.Format java_java中simpledateformat

打印网页局部内容的方法-程序员宅基地

文章浏览阅读75次。如果不在乎排版,可以直接使用jqprint这个插件如果对打印出来的文件有排版上面的要求,可以先将需要打印的区域转换成图片,然后打印这个图片,或者直接下载当前图片使用html2canvas这个插件,先将目标区域利用toDataURL方法转换成URL编码的方式。接着将URL给a标签的href属性赋值,模拟点击a标签的操作就可以下载当前图片了。html2canvas($("#qr-d..._网页只打印部分内容 csdn

Unity3D A 星寻路(A*) C# 版本_unity a星算法只能运用在3d-程序员宅基地

文章浏览阅读1.1k次。这个算法很不错了 200 * 200 个格子,最多就十毫秒_unity a星算法只能运用在3d

十种技术保证在程序之路上不会被out (2005年)-程序员宅基地

文章浏览阅读1.2k次。一、XML   在十种技术中,最重要的一种技术我想应该非XML莫属。这里不仅仅指XML规范本身,还包括一系列有关的基于XML的语言:主要有XHTML,XSLT,XSL,DTDs,XML Schema(XSD),XPath,XQuery和SOAP.如果你现在还对XML一无所

推荐文章

热门文章

相关标签