首页 > 企业站 > 企业站_资讯眼> 正文

为什么说GPU是缓存之王?

佚名 整合编辑: 王珂玥 发布于:2023-10-06 17:28

不久之前,如果你想要一个内置大量缓存的处理器,那么CPU是显而易见的选择。现在,即使是预算级的GPU也比几年前的高端CPU拥有更多的内存。

那么,是什么改变了呢?为什么图形芯片突然需要比通用的中央处理器更多的缓存?两者之间的专用内存有什么不同吗?将来我们会看到GPU有千兆字节的缓存吗?

为了回答这些问题,我们需要深入了解最新的芯片,观察这些年来的变化。

为什么GPU有如此多的缓存

低级数据缓存的大小已经增长,因为GPU现在被用于各种应用程序,而不仅仅是图形。为了提高它们在通用计算中的能力,图形芯片需要更大的缓存。这确保了没有数学核心空闲等待数据。

最后一级缓存已经大大扩展,以抵消DRAM性能没有跟上处理器性能进步的事实。L2或L3缓存的增加减少了缓存未命中的可能。这还可以防止内核处于空闲状态,并最大限度地减少对非常宽的内存总线的需求。

此外,渲染技术的进步,特别是光线追踪,对GPU的缓存层次提出了巨大的要求。当使用这些技术时,大型最后关卡缓存对于确保游戏性能保持可玩性至关重要。

了解缓存

为了完整地讨论缓存这一主题,我们必须首先了解缓存是什么以及它的意义。所有处理器都需要内存来存储它们处理的数字和计算结果。它们还需要特定的任务指令,比如要执行哪些计算。这些指令以数字方式存储和传递。

这种存储器通常被称为RAM(随机存取存储器,Random Access Memory)。每个带有处理器的电子设备都配备了RAM。几十年来,个人电脑一直使用DRAM (Dynamic RAM)作为数据的临时存储,磁盘驱动器作为长期存储。

DRAM自发明以来,已经取得了巨大的进步,随着时间的推移,速度呈指数级增长。数据存储也是如此,曾经占主导地位但速度较慢的硬盘驱动器正被速度较快的固态存储(SSD)所取代。然而,尽管有这些进步,与基本处理器执行单个计算的速度相比,这两种类型的内存仍然非常慢。

虽然芯片可以在几纳秒内将两个数字相加,但检索这些值或存储结果可能需要数百到数千纳秒——即使使用最快的可用RAM。如果没有办法绕过这个问题,那么PC不会比20世纪70年代的电脑好到哪里去,尽管它们的时钟速度要快得多。

值得庆幸的是,SRAM(Static RAM)可以弥补这一差距。SRAM由与执行计算的处理器中的晶体管相同的晶体管制成。这意味着SRAM可以直接集成到芯片中,并以芯片的速度运行。它靠近逻辑单元,将数据检索或存储时间缩短到几十纳秒。

这样做的缺点是,即使是一个存储位也需要晶体管的排列,以及其他必要的电路,占用了相当大的空间。使用目前的制造技术,64MB的SRAM大致相当于2GB的DRAM。

这就是为什么当代的处理器采用了各种各样的SRAM块——有些很小,只包含几个位,而另一些则包含几MB。这些较大的块绕过了DRAM的慢速,显著提高了芯片性能。

这些内存类型根据其用途有不同的名称,但最普遍的是“缓存”。这就是讨论变得有点复杂的地方。

分层存储结构

处理器核心内的逻辑单元通常处理小块数据。它们接收的指令和处理的数字很少大于64位。因此,存储这些值的SRAM的最小块大小相似,称为“寄存器”。

为了确保这些单元不会停止运行,等待下一组命令或数据,芯片通常会预取这些信息,并保留经常发布的信息。这些数据存储在两个不同的SRAM集合中,通常称为1级指令(Level 1 Instruction)和1级数据缓存(Level 1 Data cache)。顾名思义,每个都有它所保存的特定类型的数据。尽管它们很重要,但它们并不广泛。例如,AMD最新的桌面处理器为每个处理器分配32 kB。

