本文来自微信公众号“半导体行业观察”,作者/作者Nick Evanson。
三十年前,CPU和其他专用处理器几乎处理所有计算任务。那个时代的显卡有助于加快Windows和应用程序中2D形状的绘制速度,但绝对没有其他作用。快进到今天,GPU现已成为整个行业最具主导地位的芯片之一。
具有讽刺意味的是,图形芯片硬件的唯一功能的日子已经一去不复返了,图形高性能计算和机器学习在很大程度上依赖于不起眼的GPU的处理能力。与我们一起探索这款单芯片如何从一个不起眼的像素推动器演变成一个强大的浮点计算引擎。
01
一开始CPU统治一切
让我们首先回到20世纪90年代末。高性能计算领域,无论是使用超级计算机进行科学研究、标准服务器上的数据处理,还是工作站上的工程和设计任务,都完全依赖于两种类型的CPU:为单一目的而构建的专用处理器或现成的处理器,AMD、IBM或Intel的货架芯片。
以ASCI RED为例。1997年,它是最强大的超级计算机之一,由9,632个Intel Pentium II Overdrive CPU组成(下图)。每个单元的运行频率为333 MHz,该系统的理论峰值计算性能略高于3.2 TFLOPS(每秒万亿次浮点运算)。
由于我们将在本文中经常提到这个指标,因此值得花点时间来解释它的含义。在计算机科学中,浮点数(或简称浮点数)是表示非整数值的数据值,例如6.2815或0.0044。整数值(称为整数)经常用于控制计算机及其上运行的任何软件所需的计算。
浮点数对于精度至关重要的情况至关重要-特别是与科学或工程相关的任何事情。即使是简单的计算,例如确定圆的周长,也至少涉及一个浮点值。
几十年来,CPU一直拥有单独的电路来对整数和浮点数执行逻辑运算。在上述Pentium II Overdrive的情况下,它可以在每个时钟周期执行一次基本浮点运算(乘法或加法)。理论上,这就是为什么ASCI Red的峰值浮点性能为9,632个CPU x 3.33亿个时钟周期x 1次操作/周期=3,207,456百万次FLOPS。
这些数字是基于理想条件(例如,对易于放入高速缓存的数据使用最简单的指令)预测的,并且在现实生活中很少实现。然而,它们可以很好地表明系统的功率。
其他超级计算机也拥有类似数量的标准处理器——劳伦斯利弗莫尔国家实验室的Blue Pacific使用了5808个IBM PowerPC 604e芯片,洛斯阿拉莫斯国家实验室的Blue Mountain(上图)则使用了6144个MIPS Technologies R1000。
为了达到万亿次浮点运算级别的处理能力,需要数千个CPU,所有这些都需要大量RAM和硬盘存储的支持。过去是这样,现在仍然是,这一切归因于机器的数学要求。当我们在学校第一次接触物理、化学和其他学科的方程时,一切都是一维的。换句话说,我们使用一个数字来表示距离、速度、质量、时间等。
然而,为了准确地建模和模拟现象,需要更多的维度,并且数学上升到向量、矩阵和张量的领域。它们在数学中被视为单个实体,但包含多个值,这意味着任何进行计算的计算机都需要同时处理大量数字。鉴于当时的CPU每个周期只能处理一到两个浮点数,因此需要数千个浮点数。
02
SIMD加入竞争:MMX、3DNow!和SSE
1997年,英特尔使用一种名为MMX的技术更新了其最初的奔腾系列CPU,这是一组利用内核内八个附加寄存器的指令。每个都被设计为存储一到四个整数值。该系统允许处理器同时执行跨多个数字的一条指令,这种方法更被称为SIMD(单指令、多数据)。
一年后,AMD推出了自己的版本,称为3DNow!。它的性能尤其优越,因为寄存器可以存储浮点值。又过了一年,英特尔才在MMX中解决这个问题,并在其Pentium III芯片中引入了SSE(流SIMD扩展)。
首次出现在AMD K6-2 CPU中的3D Now
随着日历进入新千年,高性能计算机的设计者可以使用能够有效处理矢量数学的标准处理器。一旦扩展到数千个,这些处理器就可以同样出色地管理矩阵和张量。尽管取得了这一进步,超级计算机世界仍然青睐旧的或专用的芯片,因为这些新的扩展并不是专门为此类任务而设计的。
对于另一种快速普及的处理器(GPU)来说也是如此,它比AMD或英特尔的任何CPU都更擅长SIMD工作。
在图形处理器的早期,CPU处理组成场景的三角形的计算(因此AMD为其SIMD技术使用这个名称)。然而,像素的着色和纹理完全由GPU处理,并且这项工作的许多方面都涉及矢量数学。
20多年前最好的消费级显卡,例如3dfx的Voodoo5 5500和Nvidia的GeForce 2 Ultra,都是出色的SIMD设备。然而,它们的创建目的是为游戏生成3D图形,而不是其他任何东西。即使是专业市场的显卡也只专注于渲染。
ATI售价2,000美元的ATI FireGL 3配备了两个IBM芯片(一个GT1000几何引擎和一个RC1000光栅器)、一个巨大的128 MB DDR-SDRAM以及据称30 GFLOPS的处理能力。但这一切都是为了使用OpenGL渲染API加速3D Studio Max和AutoCAD等程序中的图形。
那个时代的GPU无法用于其他用途,因为转换3D对象并将其转换为监视器图像的过程并不涉及大量的浮点数学。事实上,其中很大一部分是在整数级别,并且图形卡需要几年的时间才能开始在整个管道中大量使用浮点值。
第一个是ATI的R300处理器,它有8个独立的像素管道,以24位浮点精度处理所有数学运算。不幸的是,除了图形之外,没有其他方法可以利用这种能力——硬件和相关软件完全以图像为中心。
计算机工程师并没有忘记GPU拥有大量SIMD功能,但缺乏将其应用到其他领域的方法这一事实。令人惊讶的是,这是一个游戏机,展示了如何解决这个棘手的问题。
03
统一的新时代
2005年11月,微软的Xbox 360上市,其CPU由IBM基于其标准PowerPC架构设计和制造,GPU由ATI设计、TMSC制造。这款代号为Xenos的图形芯片很特别,因为它的布局完全避开了单独的顶点和像素管道的经典方法。
取而代之的是一个三路SIMD阵列集群。具体来说,每个集群由16个向量处理器组成,每个向量处理器包含5个数学单元。这种布局使每个阵列能够在每个周期对80个浮点数据值同时执行来自线程的两条顺序指令。
这被称为统一着色器架构,每个阵列可以处理任何类型的着色器。尽管Xenos使芯片的其他方面变得更加复杂,但它引发了一种至今仍在使用的设计范例。
在时钟速度为500 MHz的情况下,整个集群理论上可以为乘法加法命令的三个线程实现240 GFLOPS(500 x 16 x 80 x 2)的处理速率。这个数字有一定的规模感,作为对比,十年前的一些世界顶级超级计算机甚至无法匹敌这个速度。
例如,桑迪亚国家实验室的aragon XP/S140配备3,680个Intel i860 CPU,峰值速度为184 GFLOPS。到1995年,这台机器已经有几年历史了,芯片开发的速度很快就超过了它,但GPU也是如此。
CPU多年来一直在整合自己的SIMD阵列,例如,英特尔最初的Pentium MMX有一个专用单元,用于在向量上执行指令,最多包含8个8位整数。当Xenos在世界各地的家庭中使用时,此类装置的尺寸至少增加了一倍,但与Xenos相比,它们仍然很小。
消费级显卡开始采用具有统一着色器架构的GPU时,它们已经拥有比Xbox 360的图形芯片明显更高的处理速率。2006年GeForce 8800 GTX中使用的Nvidia G80(上图)的理论峰值为346 GLFOPS,而2007年Radeon HD 2900 XT中使用的ATI R600则拥有476 GLFOPS。
两家制造商很快就在其专业模型中利用了这种计算能力。虽然价格过高,但ATI的FireGL V8650和Nvidia的Tesla C870非常适合高端科学计算机。然而,在最高级别上,全球超级计算机仍然仅依赖标准CPU。事实上,几年后GPU才开始出现在最强大的系统中。
那么,当它们明显提供了巨大的处理速度时,为什么不立即使用它们呢?
首先,超级计算机和类似系统的设计、建造和操作都极其昂贵。多年来,它们都是围绕大量CPU阵列构建的,因此集成另一个处理器并不是一朝一夕的事。此类系统在增加芯片数量之前需要进行彻底的规划和初始小规模测试。
其次,让所有这些组件协调运行,尤其是软件方面,绝非易事,这也是当时GPU的一个重大弱点。虽然它们已经变得高度可编程,但以前可供它们使用的软件相当有限。
Microsoft的HLSL(高级着色器语言)、Nvidia的Cg库和OpenGL的GLSL使访问图形芯片的处理能力变得简单,尽管纯粹是为了渲染。
统一着色器架构GPU改变了这一切。2006年,ATI(当时是AMD的子公司)和Nvidia发布了软件工具包,旨在将这种能力不仅仅用于图形,其API分别称为CTM(Close To Metal)和CUDA(Compute Unified Device Architecture)。
然而,科学和数据处理社区真正需要的是一个全面的软件包,它将大量的CPU和GPU(通常称为异构平台)视为由众多计算设备组成的单个实体。
2009年,他们的需求得到了满足。OpenCL最初由Apple开发,由Khronos Group(几年前吸收了OpenGL)发布,成为在日常图形之外使用GPU的事实上的软件平台,或者该领域当时被称为GPGPU(通用GPU上的计算,Mark Harris创造的术语)。
04
GPU进入计算竞赛
与广阔的技术评论世界不同,全球范围内并没有数百名评论者测试超级计算机的性能主张。然而,德国曼海姆大学于20世纪90年代初启动的一个正在进行的项目正是致力于实现这一目标。该组织被称为“TOP500”,每年两次发布全球最强大的10台超级计算机排行榜。
第一个夸耀GPU的条目出现在2010年,中国有两个系统——星云和天河一号。他们分别使用Nvidia的Tesla C2050(本质上是GeForce GTX 470,如下)和AMD的Radeon HD 4870卡,前者的理论峰值为2,984 TFLOPS。
在高端GPGPU的早期阶段,Nvidia是为计算巨头配备的首选供应商,不是因为性能(AMD的Radeon卡通常提供更高程度的处理性能),而是因为软件支持。CUDA经历了快速发展,几年后AMD才找到合适的替代方案,鼓励用户改用OpenCL。
然而,英伟达并没有完全主导市场,英特尔的至强融核处理器试图占据一席之地。这些大型芯片源自一个名为Larrabee的已中止的GPU项目,是一种特殊的CPU-GPU混合体,由多个类似奔腾的核心(CPU部分)与大型浮点单元(GPU部分)配对组成。
对Tesla C2050内部结构的检查揭示了14个称为流式多处理器(SM)的块,由缓存和中央控制器划分。每一个都包含32组两个逻辑电路(Nvidia将其标记为CUDA核心),用于执行所有数学运算-一组用于整数值,另一组用于浮点数。在后一种情况下,内核可以在每个时钟周期以单(32位)精度管理一次FMA(融合乘加)操作;双精度(64位)运算至少需要两个时钟周期。
Xeon Phi芯片(下图)中的浮点单元看起来有些相似,只是每个内核处理的数据值只有C2050中SM的一半。尽管如此,由于与Tesla的14个重复核心相比,有32个重复核心,单个Xeon Phi处理器总体上每个时钟周期可以处理更多的值。然而,英特尔首次发布的该芯片更多的是原型机,无法充分发挥其潜力——英伟达的产品运行速度更快,功耗更低,并被证明是一款卓越的产品。
这将成为AMD、英特尔和Nvidia之间三路GPGPU之争中反复出现的主题。一种型号可能拥有数量较多的处理核心,而另一种型号可能具有更快的时钟速度或更强大的缓存系统。
CPU对于所有类型的计算仍然至关重要,许多超级计算机和高端计算系统仍然由AMD或英特尔处理器组成。虽然单个CPU无法与普通GPU的SIMD性能竞争,但当数千个CPU连接在一起时,它们就证明足够了。然而,此类系统缺乏功效。
例如,在天河一号使用Radeon HD 4870卡的同时,AMD最大的服务器CPU(12核Opteron 6176 SE)也开始流行。对于140 W左右的功耗,CPU理论上可以达到220 GFLOPS,而上述GPU的峰值性能可达到1,200 GFLOPS,仅多出10 W,而且成本仅为其一小部分。
05
不再“只是”显卡
到了2013年,不仅仅是世界上的超级计算机在集体利用GPU的能力进行并行计算。Nvidia正在积极推广其GRID平台,这是一种用于科学和其他应用的GPU虚拟化服务。最初是作为托管基于云的游戏的系统而推出的,对大规模、经济实惠的GPGPU不断增长的需求使得这一转变不可避免。在其年度技术会议上,GRID被认为是各领域工程师的重要工具。
在同一事件中,GPU公司展示了代号为Volta的未来架构。然而,公布的细节很少,普遍的假设是这将是另一款服务于Nvidia所有市场的芯片。
与此同时,AMD也在做类似的事情,在其专注于游戏的Radeon系列以及FirePro和Radeon Sky服务器卡中利用定期更新的Graphics Core Next(GCN)设计。那时,性能数据已经令人震惊——FirePro W9100的峰值FP32(32位浮点)吞吐量为5.2 TFLOPS,这个数字对于不到二十年前的超级计算机来说是不可想象的。
当然,GPU仍然主要是为3D图形而设计的,但渲染技术的进步意味着这些芯片必须越来越擅长处理一般计算工作负载。唯一的问题是它们执行高精度浮点数学(即FP64或更高)的能力有限。纵观2015年顶级超级计算机,与完全基于CPU的超级计算机相比,使用GPU(英特尔的Xeon Phi或Nvidia的Tesla)的数量相对较少。
当Nvidia在2016年推出Pascal架构时,一切都发生了变化。这是该公司首次尝试专门为高性能计算市场设计GPU,其他GPU则用于多个领域。前者只生产过一款(GP100),并且只产生了5种产品,但之前所有架构都只配备少数FP64内核,而这款芯片却容纳了近2,000个内核。
Tesla P100提供超过9 TFLOPS的FP32处理能力以及FP64处理能力的一半,其功能非常强大。AMD的Radeon Pro W9100使用其Vega 10芯片,在FP32中速度快了30%,但在FP64中慢了800%。此时,英特尔因销售不佳而濒临停产Xeon Phi系列。
一年后,Nvidia终于发布了Volta,这表明该公司不仅仅对将其GPU引入HPC和数据处理市场感兴趣,它还瞄准了另一个市场。
06
神经元、网络
深度学习是统称为机器学习的更广泛学科中的一个领域,机器学习本身是人工智能的一个子集。它涉及使用称为神经网络的复杂数学模型,从给定数据中提取信息,例如确定所呈现的图像描绘特定动物的概率。为此,模型需要进行“训练”——在本例中,显示了数百万张该动物的图像,以及数百万张不显示该动物的图像。
所涉及的数学植根于矩阵和张量计算。几十年来,此类工作负载只适合基于CPU的大型超级计算机。然而,早在2000年代,GPU就显然非常适合此类任务。
尽管如此,英伟达还是押注于深度学习市场的大幅扩张,并在其Volta架构中添加了额外的功能,使其在该领域脱颖而出。这些是作为张量核心销售的FP16逻辑单元组,作为一个大型阵列一起运行,但功能非常有限。
事实上,它们只执行一项功能——将两个FP16 4x4矩阵相乘,然后将另一个FP16或FP32 4x4矩阵与该结果相加(这一过程称为GEMM运算)。Nvidia之前的GPU以及竞争对手的GPU也可以执行此类计算,但速度远不及Volta。GV100是唯一使用该架构制造的GPU,总共包含512个张量核心,每个核心能够在每个时钟周期执行64个GEMM。
根据数据集中矩阵的大小以及所使用的浮点大小,Tesla V100卡在这些张量计算中理论上可以达到125 TFLOPS。Volta显然是为小众市场设计的,但GP100在超级计算机领域的进军有限,而新的Tesla型号则迅速被采用。
PC游戏爱好者会知道,Nvidia随后在随后的图灵架构中将张量核心添加到其通用消费产品中,并开发了一种称为深度学习超级采样(DLSS)的升级技术。最新版本使用GPU中的核心在放大图像上运行神经网络,纠正帧中的任何伪影。
在短时间内,Nvidia独占了GPU加速的深度学习市场,其数据中心部门的收入大幅增长——2017财年增长率为145%,2018财年增长率为133%,2019财年增长率为52%。截至2019财年末,HPC、深度学习等领域的销售额总计29亿美元。
然而,只要有钱,竞争就不可避免。2018年,谷歌开始通过云服务提供对其内部开发的张量处理芯片的访问。亚马逊很快也紧随其后,推出了专用CPU AWS Graviton。与此同时,AMD正在重组其GPU部门,形成两条不同的产品线:一条主要用于游戏(RDNA),另一条专门用于计算(CDNA)。
虽然RDNA与其前身明显不同,但CDNA在很大程度上是GCN的自然演变,尽管规模扩大到了一个巨大的水平。看看当今用于超级计算机、数据服务器和人工智能机器的GPU,一切都非常巨大。
AMD的CDNA 2驱动的MI250X拥有220个计算单元,提供略低于48 TFLOPS的双精度FP64吞吐量和128 GB的高带宽内存(HBM2e),这两个方面在HPC应用中都备受追捧。Nvidia的GH100芯片采用Hopper架构和576个Tensor Core,有可能达到4000 TOPS,在AI矩阵计算中采用低精度INT8数字格式。
英特尔的Ponte Vecchio GPU同样庞大,拥有1000亿个晶体管,AMD即将推出的MI300拥有460亿个晶体管,包括多个CPU、显卡和内存小芯片。
然而,它们共有的一件事是它们绝对不是GPU:它们不是GPU。早在英伟达将该术语用作营销工具之前,该缩写词就代表图形处理单元。AMD的MI250X没有任何渲染输出单元(ROP),甚至GH100也只拥有类似于GeForce GTX 1050的Direct3D性能,使得GPU中的“G”变得无关紧要。
那么,我们可以称呼它们什么呢?“GPGPU”并不理想,因为它是一个笨拙的短语,指的是在通用计算中使用GPU,而不是设备本身。“HPCU”(高性能计算单元)也好不了多少。但也许这并不重要。毕竟,“CPU”一词非常广泛,涵盖了各种不同的处理器和用途。
07
GPU接下来要征服什么?
AMD、英特尔、Nvidia和其他数十家公司在GPU研发上投入了数十亿美元,当今的图形处理器不会很快被任何截然不同的产品所取代。对于渲染,最新的API和使用它们的软件包(例如游戏引擎和CAD应用程序)通常与运行代码的硬件无关,因此从理论上讲,它们可以适应全新的东西。
然而,GPU中专门用于图形的组件相对较少-三角形设置引擎和ROP是最明显的组件,并且最近版本中的光线追踪单元也高度专业化。然而,其余部分本质上是大规模并行SIMD芯片,由强大而复杂的内存/缓存系统支持。
基本设计与以往一样好,未来的任何改进都与半导体制造技术的进步紧密相关。换句话说,它们只能通过容纳更多逻辑单元、以更高的时钟速度运行或两者的组合来改进。
当然,它们可以合并新功能,使其能够在更广泛的场景中发挥作用。在GPU的历史上,这种情况已经发生过好几次,不过向统一着色器架构的过渡尤为重要。虽然最好有专用硬件来处理张量或光线追踪计算,但现代GPU的核心能够管理这一切,尽管速度较慢。
这就是为什么MI250和GH100等产品与台式电脑的同类产品非常相似,未来用于HPC和AI的设计很可能会遵循这一趋势。那么,如果芯片本身不会发生重大变化,那么它们的应用又如何呢?
鉴于与AI相关的任何事物本质上都是计算的一个分支,因此只要需要执行大量SIMD计算,就可能会使用GPU。虽然科学和工程领域没有多少领域尚未使用此类处理器,但我们可能会看到GPU衍生产品的使用激增。
谷歌的Coral加速器板配有两个edgeTPU芯片
目前人们可以购买配备微型芯片的手机,其唯一功能是加速张量计算。随着ChatGPT等工具的功能和普及度不断增强,我们将看到更多配备此类硬件的设备。
不起眼的GPU已经从仅仅比CPU更快地运行游戏的设备发展成为通用加速器,为全球的工作站、服务器和超级计算机提供动力。全球数百万人每天都在使用它——不仅在我们的计算机、电话、电视和流媒体设备中,而且在我们使用包含语音和图像识别或提供音乐和视频推荐的服务时也是如此。
GPU真正的下一步可能是一个未知的领域,但有一点是肯定的,图形处理单元将在未来几十年内继续成为计算和人工智能的主要工具。(作者:Nick Evanson半导体行业观察)