Cortex-A76是2018年的亮点产品,无论是高通还是华为,都利用这个先进的架构设计出了极为出色的产品,使得移动计算设备的性能又大大向前推进了一步,并且依旧保持了极高的能耗比。在2019年,ARM并没有松懈下来,而是进一步推出了全新Cortex-A77架构。这一全新架构,不但带来了更为显著的性能提升,同时也很好地控制了设备功耗,值得细细解读。
Cortex-A77是一个全新的架构。和之前《微型计算机》曾介绍过的内容相关联的是,Cortex-A77是属于奥斯汀家族的第二款产品。这一架构将在2019年年末或者2020年年初正式被应用在许多新的SoC上。今天,本文就要详细地分析一下这款产品的性能和架构情况。
“畏惧之神”登场
代号Deimos的Cortex-A77
ARM在架构发布的节奏上维持了一年一个新架构的模式,所以全新Cortex-A77架构的突然发布并没有令人感觉意外。实际上在更早的时候,像是去年8月,ARM就曾预告了将在2019年发布一款全新的、代号为“Deimos”的架构,并会采用7nm工艺进行制造。说起“Deimos”这个词,其实是指希腊神话中战争之神阿瑞斯和爱神阿芙洛狄忒的儿子,被称为畏惧之神。
▲ARM发布了Cortex-A77架构
此外,ARM还顺便公布了接下来在2020年会出现的架构代号“Hercules”,中文为赫拉克勒斯,这个名字的来源是古希腊神话中主神宙斯和阿尔克墨涅之子,象征大力士。
名字起得光芒万丈,相应的实力自然也不能落在人后。ARM在发布这些内容和络线图的时候,还顺便调侃了一下英特尔。在ARM展示的对比图中,英特尔的处理器架构在SPECint 2016的测试中,从2013年后的Core i5-4300U开始,一直到2017年的Core i5-7300U,工艺虽然从22nm一路进化到14nm,但是其在实际性能方面的增长幅度相当有限。
▲ARM近年来在性能提升上显得颇为积极
相比之下,ARM选择的节点是2016年发布Cortex-A73之后,直到即将到来的2020年的Hercules架构,ARM预计会带来2.5倍的性能提升。也就是说,每一代奥斯汀系列的处理器相比前代产品,都会有20%~25%左右的性能提升。
▲ARM宣称Cortex-A77将带来20%以上的整数性能提升
从目前ARM的产品来看,Cortex-A76这一代可以说是遇到了最好的时候。相当出色的架构设计加上7nm工艺的应用,使得其最终在实际SoC产品上相比上代产品展现出了巨大的性能跃升。比如基于Cortex-A76架构的骁龙855处理器相比前代骁龙845处理器的性能提升最多可达45%。尤为值得一提的是,如此巨大的性能提升却并没有过多影响电池效率,甚至由于新工艺和架构,还带来了设备电池寿命的延长。
▲Cortex-A76的整体性能表现令人满意,测试数据来自AnandTech。
▲Cortex-A76架构的产品在PPA上表现非常出色,图为麒麟980处理器。
不过这并不意味着ARM在市场上已经没有对手了,虽然其中一个竞争对手三星的M4处理器表现不佳,但真正的对手苹果所拿出的A11和A12处理器相比ARM的产品依旧具有极大的性能优势和效率优势,大约相当于两代微架构的领先幅度。当然,这也可以说是因为苹果选择的路线和ARM不同,ARM总希望以更小的芯片面积获取更大的性能提升,而不像苹果那样可以使用尽可能大规模的产品。当然很大程度上这样的选择是来自ARM的客户和市场,而不是它本身。
Cortex-A77
架构概述
从产品研发的代次上来看,Cortex-A77是Cortex-A76直接的继承者,这意味着新的架构和上代产品基本保持一致。ARM表示,Cortex-A77只需要简单地升级SoC IP即可部署,并不需要推倒重来。
对应到实际产品上,Cortex-A77和Cortex-A76一样,依旧使用了ARMv8.2的CPU核心,支持AArch32和AArch64。在多核心设计方面,Cortex-A77依旧支持DSU(DynamIQ Shared Uint),以实现和较小的Cortex-A55单元配对。基本架构配置上,Cortex-A77依旧支持64KB L1指令和数据高速缓存以及256KB或者512KB的L2高速缓存。
▲Cortex-A77架构总览
有趣的是,ARM在Cortex-A77的L2缓存设计上选择的是较小容量的方案,因为其面向基础设施的Neoverse N1处理器架构采用的是1MB的L2缓存,这款处理器本身架构来自Cortex-A76,这可能意味着ARM在处理器配置上有更多独特的想法。
▲Cortex-A77的架构目标
依照经验来看,作为Cortex-A76架构的演变,从微架构角度来看,Cortex-A77的性能提升幅度应该不算很大,从绝对性能角度来看也应该是这样,毕竟工艺在这个时间节点并没有大幅度提升。绝大部分Cortex-A77的产品依旧会采用7nm工艺,ARM宣称Cortex-A77的峰值频率和前代Cortex-A76一样,都是3GHz。如果真是这样的话,Cortex-A77可能并没有太多出彩的地方。
但是根据ARM发布的路线图显示,Cortex-A77能够带来相比前代产品20%的性能提升。考虑到它在工艺和频率上都没有太大变化,这意味着Cortex-A77的架构将有明显变化,IPC得到了显著提升。实际上,ARM重新设计了Cortex-A77的架构体系,引入了大量的智能功能,从而在工艺和频率不变的情况下,带来了高达20%的性能增长。
Cortex-A77微架构解读
高达6发射的前端设计
Cortex-A76是一个全新的设计,ARM在其中凝聚了多年来进行CPU设计的知识和经验教训,使得这款核心成为一个在微架构方面具有前瞻性的优秀设计。Cortex-A76成了奥斯汀家族接下来两款架构设计的基准,包括今天要介绍的Cortex-A77以及明年的“Hercules”架构。
▲Cortex-A77微架构总览
Cortex-A77的目的是增加微体系结构的IPC,ARM这一代的目的是依旧保持最佳的PPA,这意味着设计人员的目标是在尽可能提高核心性能的同时,保持Cortex-A76架构下出色的能效比和恰到好处的核心面积大小。另外,Cortex-A77的核心频率峰值依旧是3GHz。
从微体系架构整体来看,Cortex-A77的改进几乎触及了核心的所有部分。从前端开始,ARM采用的新设计包括:采用了更大带宽的前端,分支预测能力加倍,一个全新的MOP缓存结构用于L0指令缓存,更宽的指令解码/重命名/分配单元(简称为“解码单元”,也被简称为“核心中部单元”),解码器宽度增加50%,全新的整数ALU管道和改进的加载/存储队列,新的发布功能等。
▲Cortex-A77引入了MOP缓存结构
先来看看前端部分。Cortex-A77的前端部分最大的变化来自分支预测单元,其带宽从32B/周期翻倍至64B/周期。这种设计的原因通常是为了配合更宽以及更高性能的前端,并且也需要一个强大的分支预测单元以配合更强大的指令解码/重命名/分配单元。
▲Cortex-A77的前端设计,大幅度增强了分支预测性能。
ARM的指令是32位宽度的(Thumb是16位宽度),这意味着每个分支预测器每个周期可以获取16个指令。这是解码单元宽度的2.6倍之多,并且这种不平衡的设计主要是考虑到核心中出现分支气泡时,前端和分支预测单元能够尽可能快地赶上核心的速度。
分支预测单元的设计也发生了变化,主要是降低了分支预测的错误并提高了准确性。实际上,在Cortex-A76上已经有了非常大的分支目标缓冲容量(6KB),但是在新的Cortex-A77上,ARM将这个数据提高了33%,具体容量为8KB。此外在结构上,ARM已经放弃了在Cortex-A77之前使用的BTB层次结构,Cortex-A76拥有一个16入口的nanoBTB和一个64入口的microBTB,在Cortex-A77上已经被一个64入口的L1 BTB取代了,延迟为1个周期。
新前端的另外一个主要的特性是引入了Macro-Op缓存结构。这种结构在AMD和英特尔的处理器上已经广泛使用了,类似于内核中的uOP/MOP缓存结构,实际上它们的功能类似。在Cortex-A77中,新的MOP缓存实际上是用于L0指令缓存,包含了已经解码和融合的指令(宏操作),其架构采用的是1.5K entry。假设宏操作具有和ARM指令类似的32位密度,那么其体积则为6KB。
ARM在Cortex-A77的缓存设计中,其独特之处在于和解码单元的深度集成。在指令融合和优化之后,高速缓存以解耦方式在解码阶段被数据填充。在高速缓存命中的情况下,前端可以直接将数据从宏操作高速缓存中发送至解码单元执行部分的重命名阶段,这相当于削减了核心的有效管道循环的深度,更浅的管道可以在一定程度上提高性能效率,并且这也意味着分支预测错误的延迟能够从11个周期减少至10个周期,即使它具有13个周期的频率能力(包括一个解码周期、一个分支/拾取周期、一个dispatch和issue周期)。相比之下,其他核心的误判率更高一些,比如三星M3、AMD Zen 1、Skylake等处理器大约是16个周期,在这一点上ARM的表现非常出色。
ARM为使用1.5KB条目缓存给出了相应的理由:其目标是在测试套件工作负载上需要达到85%以上的命中率。如果这个缓存容量过小的话,命中率会显著降低,但是如果缓存容量过大的话核心面积等综合收益情况反而会降低。对于64KB L1缓存,1.5MOP缓存大小大约是其面积的一半,比较合理。
此外,MOP缓存还允许为解码单元带来更高的带宽。该结构能够在重命名阶段提供64B/周期的数据处理能力,再次明显高于解码单元的重命名和调度模块,并且这种不平衡的设计和更大的前端带宽使得核心可以隐藏分支泡沫和流水线刷新所带来的延迟。
ARM还谈到了“动态代码优化”。这个功能将允许代码重新安排,并更好地适应后端执行流水线。值得注意的是,这里的“动态”并不意味着它是可编程的(比如英伟达的“丹佛”架构),而是指其逻辑固定在核心的设计之上。
最后再来看看解码单元部分,Cortex-A77核心带宽得到了大幅度提升。和人们预料的不同,Cortex-A77的解码单元部分的解码器宽度依旧是4发射,而不是传言中的6发射。解码单元宽度从重命名阶段开始增加宽度,核心仍然获取6条指令,但是这种带宽仅仅在MOP缓存命中的情况下才发生,然后绕过解码阶段。在MOP高速缓存未命中的情况下,限制因素依旧是指令解码器,每个周期4个指令被解码。
▲Cortex-A77的指令解码/重命名/分配单元
增加的宽度还带来了解码单元重新排序缓冲区的增加,已经从128个条目增加至160个条目。值得注意的是,高通采用的修改版本Cortex-A76已经采用了类似的设计,但条目数量未知。另外,由于ARM依旧负责RTL更改,如果采用了160入口的ROB设计,这也是很正常的。
Cortex-A77微架构解读
ALU加强和更好的负载/存储设计
在对Cortex-A77的前端和核心中部的解码单元进行解读之后,我们再来看看对性能至关重要的后部计算单元部分。
在这里,ARM为Cortex-A77的整数执行端增加了第二个分支端口,这与前段加倍的分支预测器是一致的,此外它还具有额外的整数ALU单元。这个新的整数ALU单元比较特殊,它的计算能力介于一个简单的单周期ALU和现有复杂的ALU单元之间:它自然已经具有单周期ALU单元操作的能力,同时也能够支持更复杂的2个周期操作,包括一些位移组合指令、逻辑指令、移动指令和测试/比较指令等。
▲Cortex-A77的执行单元部分
ARM表示,新的管道增加带来了惊人的性能提升,随着核心变得越来越大,后端可能成为瓶颈,这就使得执行单元需要与核心中的其他部分一起变强。
执行核心另一个更大的变化是问题队列的统一。ARM解释这样做是为了通过增加执行端口来维持核心的效率。
最后,现有的执行管道没有看到太多变化,其中比较值得关注的是一个复杂整数ALU上的整数乘法单元的流水线操作延迟改进。这个改进允许其实现2~3个周期的操作,目前是4个周期。
此外,ARM没有提到Cortex-A77有在浮点和ASIMD流水线上进行任何改进。有可能之前Cortex-A76的设计已经足够出色了,因此ARM在Cortex-A77上将架构改进的重点集中在了处理器的其他部分。
接下来看看有关缓存和其他单元部分。Cortex-A77的加载和存储单元方面依旧是2个单元设计,但是ARM为其添加了2个额外的专用存储端口,这实际上使得读取/存储所使用的issue端口的带宽增加了一倍。这意味着读取/存储带宽为4宽度,具有2个地址生成的uOps和2个存储数据的uOps。在指令排队方面,ARM将其容量增加了25%,这样可以实现更多内存及并行,提高效能。
▲Cortex-A77的缓存部分设计
为了进一步隐藏系统的内存延迟,数据预取就显得非常重要了,这个部分能够通过减少等待周期进而大幅度提高性能。在之前的Cortex-A76上采用的新预取器在性能上非常出色,能够处理一些复杂情况下数据预取的问题。实际上Cortex-A76的预期性能远远超过目前已测试过的任何其他微体系结构,这是一个非常了不起的成绩。
在Cortex-A77上,ARM进一步改进了预取器,添加了新的额外预取单元,以进一步改善数据预取性能。ARM对技术细节没有透露太多,但是保证增加了模式覆盖范围以提高预取准确程度。其中一个改变被称为“增加最大距离”,这意味着ARM的预取器将在更大的虚拟存储器距离上识别重复的访问模式,尽可能提高性能。
▲Cortex-A77改进了预取器设计
Cortex-A77中增加的另一个有关数据预取的功能是“系统预取感知”,在这里,ARM试图解决在不同的系统负载中必须使用单个IP的问题,其中某些系统可能具有更好或者更差的内存特性,比如延迟等。为了处理内存子系统之间的差异,新的预取程序将根据当前的系统行为方式改变其工作模式。比如在一些DVFS条件下,这可能意味着一些有趣的性能改进,比如预取功能将根据当前内存的频率改变其预取的结果等。
这种新的感知系统的优势在于可以更多地缓解DSU的L3缓存压力。比如如果其他CPU核心处于高度活跃状态,核心预取程序能够看到这一点并降低其工作强度,以避免不必要的破坏共享缓存,从而提高整体系统性能。
Cortex-A77的性能
IPC改善20%~35%
最后再来看看Cortex-A77的性能。ARM公布了一些数据,显示了Cortex-A77在性能上的提升,其采用的测试软件依旧是SPEC 2006、SPEC 2017、GeekBench4和LMBench内存带宽测试。其中的测试重点放在SPEC 2006上,因为它依旧是移动设备中最典型的基准测试。
在SPECint 2006上,Cortex-A77承诺IPC的增长会在23%左右,但SPECfp 2006则增加了高达35%。整数工作负载的增加或多或少与CPU内核的改进一致。但是FP部分增加30%~35%则完全出乎意料,尤其是没有任何有关FP执行单元变化的资料和说明。其中一种解释是SPEC的FP测试套件比整数测试套件更加占用内存,而Cortex-A77能够在这种高负载情况下提供更好的性能。
▲Cortex-A77的性能预测,对比对象是Cortex-A76。
在频率方面,由于Cortex-A77的工艺节点和Cortex-A76基本一样,因此最终频率表现不会有什么大的变化。目前诸如麒麟980和骁龙855这样的处理器最终的频率落点大约都在2.6GHz~2.8GHz左右,因此Cortex-A77可能也不会在这个数据上提升太多。虽然ARM又提到Cortex-A77可能会工作在3GHz的频率下,但综合诸多因素,新处理器的频率设定可能不会有太大的进步。
在这个频率范围内,最终可以看到Cortex-A77的整数部分性能得到了一些提升,同时浮点结果就更值得关注了,它将超过苹果A11的浮点性能。不过考虑到产品上市时间,Cortex-A77将面对的是苹果A13和三星的下一代M5处理器,尤其是前者,会以更强的态势出现。
在能耗比方面,ARM承诺新的处理器会和Cortex-A76完全一致。因此在峰值性能时,两个处理器将耗费相同的电能来完成设定的工作负载。但是Cortex-A77有一个缺点,那就是功率增加和性能数据增加呈线性关系,比如核心功耗在峰值频率下会大幅度增加,其数值可能会超过普通状态下2个以上核心的耗电量,这对移动设备来说是非常敏感的。不过值得庆幸的是大多数的SoC厂商都注意到了这一点,将4个全速的大核心改为2+2设计或者1+3设计,其中只有1个或者2个高频率的高功耗核心。
▲Cortex-A77架构带来了显著的性能提升
最后需要说明的是,在相同代次的工艺下,Cortex-A77的核心面积依旧比Cortex-A76大17%,这会带来一些成本的上升,但是依旧比竞争对手的核心面积小了很多。
Cortex-A77
坚实的一小步
下面又到了总结时间。从Cortex-A77的架构其实不难看出,其变化并没有去年发布的Cortex-A76那么大。不过这是建立在Cortex-A76是一个非常成功的核心,几乎实现了ARM所有的承诺并且运行效率相当高效的基础上。不仅如此,Cortex-A76还具有出色的PPA,这也是各大SoC厂商所看重的。
Cortex-A77在Cortex-A76的基础上进行了一些改进,带来了核心IPC的显著提升。其一大惊喜就是浮点性能提升高达30%~35%,虽然ARM没有在这方面有任何表示,但这样巨大的性能提升最终会反映到实际应用上。一般来说,移动网络浏览是浮点应用的大杀器,未来Cortex-A77将会在这方面表现更加出色。除了浮点性能外,即使在整数性能上,20%~25%的IPC提升也绝对是惊人的改进。整体性能表现值得称道。
▲AnandTech制作的Cortex-A77性能预测图
在功耗方面,Cortex-A77的功耗可能相比Cortex-A76会略有上升,但从业界对处理器设计的一些新观点来看,新的SoC使用的处理器配置已经变成“大核心+中核心+节能核心”的方案,在功耗控制上应该不会有太大问题。
最后来看看制造和产品。Cortex-A77的两大客户相信会是华为海思和高通骁龙,工艺为7nm,我们将在下半年或者明年年初逐渐看到这些产品上市。到时候就能检验ARM宣称的每年20%~25%的复合增长率是否能够实现了。