虽然不是很大,但这些缓存足以容纳大量的命令和数据,确保核心不会闲置。然而,为了维护这种数据流,必须持续地提供缓存。当核心需要的特定值在一级缓存(L1)中不存在时,二级缓存就变得至关重要。

二级缓存是一个更大的块,存储不同范围的数据。记住,单个核心有多个逻辑单元线。如果没有L2, L1缓存很快就会不堪重负。现代处理器有多个核心,这促使引入了另一个为所有核心提供服务的缓存层:L3级缓存。它甚至更大,可达几个MB。从历史上看,一些CPU甚至具有第四个级别。

处理器中的最后一级缓存通常作为来自系统DRAM的任何数据的第一个访问端口,然后再进行传输,但情况并非总是如此。这是关于缓存的部分,它往往变得非常复杂,但对于理解为什么CPU和GPU有非常不同的缓存安排也是至关重要的。

整个系统的SRAM块被使用的方式被称为芯片的分层缓存结构,它变化很大,取决于诸如体系结构的年龄和芯片的目标扇区等因素。但是对于CPU来说,有一些方面总是相同的,其中之一就是层次结构的一致性。

缓存中的数据可以从系统的DRAM中复制。如果内核修改了它,则必须同时更新DRAM版本。因此,CPU缓存结构具有确保数据准确性和及时更新的机制。这种复杂的设计增加了复杂性,在处理器领域,复杂性转化为晶体管,随后转化为空间。

这就是为什么前几层缓存不是很大的原因——不仅仅是因为SRAM非常占地方,还因为需要所有额外的系统来保持它的一致性。然而,并不是每个处理器都需要它,有一种非常特殊的类型通常完全避免了它。

GPU工作:内核优先于缓存

今天的图形芯片,就其内部结构和功能而言,形成于2007年。那时Nvidia和ATI都发布了统一着色器GPU,但对于后者来说,真正的变化发生在5年后。

2012年,AMD(当时已经收购了ATI)发布了他们的下一代图形核心(Graphics Core Next,GCN)架构。这种设计至今仍在使用,尽管它经历了重大的修改,并演变成像RDNA和CDNA这样的形式。我们将引用GCN来阐明CPU和GPU之间的缓存差异,因为它提供了一个清晰的示例。

跳转到2017年,让我们对比一下AMD的Ryzen 7 1800X CPU(上图)和Radeon RX Vega 64 GPU。前者有8个核心,每个核心包含8条管道。其中四个管道处理标准的数学操作,两个专门处理广泛的浮点计算,最后两个负责数据管理。其缓存层次结构为:L1指令64kb、L1数据32kb、L2 512kb、L3 16MB。

具有4个处理块。每个块包含64个管道,通常称为计算单元(Compute Units,CU)。此外,每个CU可容纳四组16个逻辑单元。每个CU拥有16kb的L1数据缓存和64kb的便签存储器(scratchpad memory,SPM),本质上作为没有一致性机制的缓存(AMD将其称为本地数据共享(Local Data Share))。

此外,还有两个缓存(16 kB L1指令和32 kB L1数据),可以满足4个CU组的需求。Vega GPU还拥有4MB的二级缓存,位于两条条带中。

这个特定的图形处理器在芯片面积方面是Ryzen芯片的两倍。但是,它的缓存占用的空间比CPU占用的空间小得多。与CPU相比,为什么这个GPU要维护一个最小的缓存,特别是关于L2段?

考虑到与Ryzen芯片相比,它的“核心”数量要高得多,有人可能会预计,总共有4096个数学单元,为了保持稳定的数据供应,大量的缓存将是必不可少的。然而,CPU和GPU的工作负载有根本的不同。

虽然Ryzen芯片可以同时管理多达16个线程并处理16个不同的命令,但Vega处理器可能处理更多的线程,但其CU通常执行相同的指令。

此外,每个CU中的数学单元在一个周期内同步执行相同的计算。这种一致性将它们归类为SIMT(单指令,多线程)设备。GPU按顺序运行,很少偏离可选的处理路线。

为了处理并行,CPU在确保数据一致性的同时处理不同范围的指令。相反,GPU重复执行类似的任务,消除了数据一致性和不断重新启动操作的需要。

