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