来源:本文由公众号半导体行业观察(ID:icbank)翻译自「anandtech」,作者 Andrei Frumusanu,谢谢。
今天,Arm推出了新的Cortex-A77 CPU微架构,但更重要的推出了新的Valhall GPU架构和新的Mali-G77 GPU。Bifrost架构推出已有三年,随着行业和工作负载的不断发展,Arm的GPU也必须与时俱进。
Valhall和新款Mali-G77继上三代Mali GPU之后,在性能、密度和效率方面都有了一些显著的改进。尽管去年的G76对执行引擎的计算架构进行了一些重大更改,但G77更进一步,并且脱离了Arm相对不同寻常的计算核心设计。
回顾Bifrost——第三次是魅力
过去几年对Arm的GPU IP产品不太友好,这不是什么大秘密。当第一款Bifrost GPU——Mali-G71于2016年推出,并在当年晚些时候在麒麟960和Exynos 8895上投入生产时,我们曾期待会有良好的性能和效率提升。
Bifrost是Arm的第一个标量GPU架构,不同于上一代(Midgard:T-600,700&800系列)的矢量指令设计。这一变化是根本性的,就像我们看到AMD和英伟达这样的台式计算机GPU供应商在过去十年中推出了新的GCN和Tesla架构。
不幸的是,前两代Bifrost,Mali-G71和随后的G72都不是很好的GPU。Arm的两大主要授权商,海思和三星,用这两代架构推出的GPU都非常令人失望。麒麟960和970在这方面尤其糟糕,我认为它对华为和荣耀的产品规划和营销产生了相当大的影响。
在Bifrost架构的最后一次迭代中,Mali-G76对于Arm而言是一次更重要的飞跃,IP在很大程度上能够解决其前代产品的一些关键问题,从而为Exynos 9820和麒麟980芯片组带来了相对较好的结果。
不幸的是,当Arm迎头赶上并解决BiFrost的问题时,竞争对手并没有止步不前,而且还在挑战极限。高通的Adreno GPU架构多年来一直在移动领域处于领先地位,尽管Adreno 640今年没有取得令人印象深刻的改进,但它在性能、效率和密度方面仍明显领先于Arm。更令人担忧的是,苹果A12的GPU在性能和效率方面绝对是一个重大飞跃,甚至比高通最好的GPU都要好得多,更不用说Arm的Mali GPU了。
Valhall简介:一次重大的改进
今天我们要介绍Arm的全新GPU架构:Valhall(古挪威语Valhöll,即Valhalla)。新架构带来了全新的ISA和计算核心设计,试图解决Bifrost架构的主要缺点,并且看起来与我们看到的其他GPU供应商采用的设计方法非常相似。
Valhall GPU的第一次迭代是新的Mali-G77,它将实现我们今天将要讨论的所有架构和微架构改进。
Arm承诺的是,能效和面积密度(基于ISO性能和工艺)提高30%,以及GPU上的机器学习推理工作负载性能提高60%。
更有趣的是,在即将到来的2019年底和2020年,SoC的性能预计将比2019年的器件提高40%。下一代SoC预计只有很小的工艺节点改进,因此这里引用的大部分提升都归功于新Mali-G77 GPU的架构和微架构的飞跃。
Valhall简介:一个用于现代工作负载的新ISA
新的Valhall架构的核心是Arm的新执行核心,这与它的前代产品有很大的不同。它仍然是一个标量设计,但是不同于Bifrost不同寻常的狭窄的8-wide设计,新的执行核心更类似于我们从AMD和英伟达等台式计算机GPU供应商那里看到的样子。
Bifrost在Mali-G71和G72的初始迭代中,核心中的执行块由4-wide标量SIMD单元单元组成,其warp/wavefront大小也是4。在去年的G76上,它增加到了2个4-wide单元,warp大小是8。最初,在BiFrost的设计中,Arm使用如此窄的单元和如此小的warp的理由是为了减少ALU上的空闲周期。当时的工作负载无法有效地填充足够的线程来支持更大的warp设计。这样做的好处是,理论上Arm可以以更多的控制逻辑为代价实现更好的ALU利用率。
然而,随着新一代工作负载的不断发展,这种方法突然变得没有什么意义了。今天的游戏正在快速地向更复杂的计算发展,特别是在过去的一两年中,我们看到了起源于PC的游戏被移植到了移动设备上。
随着着色计算复杂性的增加,发出更多线程并对其进行更宽的warp设计变得更加容易。在这种情况下,新的Valhall架构支持16-wide的基于warp的执行模型。虽然仍然没有英伟达的32-wide或AMD的64-wide设计那样的宽度,但考虑到去年之前Mali GPU使用的是4-wide warp执行模型,因此这是一次巨大的飞跃。
Arm也改变了ISA本身,简化了很多指令。虽然我们没有更多细节,但据说新的ISA更易于编译,并且其设计可以更好地配合现代API(如Vulkan)。
对于此前的BiFrost GPU甚至是Midgard GPU,我们看到的是单个GPU核心采用多个执行引擎。这3个引擎有自己专用的数据路径控制逻辑、自己的调度程序和指令缓存,以及自己的寄存器文件和消息传递块,这自然会产生相当多的开销晶体管。特别是在高端,这没有任何意义,因为GPU IP自4年前的T860/880系列以来就没有改变过执行引擎的数量。
新的G77将前几代“小型”执行引擎整合到一个具有共享控制逻辑的较大的IP块中。新引擎的IP设计仍然存在一些重复:实际的ALU流水线被组织成两个“集群”,每个集群都有自己的16-wide FMA单元以及相应的执行单元。
新ISA的一部分是一种新的编码,它比我们在Bifrost中看到的更加规则。Valhall架构的一个重要新特性是,新ISA摆脱了固定的问题调度、子句和元组。在Bifrost中,Arm将指令的调度委托给编译器,将它们分组到所谓的子句中。这在实践中是有效的,尽管它在编译器上花费了大量的工作来获得最佳的结果,并试图隐藏指令和数据访问之间的延迟。
在ValHall中,调度完全由硬件完成,这本质上更类似于无序CPU的工作方式。这种新设计还意味着实际的ISA与实现的微架构更加脱节,这是一种更具前瞻性的设计选择。
新的ISA还将重点放在优化纹理指令上,这与新架构大幅增强的纹理能力有关。
其他变化包括对现有技术的增量更新和数据结构的演变,其中包括对几何流的优化和对AFBC(ARM帧缓冲压缩)的优化。
我们深入研究了执行引擎的结构,发现该结构一般可以分为四个模块:包含有warp调度和I-cache的前端、两个相同的数据路径集群(处理单元),以及连接到加载/存储单元和固定功能块的消息块。
前端支持多达64个warp或1024个线程。每个处理单元都有三个ALU:FMA和CVT(Convert)单元是16-wide,而SFU(特殊功能单元)是4-wide。
前端创建和撤消warp,并保持必要的状态。在前端内有一个动态调度程序,它决定每个warp执行哪些指令。等待dependency 的warp将替换为准备执行的warp。
I-cache在处理之间共享,是16KB(2048指令)4路组相联(4-way set associative),根据带宽每个周期能够发出4条指令。
在实际的处理单元(集群)中,我们有四个提取单元发出到算术单元中。每个提取单元都有一个紧密耦合的寄存器文件,以及一个减少访问寄存器文件的延迟的转发缓冲区。
FMA ALU每周期支持16个FP32 FMA,是FP16的两倍,也是INT8 dot产品的两倍。convert单元处理基本整数操作和自然类型转换操作,并充当分支端口。
SFU是4-wide而不是16-wide,因为它处理不太常用的指令,不需要那么大的吞吐量。
总体而言,通过在Mali-G77与Mali-G76的执行引擎之间进行更高级别的比较,我们看到了单引擎同三个引擎的对决。单引擎在主数据路径上有更多实体,而控件和I-cache的实体更少,从而提高了整个块的区域效率。
ALU延迟方面的一个重要变化是,数据路径现在是4-cycle的深度,而不是以前的8-cycle,这可以在不进行链式操作时提高性能。
同样,新核心具有类似超标量的发布,而不是过去的桶形流水线设计,在过去的桶形流水线设计中,流水线必须对上述延迟做出适当的妥协。这一变化也是新编译器被大大简化的原因之一,因为它不再需要像以前的流水线设计那样同时发出匹配指令。
Mali-G77微架构
前文介绍完了负责算术处理的执行引擎,这一节的微架构只是更宽的核心设计的一部分。此处,Arm通常保持了与上一代GPU非常相似的总体设计,但是在几个区块中有一些重要的变化。
着色器核心仍然包含执行引擎、带有缓存的加载/存储单元、属性单元、变化单元、纹理映射单元和像素后端,以及其他各种3D固定功能块。
这里最大的变化是纹理单元块,与我们在Mali-G76上发现的已经加倍的单元相比,它的吞吐量翻了一番。
从高级功能的角度来看,新的TMU看起来与其前代产品非常相似,但是我们发现新设计在吞吐量方面有一些非常重要的变化。
该设计被分成两条“路径”,一条命中路径(hit-path)和一条未命中路径(miss-path),它们可以处理缓存内部或纹理缓存外部的“未命中”(miss)。命中路径自然是一种更短的、经过延迟优化的路径。
在命中路径上,纹理缓存本身已得到改进,现在是32KB,并且能够达到16 texel/cycle吞吐量。滤波单元也得到了改进,其吞吐量也得到了提高,现在双线性纹理每cycle支持一个四边形,三线性纹理每cycle支持半个四边形,两者都是G76吞吐量的2倍。
有趣的是,Arm表示,新的TMU与之前的TMU大致相同,但仍能实现能力翻番,堪称极为优秀的工程壮举。
从根本上说,核心纹理能力的这种大幅增加改变了ALU,即GPU的Tex比率。尽管ALU能力提升了33%,但TMU吞吐量翻番意味着我们现在回到了一个更低的比率,更倾向于纹理吞吐量,而过去的GPU专注于提高计算性能。Arm认为这是一个必要的改变,因为现在的工作负载开始加重GPU在这方面的负担。
需要注意的是,虽然纹理过滤吞吐量增加了,但是实际像素后端吞吐量没有增加。这里的着色器核心仍然只能为每个时钟绘制2个像素,因此我们现在的texel(像素比率)是2:1,而在过去它仍然是1:1。
着色器核心块中的另一个重新设计是新的加载存储缓存块。从功能上讲,它与过去一样,但是现在经过重新设计,考虑到了更多的吞吐量。在同一区域内,流水线阶段的数量减少了一半,进一步降低了核心操作的延迟。带宽已被扩大到全cacheline宽度,这应该是其前身的两倍。
实际的缓存大小为16KB,4路组相联(4-way set associative),据说对于机器学习工作负载非常有用。
将所有的部分放在一起,并从着色器核心缩小到GPU级别,我们再次看到了Arm将全部的模块组织到一起的方法。该架构支持将着色器核心从1核扩展到32核,尽管G77的微架构目前仅支持16核。此外,Arm目前为RTL准备的最小的设计是7核配置,使用不同的IP(例如G52,或者未来在相同范围内的未推出的IP)可以更好地为客户提供较小的配置。
L2缓存仍然由四个部分组成,每个片的大小从256KB到1MB不等。目前,大多数供应商都采用2MB配置,我认为没有任何被授权方实现过4MB配置。在带宽方面,L2到LSC的带宽也从32B/cycle增加了一倍,达到64B/cycle(一个完整的cacheline),而外部带宽则取决于供应商为L2的每个部分实现128位还是256位AXI接口。
性能目标:提高30%的PPC和效率
从纸面上看,新的Valhall架构和新的Mali-G77看起来确实是一个很大的变化,但更重要的是知道Arm宣称的性能、效率和面积如何。
Arm的性能声明非常有趣,因为Arm公布的性能是基于每mm²。基于供应商实现他们的GPU的方式,他们可以改变核心数量以及频率,实际上很难给出一个清晰的数字来描述两个独立GPU配置之间的改进。对于G77,Arm声称新IP能够提供比G76的每mm²性能提高1.2~1.4倍。就绝对值而言,G77着色器核心的大小据说与G76核心的大小相同。
这意味着这可以直接为供应商转换成更小的GPU,或只是更多的空间,以增加额外的GPU核心,从而提高性能。特别是,Arm声称G77在纹理重的游戏中表现得非常好,因此,关注器件实际的样子,以及不同工作负载的表现将是一件有趣的事情。
另一种提高性能的方法是提高GPU的时钟。这里的根本限制是智能手机的4~5W TDP限制。在ISO流程和性能方面的比较中,据说新的G77使用17%~29%的能源和功率来完成同样的工作负载。或者换言之,性能/W提高了1.2~1.39倍。Arm表示G76和G77之间的基本频率根本不会发生太大变化,内部Arm的目标仍然是850MHz。
今年我不打算尝试任何性能和效率预测,因为有太多的变量在发挥作用。我预计,明年更大的变化之一是SoC将支持LPDDR5,这可能会显着改变智能手机的功率动态。
Arm的确指出,他们预计明年使用G77的SoC性能将提高1.4倍。以三星的Exynos9820作为G76的参考,这意味着未来的G77 SoC将以更高的功率效率(假设维持功率水平不变)接近苹果的A12 GPU性能。这将使高通陷入麻烦,因为它将明显超越当前一代Adreno 640,但我们预计高通也将推出新一代GPU。
G77的机器学习性能是Arm引以为豪的。这不仅仅是因为内核的处理单元数量增加了33%,而且LSC的设计和带宽也有了很大的改进,这使得G77的推理性能比G76提高了1.6倍。
最后,Arm对最近两代Mali GPU进行了代际比较。在相同的工艺和相同的性能下,新的G77继续实现30%的同比能效改进,并且比Mali-G72节省50%的能源。
结论
在TechDay活动期间,Arm显然对新的Valhall架构和新的Mali-G77感到非常兴奋。他们非常有理由感到兴奋,因为看起来Arm似乎将展示Mali GPU IP的重大代际飞跃。
新的G77采用了一种全新的架构,从根本上改进了ARM的执行核心,旨在实现更现代的、符合台式计算机GPU的架构。这似乎是一个长期的转变,虽然G76是一个相对较好的GPU,但前代的G72和G71不是。
我期待今年晚些时候和明年年初在下一代三星Exynos和海思Kirin SoC中看到Mali-G77。从理论上讲,如果一切顺利,G77应该能够缩小与苹果和高通在性能和效率方面的差距。尤其是G77应该能够超越高通的Adreno GPU,至少是当前一代的Adreno。
我对此相当乐观,现在Arm和被授权的合作伙伴只需要正确地执行,就可以让用户享受最终成果。