由于渲染3D图形的任务主要由重复的数学运算组成,GPU不需要像CPU那样复杂。相反,GPU被设计成大规模并行,并发处理数千个数据点。这就是为什么与中央处理器相比,它们的缓存更小,但内核更多。

然而,如果是这样的话,为什么AMD和Nvidia最新的显卡有大量的缓存,甚至是廉价的型号?Radeon RX 7600只有2MB的L2内存,但它也有32MB的L3内存;英伟达的GeForce RTX 4060没有L3内存,但它有24MB的L2内存。

当谈到他们的光环产品时,内存会变得巨大——GeForce RTX 4090拥有72 MB的L2, AMD的Navi 21芯片在Radeon RX 6800 / 6900卡中拥有128 MB的L3!

这里有很多东西值得进一步探讨——例如,为什么AMD这么长时间一直用这么小的缓存,但突然增加它们的大小,尤其是投入大容量的L3,作为新的举措?

为什么英伟达把L1的尺寸增加了这么多,而L2的尺寸却保持相对较小,只是为了复制AMD,疯狂地使用L2缓存?

GPU中的“G”不再仅仅是图形了

这种转变有很多原因,但对英伟达来说,这种转变是由其GPU使用方式的变化推动的。虽然它们被称为图形处理单元,但这些芯片的功能远不止在屏幕上显示令人印象深刻的图像。

虽然绝大多数GPU在这个功能上表现出色,但这些芯片已经超越了渲染的限制。他们现在处理各种学科的数据处理和科学算法中的数学负荷,包括工程学、物理学、化学、生物学、医学、经济学和地理学。为什么会这样?因为它们非常擅长在同一时间对数千个数据点进行相同的计算。

虽然CPU也可以执行此功能,但对于某些任务,单个GPU可以与多个中央处理器一样高效。随着英伟达的GPU向更通用的方向发展,芯片内的逻辑单元数量和运算速度都呈指数级增长。

2007年,Tesla C870标志着英伟达首次进入严肃的通用计算领域。这张卡的体系结构,在它的缓存层次结构中只有两层(技术上可以争论2.5层,但让我们回避这个争论),确保L1缓存足够扩展,可以持续向所有单元提供数据。这得益于更快的VRAM。二级缓存的大小也在增长,尽管没有我们现在看到的那么大。

最初的几款统一着色器GPU只有16kb的L1数据(指令和其它值也很少),但在几年内跃升至64kb。在过去的两种架构中,GeForce芯片支持128 kB L1,其服务器级处理器支持的L1甚至更多。

第一批芯片中的L1缓存只需要服务10个逻辑单元(8个通用单元+ 2个特殊功能单元)。到Pascal架构出现的时候(与AMD的RX Vega 64大致相同),缓存已经增长到96 kB,可以容纳150多个逻辑单元。

当然,这个缓存从L2获取数据,随着每一代这些单元的集群数量的增加,L2缓存的数量也会增加。然而,自2012年以来,每个逻辑集群的L2数量(更好地称为流多处理器,Streaming Multiprocessor, SM)保持相对相同——在70MB到130 MB的顺序。当然,最新的Ada Lovelace架构是例外,我们稍后会回到这个架构。

多年来,AMD的重点主要集中在其CPU上,图形部门相对较小——在人员和预算方面。作为一种基本设计,GCN运行得非常好,在PC、主机、笔记本电脑、工作站和服务器中都有一席之地。

虽然可能并不总是最快的GPU,但AMD的图形处理器已经足够好了,这些芯片的缓存结构似乎不需要重大更新。但是,当CPU和GPU突飞猛进的发展时,还有另一个难题被证明更难改进。

DRAM总是拖拖拉拉

GCN的继承者是2019年的RDNA架构,AMD重新调整了所有内容,以便他们的新GPU使用三层缓存,同时仍然保持相对较小的缓存。然后,在后续的RDNA 2设计中,AMD利用其在CPU缓存工程方面的专业知识,将第四级缓存硬塞进芯片中,比之前的GPU大得多。

但为什么要做出这样的改变,尤其是当这些芯片主要是为游戏而设计的,而GCN缓存多年来几乎没有什么变化?

原因很简单:

-芯片大小和复杂性:虽然合并更多的缓存级别确实使芯片设计复杂化,但它可以防止芯片变得过大。更小的芯片意味着可以从一片硅片中提取更多的单元,从而提高生产成本。

-内存速度与处理器速度:处理器速度多年来一直在持续上升,但DRAM却没有跟上这一步伐。例如,在Radeon RX Vega 64中,AMD利用高带宽内存(HBM)来提高VRAM和GPU之间的数据传输速率。本质上是多个DRAM芯片堆叠在一起,促进每个周期读取或写入更多数据。然而,HBM非常昂贵。理想情况下,显卡应该有足够的内存,大量的总线,都以高速运行。但由于DRAM的结构,它的性能无法升级到与CPU或GPU相匹配。

当计算所需的数据不存在于缓存中时(通常称为“缓存未命中”),它必须从VRAM中获取。由于这个过程比从缓存中检索要慢,因此等待存储在DRAM中的数据只会导致需要它的线程停滞不前。即使使用现代图形芯片,这种情况也经常发生。

这种情况一直都在发生,即使是使用最新的图形芯片,但随着它们变得越来越强大,缓存未命中在高分辨率下成为一个重要的性能限制。

在GPU中,最后一级缓存的结构使得每个VRAM模块的接口都有其专用的SRAM片。其余的处理器利用交叉(crossbar)连接系统来访问任何模块。对于GCN和最初的RDNA设计,AMD通常使用256或512 kB的L3切片。但是对于RDNA 2,这一数据飙升至令人印象深刻的每片16到32 MB。

这种调整不仅大大减少了由DRAM读取引起的线程延迟,而且还减少了对超宽内存总线的需求。更宽的总线需要更大的GPU芯片周长来容纳所有内存接口。

虽然由于固有的长延迟,大型缓存可能会变得笨重和缓慢,但AMD的设计正好相反——笨重的L3缓存允许RDNA 2芯片具有与具有更宽内存总线相当的性能,同时保持芯片尺寸在控制范围内。

英伟达紧随其后推出了最新一代Ada Lovelace,出于同样的原因——之前的Ampere设计在其最大的消费级GPU中最大二级缓存大小为6 MB,但在新设计中这一大小显着增加。完整的AD102芯片,在RTX 4090中使用的精简版本,包含96 MB的L2缓存。

至于为什么他们没有采用另一种级别的缓存,并使其变得非常大,可能是因为他们在这一领域的专业知识水平不如AMD,或者可能是不想让人觉得他们直接抄袭了AMD。

除了通用GPU计算的兴起之外,还有另一个原因可以解释为什么最后一级缓存现在如此之大,它与渲染中最新的热门话题有关:光线追踪。

大图形需要大数据

在这里我们不需要深入讨论这个过程的太多细节,就像最新游戏中所使用的那样,光线追踪涉及到执行一种看似相当简单的算法——从3D世界中的摄像机位置出发,通过帧的一个像素绘制一条线,并在空间中追踪它的路径。当它与一个对象交互时,检查它是什么,如果它是可见的,然后从那里计算出像素的颜色。

还有更多的事情要做,但这是基本的过程。使光线追踪如此苛刻的一个方面是对象检查。计算出光线到达的物体的所有细节是一项巨大的任务,因此为了帮助加快例行程序,使用了一种称为包围体层次结构(简称Bounding volume hierarchy,BVH)的东西。

把它想象成3D场景中使用的所有物体的大型数据库——每个条目不仅提供了结构的信息,还提供了它与其他物体的关系。

举一个极度简化的例子。层次结构的顶部从volume A开始,其他所有内容都包含在其中,但请注意,volume E在volume C之外,volume C本身包含D和F。当一条光线投射到这个场景中时,会发生一个遍历层次结构的过程,检查光线的路径经过哪些volume。

然而,BVH像树一样排列,遍历只需要沿着检查结果为命中的分支。所以volume E可以立即被排除,因为它不是射线要经过的C的一部分。当然,现代游戏中BVH的现实情况要复杂得多。

现在,试着想象从你的眼睛开始,沿着一条线穿过显示器上的一个像素,然后试着确定哪个三角形会与光线相交。这就是为什么使用BVH是如此重要,它大大加快了整个过程。

