走过30年 GPU是如何在一统天下的?

站长云网 2024-03-08 站长云网

三十年前,CPU和其他专用处理器几乎处理所有计算任务。那个时代的显卡有助于加快Windows和应用程序中2D形状的绘制速度,但没有其他用途。快进到今天,GPU已经成为业界最具主导地位的芯片之一。

但具有讽刺意味的是,图形芯片的唯一功能是图形的日子已经一去不复返了,机器学习和高性能计算严重依赖于不起眼的GPU的处理能力。与我们一起探索这款单芯片如何从一个不起眼的像素推动器演变成一个强大的浮点计算引擎。


一开始,CPU统治一切

让我们回到20世纪90年代末。高性能计算领域,包括超级计算机的科学工作、标准服务器上的数据处理以及工作站上的工程和设计任务,完全依赖于两种类型的CPU:1)专为单一目的而设计的专用处理器,2)来自AMD、IBM或Intel的现成芯片。

ASCIRed超级计算机是1997年左右最强大的超级计算机之一,由9,632个IntelPentiumIIOverdriveCPU组成(如下图所示)。每个单元的运行频率为333MHz,该系统的理论峰值计算性能略高于3.2TFLOPS(每秒万亿次浮点运算)。


由于我们将在本文中经常提到TFLOPS,因此值得花点时间来解释它的含义。在计算机科学中,浮点数(或简称floats)是表示非整数值的数据值,例如6.2815或0.0044。整数值(称为整数)经常用于控制计算机及其上运行的任何软件所需的计算。

浮点数对于精度至关重要的情况至关重要,特别是与科学或工程相关的任何事情。即使是简单的计算,例如确定圆的周长,也至少涉及一个浮点值。

几十年来,CPU一直拥有单独的电路来对整数和浮点数执行逻辑运算。在上述PentiumIIOverdrive的情况下,它可以在每个时钟周期执行一次基本浮点运算(乘法或加法)。理论上,这就是为什么ASCIRed的峰值浮点性能为9,632个CPUx3.33亿个时钟周期x1次操作/周期=3,207,456百万次FLOPS。

这些数字基于理想条件(例如,对适合缓存的数据使用最简单的指令),并且在现实生活中很少可以实现。然而,它们很好地表明了系统的潜在能力。


其他超级计算机也拥有类似数量的标准处理器——劳伦斯利弗莫尔国家实验室的BluePacific使用5808个IBMPowerPC604e芯片,洛斯阿拉莫斯国家实验室的BlueMountain(上图)则使用6144个MIPSTechnologiesR1000。

为了达到万亿次浮点运算级别的处理能力,需要数千个CPU,所有这些都需要大量RAM和硬盘存储的支持。这过去是,现在仍然是,由于机器的数学要求。

当我们在学校第一次接触物理、化学和其他学科的方程时,一切都是一维的。换句话说,我们使用一个数字来表示距离、速度、质量、时间等。然而,为了准确地建模和模拟现象,需要更多的维度,并且数学上升到向量、矩阵和张量的领域。

它们在数学中被视为单个实体,但包含多个值,这意味着任何进行计算的计算机都需要同时处理大量数字。鉴于当时的CPU每个周期只能处理一到两个浮点数,因此需要数千个浮点数。

SIMD加入竞争:

MMX、3DNow!和SSE

1997年,Intel通过名为MMX的技术扩展更新了PentiumCPU系列,这是一组利用内核内部八个附加寄存器的指令。每个都被设计为存储一到四个整数值。该系统允许处理器同时执行跨多个数字的一条指令,这种方法被称为SIMD(SingleInstruction,MultipleData)。

一年后,AMD推出了自己的版本,名为3DNow!。它的性能尤其优越,因为寄存器可以存储浮点值。又过了一年,英特尔才在MMX中解决这个问题,并在PentiumIII中引入了SSE(StreamingSIMDExtensions)。


随着日历进入新千年,高性能计算机的设计者可以使用能够有效处理矢量数学的标准处理器。

一旦扩展到数千个,这些处理器就可以同样出色地管理矩阵和张量。尽管取得了这一进步,超级计算机世界仍然青睐旧的或专用的芯片,因为这些新的扩展并不是专门为此类任务而设计的。对于另一种快速普及的处理器来说,GPU也是如此,它比AMD或Intel的任何CPU都更擅长SIMD工作。

