前两天,ARM在Computex 2019大会上宣布推出新一代Cortex-A77 CPU新架构,随之而来的还有Mali-G77 GPU。ARM Mali GPU一直以来相较高通Adreno和苹果A系GPU,都属短板,这让三星和华为始终在图形计算能力,尤其是游戏表现上比较尴尬。甚至前两年就有传言说华为的自研GPU很快会上线,对Mali的嫌弃并不是一天两天了。
不过今年的Mali-G77换了新的Valhall架构,执行核心和ISA都发生了较大的变化——考虑到去年G76已经很大程度拉进了Mali与Adreno在性能和能效方面的距离,今年的G77就格外受人关注了。三星和华为手机终于要摆脱GPU孱弱的帽子了吗?
预期:靠近苹果,赶超高通?
由于Mali-G77尚无成品上市,现在只能看ARM给定的纸面数据,并参考去年G76的成绩,以此来看G77当前的水平层级。ARM宣称,G77相比G76在每mm²的性能方面提升1.2-1.4倍,或者说“性能密度”提升30%,以及能效提升30%(每瓦性能提升1.20-1.39倍),还有机器学习性能提升60%。
不同的厂商对于具体的GPU实施方案会存在差别,比如频率、核心数等,所以ARM提供了性能密度提升数据作为参考。Mali-G77 GPU预期在未来的制程工艺方面并不会有多大提升,不过性能密度和能效提升自然也就意味着GPU还可以做得更小,或者说可以塞进更多核心。
考虑到整个系统未来更多的提升,如LPDDR5,ARM认为未来采用Mali-G77的设备将在峰值图形性能方面提升40%。这里提升的40%,理应对应于G76,那么我们就可以来看一看G76是什么水平。
一般来说,历代Mali GPU在具体实施时,抛开GPU Turbo不谈,三星Exynos在硬件层面的绝对性能和能效方面是优于海思Kirin的。所以我们看看应用了Mali-G76的Exynos 9820当年的表现如何。
参考外媒AnandTech针对三星Galaxy S10的测试成绩——这款手机恰好有骁龙855和Exynos 9820两个版本。从GFXBench测试子项的曼哈顿3.1和霸王龙2.7测试中,Mali-G76和Adreno 640在峰值性能、持续性能,以及能效(每瓦帧率)方面都比较接近,虽然前者相较后者略有不及。
来源:AnandTech,其中A12分成Warm和Cold,其中Warm是指持续跑测试项目至少3分钟后,在性能下降后测得的成绩,这个状态下的功耗成绩会相对合理
Mali-G76实际上相比G72就已经完成了一次能效和性能飞跃,而且G76终于换掉了Midgard时代的texture单元,让Mali在游戏画质上终于达到与Adreno同一水准。那么如果G77的确像ARM宣称的那样,性能和能效都提升20%-40%,这对高通而言就是个大麻烦。要知道在G72时代以前,高通可是远远将Mali甩在身后的。或者说,在未来的G77手机设备中,三星和华为可能将彻底摆脱GPU孱弱的噩梦,只要芯片制造商能够按照ARM的实施方案去做。
不过按照40%的上限来看,大致上也就是刚刚达到苹果A12的水平,包括性能和能效。所以G77赶超高通是没问题的,但要赶超苹果,恐怕还得加把劲儿。
Valhall架构:改了什么?
做到这个程度的性能和能效飞跃,可以从Valhall执行核心,以及Mali-G77微架构层面的调整说起,尤其是前者。ARM官方提到,Valhall包含了这些特性:
- 新的超标量引擎,这是能效和性能密度提升的关键;
- 简化的标量ISA,新的指令组对compiler(编译器)更友好;
- 新的指令动态调度;
- 配合如Vulkan之类的当代API,采用新的数据结构。
实际上,Valhall架构的本质在新的执行核心。前代Bifrost架构是4-wide和8-wide设计,G72核心部分的执行模块就包含4-wide标量SIMD单元,warp size为4;G76则增加到两个4-wide单元,warp size为8。warp是GPU的最基本可调度单元,SIMD过程中数据处理的最小单位;在所有线程中,同时执行同一指令。
这种比较窄的warp设计,致使工作无法有效填充足够的线程。而Valhall则将warp执行模型增加到了16-wide,这样一来,ALU单元的利用率会提升。这是在向桌面级GPU靠拢的节奏。这也是ARM在PPT中反反复复宣传的核心所在,我们认为这也是G77完成性能提升和多场景应用的关键。
另外就是执行引擎从早前的3个,合并为更大的一个。不过实际ALU管线仍然由两部分构成,每部分有各自的16-wide FMA相应单元。类似Bifrost这样的三引擎设计,每个执行引擎都有各自的数据路径控制逻辑、scheduler、指令缓存等,这已经是比较老的设计方案了,相对也更浪费资源,节省空间。
除此之外,就新的ISA,Bifrost以往调度(fixed issuing)是依托于compiler的,而Valhall则降低了compiler的负荷;新版的ISA还对texture指令做了优化;针对AFBC(ARM帧缓冲压缩)的优化等。
深入到执行引擎微架构内部,其中共有四个模块,前端包括warp scheduler和16KB的指令缓存,两个处理单元,还有连接加载/存储单元和一些固定功能模块的Message Block。前端支持最多64 warp/1024个线程;执行单元中有三个ALU,分别是FMA、CVT(转换单元,用于基本的整数操作和类型转换)和SFU(特定功能单元,这个单元的warp为4-wide,因为相对比较少用),这种“超标量”发射的核心变化也就相应实现了compiler的简单化。
在执行引擎之外,shader核心在微架构层面的变动其实是不大的,其中尤为值得一提的是shader核心内部的TMU(纹理贴图单元),其吞吐能力相较Mali-G76翻番(命中路径吞吐翻番、未命中路径吞吐也翻番)。Texture缓存增加到32KB,也就能够达到16纹素/周期的吞吐。过滤单元吞吐也增加了,达到了G76的两倍。
不过这样一来,ALU相较texture过滤也就不是均衡分配的关系了,ARM认为当代的图形工作任务负载是需要这种变化的。ARM宣称,G77在texture重度游戏中的表现会很好。
再从shader核心之外来看,就不同芯片厂商可以为Mali-G77 GPU配备7-16个shader核心(每个核心一个执行引擎);L2缓存最多可以切分成4块,总体最多4MB大小。这些就要看不同厂商的设计了。
强化的更多应用场景:AR、ML
GPU执行神经网络引擎的推测(inference)其实并不稀罕,不过ARM这回专门拿出来谈了谈。ARM在社区文章中反复宣传其16-wide warp和一个执行引擎内的两簇设计,每个核心每个执行引擎都有16-wide FMA单元。如前文所述,这大概是本次计算性能相较G76提升的根本所在。另外加载/存储缓存(LSC)也有加强设计,这些带宽方面的加强对于推动本地推测执行性能都有益处,本身也迎合edge AI的趋势。
在此基础上,将Mali-G77应用于更为复杂的显示增强和机器学习场景——这都是对并行计算要求更高的场景,也就有了依据。不过在这些应用场景上,G77乃至Vallhall都可能只是个开始。
这么看来,今年的手机市场可能会更有意思,尤其华为在补齐GPU短板后,高通到底还能不能使出什么杀手锏呢?
- 传说中那个降画质的?
- 纯nt,今年虽然没打过苹果,但已经超了骁龙
- 3年前不就是高通吓尿,苹果怂了最强国产