在这个特殊的游戏中,像许多使用光线追踪来照亮整个场景的游戏一样,BVH包含两种类型的多个数据库——顶级加速结构(top-level acceleration structure,TLAS)和底层加速结构(bottom-level acceleration structure,BLAS)。

前者本质上是对整个世界的一个大的概述,而不仅仅是我们所看到的很小的一部分。我们截取了《赛博朋克2077》的一张快照,暂停了游戏的中间帧渲染,向你展示了任何一个给定场景是如何通过不断增加的三角形层来构建的。

在使用英伟达显卡的PC上,它看起来像这样:我们把它放大了一点,向你展示了它包含的一些细节,但正如你所看到的,它非常大——大约有18MB。请注意,列表是实例之一,每个实例至少包含一个BLAS。游戏只使用两个TLAS结构(第二个要小得多),但总共有数千个BLAS。

下面的一个是一件衣服,可能是由一个角色在世界上看到的。有这么多的BLAS看起来很荒谬,但是这个层次结构意味着如果这个BLAS不在光线路径上的更大的父结构中,它将永远不会被检查,也不会在渲染的着色阶段使用。

对于我们的《赛博朋克2077》快照,总共使用了11,360个BLAS,占用了比TLAS更多的内存。然而,由于GPU现在具有大量缓存,因此有足够的空间将后者存储在SRAM中,并将许多相关的BLAS从VRAM传输过来,从而使光线追踪过程变得更快。

所谓的渲染圣杯仍然只有那些拥有最好的显卡的人才能接触到,即使如此,也需要使用额外的技术(如图像升级和帧生成)来将整体性能带入可玩的领域。

BVH、数千个内核和GPU中的专用光线追踪单元使这一切成为可能,但巨大的缓存为这一切提供了急需的推动力。

王冠的竞争者

一旦几代GPU架构过去,看到带有大量L2或L3缓存的图形芯片将成为常态,而不是新设计的独特卖点。GPU将继续用于广泛的通用场景,光线追踪将在游戏中变得越来越普遍,而DRAM仍将落后于处理器技术的发展。

然而,这并不是GPU封装SRAM所有的方式。事实上,现在有几个例外。

我们不是在谈论AMD的X3D系列Ryzen CPU,尽管Ryzen 9 7950X3D配备了惊人的128 MB L3缓存(英特尔最大的消费级CPU酷睿i9-13900K只有36 MB)。不过,它仍然是AMD的产品,特别是其最新的EPYC 9000系列服务器处理器。

售价14,756美元的EPYC 9684X包含13个小芯片(chiplet),其中12个包含处理器核心和缓存。在芯片内置的32MB L3缓存之上,每个芯片都包含8个内核和64MB的AMD 3D V-cache。把所有这些放在一起,这是一个令人难以置信的总计1152 MB的最后一级缓存!即使是16核版本(9174F)也拥有256 MB,尽管它仍然不便宜,价格为3,840美元。

当然,这样的处理器不是为普通人和他们的游戏PC设计的,其物理尺寸、价格标签和功耗数字都非常大,以至于我们在许多年内都不会在普通台式电脑上看到类似的东西。

部分原因是,与用于逻辑单元的半导体电路不同,随着每个新的工艺节点(芯片制造方法),缩小SRAM变得越来越困难。AMD的EPYC处理器之所以有这么多缓存,仅仅是因为散热片下面有很多芯片。

在未来的某个时候,所有的GPU都可能会走类似的路线,AMD的高端Radeon 9000型号已经这样做了,内存接口和相关的L3缓存切片被安置在主处理芯片的单独芯片中。

使用更大的缓存会减少收益,所以不要期望看到GPU到处都有千兆字节的缓存。但即便如此,最近的变化还是相当显著的。

二十年前,图形芯片只有很少的缓存,只有几个kB的SRAM,到处都是。现在,你可以花不到400美元买一张显卡,它有如此多的缓存,你可以把整个《Doom》的原始版本装在里面——两倍!

GPU确实是缓存之王。

 

原文《Why GPUs are the New Kings of Cache. Explained.》

佚名

网友评论

聚超值•精选

推荐 手机 笔记本 影像 硬件 家居 商用 企业 出行 未来
二维码 回到顶部