在图形处理器的早期,CPU处理构成场景的三角形的计算(因此AMD用于执行SIMD的名称为3DNow!)。然而,像素的着色和纹理完全由GPU处理,并且这项工作的许多方面都涉及矢量数学。

20多年前最好的消费级显卡,例如3dfxVoodoo55500和NVIDIAGeForce2Ultra,都是出色的SIMD设备。然而,它们的创建目的是为游戏生成3D图形,而不是其他任何东西。即使是专业市场的显卡也只专注于渲染。


ATI售价2,000美元的ATIFireGL3配备了两个IBM芯片(一个GT1000几何引擎和一个RC1000光栅器)、一个巨大的128MBDDR-SDRAM以及据称30GFLOPS的处理能力。但这一切都是为了使用OpenGL渲染API加速3DStudioMax和AutoCAD等程序中的图形。

那个时代的GPU无法用于其他用途,因为转换3D对象并将其转换为监视器图像的过程并不涉及大量的浮点数学。事实上,其中很大一部分是在整数级别,并且图形卡需要几年的时间才开始在整个管道中大量使用浮点值。

第一个是ATI的R300处理器,它有8个独立的像素管道,以24位浮点精度处理所有数学运算。不幸的是,除了图形之外,没有其他方法可以利用这种能力——硬件和相关软件完全以图像为中心。

计算机工程师并没有忘记GPU拥有大量SIMD功能,但缺乏将其应用到其他领域的方法这一事实。令人惊讶的是,这是一个游戏机,展示了如何解决这个棘手的问题。

统一的新时代

微软的Xbox360于2005年11月上市,其CPU由IBM设计和制造,基于PowerPC架构,GPU由ATI设计、台积电制造。

这款代号为Xenos的图形芯片很特别,因为它的布局完全避开了单独的顶点和像素管道的经典方法。


取而代之的是一个三路SIMD阵列集群。具体来说,每个集群由16个向量处理器组成,每个向量处理器包含5个数学单元。这种布局使每个阵列能够在每个周期对80个浮点数据值同时执行来自线程的两条顺序指令。

被称为统一着色器架构(unifiedshaderarchitecture),每个阵列可以处理任何类型的着色器。尽管Xenos使芯片的其他方面变得更加复杂,但它引发了一种至今仍在使用的设计范例。在时钟速度为500MHz的情况下,整个集群理论上可以为乘法加法命令的三个线程实现240GFLOPS(500x16x80x2)的处理速率。

为了让这个数字有一定的规模感,十年前的一些世界顶级超级计算机无法匹敌这个速度。例如,桑迪亚国家实验室的aragonXP/S140凭借3,680个Inteli860CPU在1994年名列世界超级计算机榜首,峰值速度为184GFLOPS。芯片开发的速度很快就超过了这台机器,但GPU也是如此。

CPU多年来一直在整合自己的SIMD阵列,例如,英特尔最初的PentiumMMX有一个专用单元,用于在向量上执行指令,最多包含8个8位整数。当Xbox的Xenos在全球家庭中使用时,此类设备的尺寸至少增加了一倍,但与Xenos相比,它们仍然很小。


当消费级显卡开始采用具有统一着色器架构的GPU时,它们已经拥有比Xbox360的图形芯片明显更高的处理速率。

GeForce8800GTX(2006)中使用的NVIDIAG80(上图)的理论峰值为346GLFOPS,而RadeonHD2900XT(2007)中的ATIR600则拥有476GLFOPS。

两家图形芯片制造商很快就在其专业模型中利用了这种计算能力。虽然价格过高,但ATIFireGLV8650和NVIDIATeslaC870非常适合高端科学计算机。然而,在最高级别上,全世界的超级计算机仍然依赖标准CPU。事实上,几年后GPU才开始出现在最强大的系统中。

超级计算机和类似系统的设计、建造和操作都极其昂贵。多年来,它们都是围绕大量CPU阵列构建的,因此集成另一个处理器并不是一朝一夕的事。此类系统在增加芯片数量之前需要进行彻底的规划和初始小规模测试。

其次,让所有这些组件协调运行,尤其是软件方面,绝非易事,这也是当时GPU的一个重大弱点。虽然它们已经变得高度可编程,但以前可供它们使用的软件相当有限。

