万字剖析:NVIDIA、AMD的巅峰之战!
对于gpu爱好者来说,这是一个漫长的等待。 nvidia将turin*品线维持了两年,然后在2020年9月用ampere取代了它。amd更友善一点,他们的新设计间隔了15个月,但大多数人对此并不感兴趣。
他们希望看到的是amd推出一款高端机型,与nvidia(nvidia)最优秀的产品展开正面竞争。他们做到了,现在我们已经看到了结果,在花钱买最好的图形卡时,pc游戏玩家现在(在理论上)有了很多选择。
但是驱动它们的芯片呢?其中一个从根本上来说比另一个好吗?继续读下去,看看ampere和rdna 2是如何决一死战的!
nvidia衰退,amd成长
节点和die尺寸
多年来,高端gpu一直比 cpu大得多,而且它们的尺寸一直在稳步增长。amd最新推出的navi芯片面积约为520mm2,是之前navi芯片的两倍多。不过,这并不是他们最大的——这项荣誉颁给了他们的instinct mi100加速器(约750 mm2)中的gpu。
上一次amd制造的接近navi 21大小的游戏处理器是为radeon r9 fury和nano显卡设计的,这两款产品在fiji 芯片上采用了gcn 3.0架构。它的裸片面积为596 mm2,但它是在台积电的28hp工艺节点上生产的。
自2018年以来,amd一直在使用台积电更小的n7工艺,该生产线生产的最大芯片是vega 20 (radeon vii),面积为331mm2。他们所有的navi gpu都是在略微升级的n7p处理器上制作的,所以可以比较这些产品。
但说到纯粹的die尺寸,nvidia拿下了王冠,并不是说这一定是件好事。最新的基于ampere的芯片,ga102,是628mm2。这实际上比它的前身tu102小了17%——gpu面积达到惊人的754mm2。
与nvidia巨大的ga100芯片(用于ai和数据中心)相比,这两款芯片的尺寸都相形见绌,其gpu为826 mm2,采用的是台积电的n7芯片。虽然它从来没有被设计用来驱动桌面显卡,但它确实显示了gpu制造的可能规模。
把它们放在一起突出了nvidia最大的gpu有多大。navi 21看起来相当苗条,尽管处理器的功能不仅仅是芯片区。ga102封装了283亿个晶体管,而amd的新芯片减少了5%,达到268亿个。
我们不知道每个gpu构建多少层,因此我们所能比较的是晶体管与die面积的比率,通常称为die密度。navi 21的晶体管约为每平方毫米5150万个晶体管,但ga102明显低于41.1,这可能是nvidia的芯片堆叠程度比amd的略高,但它更可能表示工艺节点。
如前所述,navi 21是由台积电生产的,采用n7p生产方法,性能比n7略有提高;但在新产品ga102上,nvidia求助于三星来完成生产任务。这家韩国半导体巨头正在使用他们所谓的8nm节点(标记为8n或8nn)的改良版本,专门为nvidia设计。
这些节点值,7和8,与芯片组件的实际尺寸没有多大关系:它们只是市场营销术语,用于区分不同的生产技术。也就是说,即使ga102比navi 21有更多的层,die尺寸确实有一个特殊的影响。
一台300毫米(12英寸)的晶圆片正在台积电的制造工厂进行测试。
微处理器和其他芯片是由高度精炼的硅和其他材料制成的大圆盘,称为晶圆。台积电和三星为amd和nvidia使用的是300毫米晶圆,相对于更大的die,使用更小的die,每块晶圆将产生更多的芯片。
这种差异不可能很大,但是在降低制造成本方面,当每片晶圆的生产成本达到数千美元时,amd相对于nvidia而言优势较小。 当然,这是假设三星或台积电没有与amd / nvidia进行某种财务交易。
如果芯片本身不能很好地完成设计工作,那么所有这些die尺寸和晶体管数量都将是徒劳的。 因此,让我们深入研究每个新gpu的布局,看看它们背后的东西。
剖析die
ampere ga102和rdna 2 navi 21的总体架构
我们从分析ampere ga102和rdna 2 navi 21 gpu的总体架构开始我们对架构的探索——这些图表不一定向我们展示所有的物理布局,但它们给出了处理器有多少组件的明确指示。
在这两种情况下,布局都是非常熟悉的,因为它们基本上都是其前身的扩展版本。在处理指令中添加更多的单元将始终提高gpu的性能,因为在最新的3d大片中,在高分辨率下,渲染工作量涉及大量的并行计算。
这样的图表是有用的,但是对于这个特定的分析来说,更有趣的是看看各个组件在gpu中的位置。在设计大型处理器时,您通常希望共享资源(如控制器和缓存)位于中心位置,以确保每个组件都具有相同的路径。
接口系统,如本地内存控制器或视频输出,应该安装在芯片的边缘,以便更容易地将它们连接到连接gpu和显卡其余部分的数千根单独的电线上。
以下是amd的navi 21和nvidia的ga102 die的伪彩色图像。 它们实际上只显示了芯片中的一层;但它们确实给我们提供了一个现代gpu内部的极好视图。
两种设计之间最明显的区别在于,nvidia在芯片布局上没有遵循集中化的方法——所有的系统控制器和主缓存都在底部,逻辑单元以长列形式运行。他们过去也这样做过,但只针对中低端机型。
例如,pascal gp106(用于geforce gtx 1060等)实际上是gp104(来自geforce gtx 1070)的一半。 后者是较大的芯片,其缓存和控制器位于中间。 这些都移到了它的兄弟姐妹那一边,但这只是因为设计已经被拆分了。
对于之前所有的高端gpu布局,nvidia都使用了经典的集中式结构。为什么这里会有变化呢?这不可能是由于接口的原因,因为内存控制器和pci express系统都运行在die的边缘。
这也不是出于热学原因,因为即使die 的缓存/控制器部分比逻辑部分的温度更高,您仍然希望在其中间具有更多的硅以帮助吸收和散发热量 。尽管我们不能完全确定更改的原因,但我们怀疑这与nvidia对芯片中rop(渲染输出)单元实施的更改有关。
我们将在后面更详细地讨论它们,但是现在让我们说,虽然布局的改变看起来很奇怪,但它不会对性能产生显著的影响。这是因为3d渲染充斥着许多长时间的延迟,通常是由于必须等待数据。因此,由于一些逻辑单元比其他逻辑单元离缓存更远而增加的纳秒数,都被隐藏在了整个系统中。
在我们继续之前,值得注意的是amd在navi 21布局中实施的工程改变,与驱动类似radeon rx5700 xt的navi 10相比。尽管新芯片在面积和晶体管数量上都比之前的芯片大了一倍,但设计者还设法在不显著增加功耗的情况下提高了时钟速度。
例如,radeon rx 6800 xt运动的基时钟和升压时钟分别为1825和2250mhz, tdp为300 w;radeon rx 5700 xt的相同性能为1605 mhz、1905 mhz和225 w。英伟达也通过ampere提高了时钟速度,但部分原因是使用了更小、更高效的进程节点。
我们对ampere和rdna 2显卡的每瓦特性能检查显示,两家供应商在这方面都取得了显著的改进,但amd和台积电取得了一些相当显著的成就——比较上图中radeon rx 6800和radeon vii之间的差异。
后者是他们首次使用n7节点进行gpu合作,并且在不到两年的时间内,他们将每瓦性能提高了64%。的确,如果nvidia继续与台积电合作,那ampere ga102的性能会好得多。
管理gpu工厂
芯片内部的一切组织方式
当涉及到指令处理和数据传输管理时,ampere和rdna2都遵循类似的模式来组织芯片内部的一切。游戏开发人员使用图形api编写标题,以制作所有图像;它可能是direct3d、opengl或vulkan。这些基本上是软件库,充满了规则、结构和简化指令的“书籍”。
amd和nvidia为他们的芯片创建的驱动程序本质上起着翻译的作用:将通过api发布的例程转换为gpu能够理解的操作序列。在那之后,就完全由硬件来管理了,比如什么指令首先执行,芯片的哪个部分执行这些指令,等等。
指令管理的初始阶段由合理地集中在芯片中的一组单元处理。在rdna 2中,图形和计算着色器通过单独的管线进行路由,这些管线将指令调度并分派到芯片的其余部分。前者称为图形命令处理器,后者是异步计算引擎(ace)。
nvidia只是用一个名字来描述他们的一组管理单元,即gigathread engine,在ampere中它执行与rdna 2相同的任务,尽管nvidia并未过多说明其实际管理方式。总之,这些命令处理器的功能类似于工厂的生产经理。
gpu通过并行执行所有操作来获得性能,因此在整个芯片上复制了下一个组织层次。坚持工厂的类比,这类似于一家拥有*办公室但在多个地点生产商品的企业。
amd使用标签着色器引擎(se),而nvidia则称其为图形处理集群(gpc)-不同的名称,相同的角色。
对芯片进行这种分区的原因很简单:命令处理单元不能处理所有事情,因为它最终会变得过于庞大和复杂。因此,将一些日程安排和组织职责进一步向下推进是有意义的。这也意味着每个分离分区可以完全独立于其他分区执行某些操作,因此一个分区可以处理大量的图形着色器,而其他分区则在处理长而复杂的计算着色器。
在rdna 2的例子中,每个se都有自己一套固定的功能单元:被设计用来完成一项特定任务的电路,程序员通常无法对其进行大量调整。
mitive setup unit——获取顶点,准备好进行处理,同时生成更多的顶点(essellation)并将其剔除
rasterizer——将三角形的3d世界转换为像素的2d网格
render outputs(rops)——读取、写入和混合像素
原始的设置单元以每个时钟周期1个三角形的速率运行。这听起来可能不是很多,但是不要忘记这些芯片运行在1.8到2.2 ghz之间,所以原始的设置不应该成为gpu的瓶颈。对ampere来说,原始单位是在组织的下一层找到的,我们很快就会讲到。
amd和nvidia都没有过多提及他们的光栅化器。后者称为光栅引擎,我们知道它们每个时钟周期处理一个三角形,并输出若干像素,但没有进一步的信息,例如它们的亚像素精度。
navi 21芯片中的每个se都有4组8个rop,总共产生128个渲染输出单元;nvidia的ga102每gpc包含2组8个rop,因此整个芯片可运动112个rop。这看起来amd在这方面有优势,因为更多的rop意味着每个时钟可以处理更多的像素。但是这样的单元需要对缓存和本地内存的良好访问,我们将在本文后面详细介绍。现在,让我们继续研究se/gpc分区是如何进一步划分的。
amd的着色引擎被划分为双计算单元(dcu),navi 21芯片本身就有10个dcu——请注意,在一些文档中,它们也被归类为工作组处理器(wgp)。在ampere和ga102的例子中,它们被称为纹理处理簇(tpc),每个gpu包含6个tpc。nvidia设计的每一个集群都有一个叫做“变形引擎”的东西——本质上是ampere的原始设置单元。
nvidia也以每时钟1个三角形的速度运行,尽管nvidia的gpu比amd的低,但他们的tpc数量比navi 21的se要多得多。因此,对于相同的时钟速度,ga102应该有一个显著的优势,因为完整的芯片拥有42个原始设置单元,而amd的新rdna 2只有4个。但由于每个光栅引擎有6个tpc, ga102实际上有7个完整的原始系统,而navi 21有4个。由于后者的时钟并没有比前者高75%,当涉及到几何处理(尽管没有游戏可能在这方面受到限制)时,似乎英伟达在这方面具有明显的领先优势。
芯片组织的最后一层是rdna 2中的计算单元(cu)和ampere中的流式多处理器(sm),这是我们gpu工厂的生产线。
这些是图形处理器馅饼中的肉和蔬菜,因为它们拥有所有用于处理图形、计算和现在的光线追踪着色器的高度可编程单元。正如你在上图中看到的,每一个芯片都只占整个芯片空间的很小一部分,但是它们仍然是非常复杂的,并且对芯片的整体性能非常重要。
到目前为止,在两个gpu的布局和组织方式方面,还没有什么真正的突破性协议。术语全都不同,但是它们的功能却大同小异。而且由于它们所做的很多事情都受可编程性和灵活性的限制,因此一个相对于另一个所具有的任何优势,都只能归结为规模感,即哪个拥有最大的特色。
但是对于cu和sm,amd和nvidia采取了不同的方式来处理着色器。在某些领域,它们有很多共同点,但在其他许多领域则并非如此。
计数核心是nvidia的方式
由于安培(ampere)在rdna 2之前就冒险进入野外,我们首先来看看nvidia的sm。现在没有必要查看裸片本身的图像,因为它们无法准确告诉我们其中的内容,因此让我们使用组织图。这些不应该代表芯片中各种组件的物理排列方式,而只是每种类型中存在多少种。
图灵对其台式机前身pascal进行了实质性更改(去掉了一堆fp64单元和寄存器,但是增加了张量核和光线跟踪),而ampere实际上是一个相当温和的更新-至少从表面上看。不过,就nvidia的市场部门而言,新设计使每个sm中cuda内核的数量增加了一倍以上。
在图灵中,流多处理器包含四个分区(有时称为处理块),每个分区中容纳16个int32和16x fp32逻辑单元。这些电路旨在对32位数据值执行非常具体的数学运算:int单位处理整数,而fp单位处理浮点数(即十进制)。
英伟达表示,一个ampere sm总共有128个cuda内核,但严格来说,这是不正确的-或者,如果我们必须坚持这一点,那么图灵(turing)也是如此。该芯片中的int32单元实际上可以处理浮点值,但只能以非常少量的简单操作进行。对于ampere,nvidia已开放了它们支持的浮点数学运算范围,以匹配其他fp32单元。这意味着每个sm的cuda内核总数并没有真正改变。只是其中的一半现在拥有更多功能。
每个sm分区中的所有内核都可以随时处理同一条指令,但是由于int / fp单元可以独立运行,因此ampere sm每个周期最多可以处理128x fp32计算,或一起处理64x fp32和64x int32操作。而图灵只是后者。
因此,新的gpu可能使fp32的输出量比其上一代产品大一倍。对于计算工作负载,尤其是在专业应用程序中,这是向前迈出的一大步。但是对于游戏而言,优势却远远没有达到预期。当我们首次测试geforce rtx 3080时,这一点很明显,它使用启用了68个sm的ga102芯片。
尽管fp32的峰值吞吐量比geforce 2080 ti高出121%,但平均帧速率仅提高了31%。那么,为什么所有这些计算能力都会浪费掉呢?一个简单的答案是,游戏并非一直在运行fp32指令。
当nvidia在2018年发布turing时,他们指出, gpu处理的指令平均约有36%涉及int32例程。这些计算通常用于计算内存地址,两个值之间的比较以及逻辑流/控制。
因此,对于这些操作,双速率fp32功能不起作用,因为具有两个数据路径的单元只能执行整数或浮点运算。而且,只有在当时由它处理的所有32个线程都排队处理相同的fp32操作时,sm分区才会切换到此模式。在所有其他情况下,安培中的分区与图灵中的分区一样运行。
这意味着在int + fp模式下运行时,geforce rtx 3080之类的fp32仅比2080 ti具有11%的fp32优势。这就是为什么在游戏中看到的实际性能提升没有原始数据所预期的那么高的原因。
至于其他改进。每个sm分区的tensor core更少,但每个都比turing中的功能强大得多。这些电路执行非常具体的计算(例如将两个fp16值相乘并用另一个fp16编号累加答案),每个内核现在每个周期执行32次这些操作。
它们还支持一种名为“细粒度结构稀疏性”的新特性,在不涉及所有细节的情况下,这意味着通过剔除那些对答案没有影响的数据,计算率可以翻倍。同样,这对于从事神经网络和人工智能工作的专业人员来说是个好消息,但目前对游戏开发者来说并没有什么明显的好处。
光线跟踪核心也已进行了调整:它们现在可以独立于cuda核心工作,因此,在进行bvh遍历或光线原始相交数学时,sm的其余部分仍可以处理着色器。处理射线是否与原语相交测试的rt核心的部分性能也增加了一倍。
rt内核还具有附加的硬件,可帮助将光线跟踪应用于运动模糊,但是此功能目前仅通过nvidia专有的optix api公开。
还有其他一些调整,但是整体方法是明智但稳定的演进之一,而不是主要的新设计。但是考虑到图灵的原始功能并没有什么特别的错误,因此看到这一点不足为奇。
那么amd怎么办?他们对rdna 2中的计算单元做了什么?
下一篇: 程序解答高数方程