Microsoft的HLSL(HigherLevelShaderLanguage)、NVIDIA的Cg库和OpenGL的GLSL使访问图形芯片的处理能力变得简单,尽管纯粹是为了渲染。

统一着色器架构GPU改变了这一切。


2006年,当时已成为AMD子公司的ATI和NVIDIA发布了软件工具包,旨在将这种能力不仅仅用于图形,其API分别称为CTM(CloseToMetal)和CUDA(ComputeUnifiedDeviceArchitecture)。

然而,科学和数据处理社区真正需要的是一个全面的软件包,它将大量的CPU和GPU(通常称为异构平台)视为由众多计算设备组成的单个实体。

他们的需求在2009年得到满足。OpenCL最初由Apple开发,由KhronosGroup发布,该集团几年前吸收了OpenGL,成为在日常图形之外或当时该领域使用GPU的事实上的软件平台GPGPU指的是GPU上的通用计算,该术语由MarkHarris创造。

GPU进入计算竞赛

与广阔的技术评论世界不同,全球范围内并没有数百名评论者测试超级计算机的性能主张。然而,德国曼海姆大学于20世纪90年代初启动的一个正在进行的项目正是致力于实现这一目标。

该组织被称为“TOP500”,每年两次发布全球最强大的10台超级计算机排行榜。

第一个夸耀GPU的条目出现在2010年,中国有两个系统——Nebulae和Tianhe-1。它们分别依赖于NVIDIA的TeslaC2050(本质上是GeForceGTX470,如下图所示)和AMD的RadeonHD4870芯片,前者的理论峰值为2,984TFLOPS。


在高端GPGPU的早期阶段,NVIDIA是为计算巨头配备的首选供应商,不是因为性能(因为AMD的Radeon卡通常提供更高程度的处理性能),而是因为软件支持。CUDA经历了快速发展,几年后AMD才找到合适的替代方案,鼓励用户改用OpenCL。

然而,英伟达并没有完全主导市场,英特尔的至强融核处理器试图占据一席之地。这些大型芯片源自一个名为Larrabee的已中止的GPU项目,是一种特殊的CPU-GPU混合体,由多个类似奔腾的核心(CPU部分)与大型浮点单元(GPU部分)配对组成。

对NVIDIATeslaC2050内部结构的检查揭示了14个称为流式多处理器(SM)的块,由缓存和中央控制器划分。每一个都包含32组两个逻辑电路(NVIDIA称之为CUDA核心),用于执行所有数学运算——一组用于整数值,另一组用于浮点数。在后一种情况下,内核可以在每个时钟周期以单(32位)精度管理一次FMA(融合乘加)操作;双精度(64位)运算至少需要两个时钟周期。

XeonPhi芯片(如下所示)中的浮点单元看起来有些相似,只是每个内核处理的数据值是C2050中SM的一半。尽管如此,由于与Tesla的14个重复核心相比,有32个重复核心,单个XeonPhi处理器总体上每个时钟周期可以处理更多的值。然而,英特尔首次发布的该芯片更多的是一个原型,并不能完全发挥其潜力——英伟达的产品运行速度更快,功耗更低,并被证明最终是优越的。


这将成为AMD、英特尔和NVIDIA之间三路GPGPU之争中反复出现的主题。一种型号可能拥有数量较多的处理核心,而另一种型号可能具有更快的时钟速度或更强大的缓存系统。

CPU对于所有类型的计算仍然至关重要,许多超级计算机和高端计算系统仍然由AMD或英特尔处理器组成。虽然单个CPU无法与普通GPU的SIMD性能竞争,但当数千个CPU连接在一起时,它们就证明足够了。然而,此类系统缺乏功效。

例如,在天河一号超级计算机使用RadeonHD4870GPU的同时,AMD最大的服务器CPU(12核Opteron6176SE)也开始流行。对于大约140W的功耗,CPU理论上可以达到220GFLOPS,而GPU只需额外10W即可提供1,200GFLOPS的峰值,而且成本仅为其一小部分。

一个可以(做更多事情)的小显卡

几年后,不仅仅是世界上的超级计算机在利用GPU来集体进行并行计算。NVIDIA正在积极推广其GRID平台,这是一种用于科学和其他应用的GPU虚拟化服务。最初是作为托管基于云的游戏的系统而推出的,对大规模、经济实惠的GPGPU不断增长的需求使得这一转变不可避免。在其年度技术会议上,GRID被认为是各领域工程师的重要工具。

在同一事件中,GPU制造商展示了代号为Volta的未来架构。公布的细节很少,普遍的假设是这将是另一款服务于英伟达所有市场的芯片。


与此同时,AMD也在做类似的事情,在其专注于游戏的Radeon系列以及FirePro和RadeonSky服务器卡中利用定期更新的GraphicsCoreNext(GCN)设计。那时,性能数据已经令人震惊——FireProW9100的峰值FP32吞吐量为5.2TFLOPS(32位浮点),这个数字对于不到二十年前的超级计算机来说是不可想象的。

GPU仍然主要是为3D图形设计的,但渲染技术的进步意味着这些芯片必须越来越熟练地处理一般计算工作负载。唯一的问题是它们执行高精度浮点数学(即FP64或更高)的能力有限。

纵观2015年顶级超级计算机,与完全基于CPU的超级计算机相比,使用GPU(英特尔的XeonPhi或NVIDIA的Tesla)的数量相对较少。

当NVIDIA在2016年推出Pascal架构时,这一切都发生了变化。这是该公司首次尝试专门为高性能计算市场设计GPU,其他GPU则用于多个领域。前者只生产过一款(GP100),并且只产生了5种产品,但之前所有架构都只配备少数FP64内核,而这款芯片却容纳了近2,000个内核。


TeslaP100提供超过9TFLOPS的FP32处理能力和FP64处理能力的一半,它的功能非常强大。AMD的RadeonProW9100使用Vega10芯片,在FP32下速度快了30%,但在FP64下慢了800%。此时,英特尔因销售不佳而濒临停产XeonPhi。

一年后,NVIDIA终于发布了Volta,这表明该公司不仅仅有兴趣将其GPU引入HPC和数据处理市场,它还瞄准了另一个市场。

神经元、网络

深度学习是机器学习这一更广泛学科中的一个领域,而机器学习又是人工智能的一个子集。它涉及使用复杂的数学模型(称为神经网络)从给定数据中提取信息。

一个例子是确定所呈现的图像描绘特定动物的概率。为此,模型需要进行“训练”——在本例中,显示了数百万张该动物的图像,以及数百万张不显示该动物的图像。所涉及的数学植根于矩阵和张量计算。

几十年来,此类工作负载只适合基于CPU的大型超级计算机。然而,早在2000年代,GPU就显然非常适合此类任务。

尽管如此,英伟达还是押注于深度学习市场的大幅扩张,并在其Volta架构中添加了额外的功能,使其在该领域脱颖而出。这些是作为张量核心销售的FP16逻辑单元组,作为一个大型阵列一起运行,但功能非常有限。


事实上,它们的功能非常有限,只能执行一个功能:将两个FP164x4矩阵相乘,然后将另一个FP16或FP324x4矩阵添加到结果中(这一过程称为GEMM运算)。NVIDIA之前的GPU以及竞争对手的GPU也能够执行此类计算,但速度远不及Volta。使用该架构的唯一GPUGV100总共容纳了512个张量核心,每个核心能够在每个时钟周期执行64个GEMM。

根据数据集中矩阵的大小以及所使用的浮点大小,TeslaV100卡在这些张量计算中理论上可以达到125TFLOPS。Volta显然是为小众市场设计的,但GP100在超级计算机领域的进展有限,而新的Tesla型号则迅速被采用。

PC爱好者会知道,NVIDIA随后在图灵架构的通用消费产品中添加了张量核心,并开发了一种名为DLSS(DeepLearningSuperSampling)的升级技术,该技术使用GPU中的核心在计算机上运行神经网络。放大图像,纠正帧中的任何伪影。

在短时间内,NVIDIA独占了GPU加速的深度学习市场,其数据中心部门的收入大幅增长——2017财年增长率为145%,2018财年增长率为133%,2019财年增长率为52%。截至2019财年末,HPC、深度学习等领域的销售额总计29亿美元,这是一个非常积极的结果。

但随后,市场真的爆发了。该公司2023年第四季度的总收入为221亿美元,同比增长265%。其中大部分增长来自该公司的人工智能计划,该计划创造了184亿美元的收入。


然而,只要有钱,竞争就不可避免,尽管NVIDIA仍然是迄今为止最大的GPU提供商,但其他大型科技公司也没有坐以待毙。

2018年,Google开始通过云服务提供对其内部开发的张量处理芯片的访问。亚马逊很快也紧随其后,推出了专用CPUAWSGraviton。与此同时,AMD正在重组其GPU部门,形成两条不同的产品线:一条主要用于游戏(RDNA),另一条专门用于计算(CDNA)。

虽然RDNA与其前身明显不同,但CDNA在很大程度上是GCN的自然演变,尽管规模扩大到了一个巨大的水平。看看当今用于超级计算机、数据服务器和人工智能机器的GPU,一切都非常巨大。

AMD的CDNA2驱动的MI250X拥有220个计算单元,提供略低于48TFLOPS的双精度FP64吞吐量和128GB的高带宽内存(HBM2e),这两个方面在HPC应用中都备受追捧。NVIDIA的GH100芯片采用Hopper架构和576个TensorCore,在AI矩阵计算中采用低精度INT8数字格式,有可能达到4000TOPS。

英特尔的PonteVecchioGPU同样庞大,拥有1000亿个晶体管,AMD的MI300拥有460亿个晶体管,包括多个CPU、图形和内存小芯片。

然而,它们共有的一件事是它们绝对不是GPU:它们不是GPU。早在英伟达将该术语用作营销工具之前,该缩写词就代表图形处理单元。AMD的MI250X没有任何渲染输出单元(ROP:renderoutputunits),甚至GH100也仅拥有类似于GeForceGTX1050的Direct3D性能,使得GPU中的“G”变得无关紧要。

那么,我们可以称呼它们什么呢?

“GPGPU”并不理想,因为它是一个笨拙的短语,指的是在通用计算中使用GPU,而不是设备本身。“HPCU”(高性能计算单元)也好不了多少。但也许这并不重要。

毕竟,“CPU”一词非常广泛,涵盖了各种不同的处理器和用途。

GPU接下来要征服什么?

NVIDIA、AMD、Apple、Intel和其他数十家公司在GPU研发上投入了数十亿美元,当今的图形处理器不会很快被任何截然不同的产品所取代。

对于渲染,最新的API和使用它们的软件包(例如游戏引擎和CAD应用程序)通常与运行代码的硬件无关,因此从理论上讲,它们可以适应全新的东西。

然而,GPU中专门用于图形的组件相对较少,三角形设置引擎和ROP是最明显的组件,并且最近版本中的光线追踪单元也高度专业化。然而,其余部分本质上是大规模并行SIMD芯片,由强大而复杂的内存/缓存系统支持。


基本设计与以往一样好,未来的任何改进都与半导体制造技术的进步紧密相关。换句话说,它们只能通过容纳更多逻辑单元、以更高的时钟速度运行或两者的组合来改进。

当然,它们可以合并新功能,使其能够在更广泛的场景中发挥作用。在GPU的历史上,这种情况已经发生过多次,但向统一着色器架构的过渡尤为重要。虽然最好拥有专用硬件来处理张量或光线追踪计算,但现代GPU的核心能够管理这一切,尽管速度较慢。

这就是为什么AMDMI250和NVIDIAGH100等产品与台式电脑的同类产品非常相似,未来用于HPC和AI的设计很可能会遵循这一趋势。那么,如果芯片本身不会发生重大变化,那么它们的应用又如何呢?

鉴于与AI相关的任何事物本质上都是计算的一个分支,因此只要需要执行大量SIMD计算,就可能会使用GPU。虽然科学和工程领域没有多少领域尚未使用此类处理器,但我们可能会看到GPU衍生产品的使用激增。

目前人们可以购买配备微型芯片的手机,其唯一功能是加速张量计算。随着ChatGPT等工具的功能和普及度不断增强,我们将看到更多配备此类硬件的设备。

不起眼的GPU已经从仅仅比CPU更快地运行游戏的设备发展成为通用加速器,为全球的工作站、服务器和超级计算机提供动力。

全球数百万人每天都在使用它——不仅在我们的计算机、电话、电视和流媒体设备中,而且在我们使用包含语音和图像识别或提供音乐和视频推荐的服务时也是如此。

GPU真正的下一步可能是一个未知的领域,但有一点是肯定的,图形处理单元将在未来几十年内继续成为计算和人工智能的主要工具。

责任编辑:站长云网