Cortex-A76是年的亮点产品,无论是高通还是华为,都利用这个先进的架构设计出了极为出色的产品,使得移动计算设备的性能又大大向前推进了一步,并且依旧保持了极高的能耗比。在年,ARM并没有松懈下来,而是进一步推出了全新Cortex-A77架构。这一全新架构,不但带来了更为显著的性能提升,同时也很好地控制了设备功耗,值得细细解读。
Cortex-A77是一个全新的架构。和之前《微型计算机》曾介绍过的内容相关联的是,Cortex-A77是属于奥斯汀家族的第二款产品。这一架构将在年年末或者年年初正式被应用在许多新的SoC上。今天,本文就要详细地分析一下这款产品的性能和架构情况。
“畏惧之神”登场
代号Deimos的Cortex-A77
ARM在架构发布的节奏上维持了一年一个新架构的模式,所以全新Cortex-A77架构的突然发布并没有令人感觉意外。实际上在更早的时候,像是去年8月,ARM就曾预告了将在年发布一款全新的、代号为“Deimos”的架构,并会采用7nm工艺进行制造。说起“Deimos”这个词,其实是指希腊神话中战争之神阿瑞斯和爱神阿芙洛狄忒的儿子,被称为畏惧之神。
▲ARM发布了Cortex-A77架构
此外,ARM还顺便公布了接下来在年会出现的架构代号“Hercules”,中文为赫拉克勒斯,这个名字的来源是古希腊神话中主神宙斯和阿尔克墨涅之子,象征大力士。
名字起得光芒万丈,相应的实力自然也不能落在人后。ARM在发布这些内容和络线图的时候,还顺便调侃了一下英特尔。在ARM展示的对比图中,英特尔的处理器架构在SPECint的测试中,从年后的Corei5-U开始,一直到年的Corei5-U,工艺虽然从22nm一路进化到14nm,但是其在实际性能方面的增长幅度相当有限。
▲ARM近年来在性能提升上显得颇为积极
相比之下,ARM选择的节点是年发布Cortex-A73之后,直到即将到来的年的Hercules架构,ARM预计会带来2.5倍的性能提升。也就是说,每一代奥斯汀系列的处理器相比前代产品,都会有20%~25%左右的性能提升。
▲ARM宣称Cortex-A77将带来20%以上的整数性能提升
从目前ARM的产品来看,Cortex-A76这一代可以说是遇到了最好的时候。相当出色的架构设计加上7nm工艺的应用,使得其最终在实际SoC产品上相比上代产品展现出了巨大的性能跃升。比如基于Cortex-A76架构的骁龙处理器相比前代骁龙处理器的性能提升最多可达45%。尤为值得一提的是,如此巨大的性能提升却并没有过多影响电池效率,甚至由于新工艺和架构,还带来了设备电池寿命的延长。
▲Cortex-A76的整体性能表现令人满意,测试数据来自AnandTech。
▲Cortex-A76架构的产品在PPA上表现非常出色,图为麒麟处理器。
不过这并不意味着ARM在市场上已经没有对手了,虽然其中一个竞争对手三星的M4处理器表现不佳,但真正的对手苹果所拿出的A11和A12处理器相比ARM的产品依旧具有极大的性能优势和效率优势,大约相当于两代微架构的领先幅度。当然,这也可以说是因为苹果选择的路线和ARM不同,ARM总希望以更小的芯片面积获取更大的性能提升,而不像苹果那样可以使用尽可能大规模的产品。当然很大程度上这样的选择是来自ARM的客户和市场,而不是它本身。
Cortex-A77
架构概述
从产品研发的代次上来看,Cortex-A77是Cortex-A76直接的继承者,这意味着新的架构和上代产品基本保持一致。ARM表示,Cortex-A77只需要简单地升级SoCIP即可部署,并不需要推倒重来。
对应到实际产品上,Cortex-A77和Cortex-A76一样,依旧使用了ARMv8.2的CPU核心,支持AArch32和AArch64。在多核心设计方面,Cortex-A77依旧支持DSU(DynamIQSharedUint),以实现和较小的Cortex-A55单元配对。基本架构配置上,Cortex-A77依旧支持64KBL1指令和数据高速缓存以及KB或者KB的L2高速缓存。
有趣的是,ARM在Cortex-A77的L2缓存设计上选择的是较小容量的方案,因为其面向基础设施的NeoverseN1处理器架构采用的是1MB的L2缓存,这款处理器本身架构来自Cortex-A76,这可能意味着ARM在处理器配置上有更多独特的想法。
依照经验来看,作为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的目的是增加微体系结构的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入口的L1BTB取代了,延迟为1个周期。
新前端的另外一个主要的特性是引入了Macro-Op缓存结构。这种结构在AMD和英特尔的处理器上已经广泛使用了,类似于内核中的uOP/MOP缓存结构,实际上它们的功能类似。在Cortex-A77中,新的MOP缓存实际上是用于L0指令缓存,包含了已经解码和融合的指令(宏操作),其架构采用的是1.5Kentry。假设宏操作具有和ARM指令类似的32位密度,那么其体积则为6KB。
ARM在Cortex-A77的缓存设计中,其独特之处在于和解码单元的深度集成。在指令融合和优化之后,高速缓存以解耦方式在解码阶段被数据填充。在高速缓存命中的情况下,前端可以直接将数据从宏操作高速缓存中发送至解码单元执行部分的重命名阶段,这相当于削减了核心的有效管道循环的深度,更浅的管道可以在一定程度上提高性能效率,并且这也意味着分支预测错误的延迟能够从11个周期减少至10个周期,即使它具有13个周期的频率能力(包括一个解码周期、一个分支/拾取周期、一个dispatch和issue周期)。相比之下,其他核心的误判率更高一些,比如三星M3、AMDZen1、Skylake等处理器大约是16个周期,在这一点上ARM的表现非常出色。
ARM为使用1.5KB条目缓存给出了相应的理由:其目标是在测试套件工作负载上需要达到85%以上的命中率。如果这个缓存容量过小的话,命中率会显著降低,但是如果缓存容量过大的话核心面积等综合收益情况反而会降低。对于64KBL1缓存,1.5MOP缓存大小大约是其面积的一半,比较合理。
此外,MOP缓存还允许为解码单元带来更高的带宽。该结构能够在重命名阶段提供64B/周期的数据处理能力,再次明显高于解码单元的重命名和调度模块,并且这种不平衡的设计和更大的前端带宽使得核心可以隐藏分支泡沫和流水线刷新所带来的延迟。
ARM还谈到了“动态代码优化”。这个功能将允许代码重新安排,并更好地适应后端执行流水线。值得注意的是,这里的“动态”并不意味着它是可编程的(比如英伟达的“丹佛”架构),而是指其逻辑固定在核心的设计之上。
最后再来看看解码单元部分,Cortex-A77核心带宽得到了大幅度提升。和人们预料的不同,Cortex-A77的解码单元部分的解码器宽度依旧是4发射,而不是传言中的6发射。解码单元宽度从重命名阶段开始增加宽度,核心仍然获取6条指令,但是这种带宽仅仅在MOP缓存命中的情况下才发生,然后绕过解码阶段。在MOP高速缓存未命中的情况下,限制因素依旧是指令解码器,每个周期4个指令被解码。
▲Cortex-A77的指令解码/重命名/分配单元
增加的宽度还带来了解码单元重新排序缓冲区的增加,已经从个条目增加至个条目。值得注意的是,高通采用的修改版本Cortex-A76已经采用了类似的设计,但条目数量未知。另外,由于ARM依旧负责RTL更改,如果采用了入口的ROB设计,这也是很正常的。
Cortex-A77微架构解读
ALU加强和更好的负载/存储设计
在对Cortex-A77的前端和核心中部的解码单元进行解读之后,我们再来看看对性能至关重要的后部计算单元部分。
在这里,ARM为Cortex-A77的整数执行端增加了第二个分支端口,这与前段加倍的分支预测器是一致的,此外它还具有额外的整数ALU单元。这个新的整数ALU单元比较特殊,它的计算能力介于一个简单的单周期ALU和现有复杂的ALU单元之间:它自然已经具有单周期ALU单元操作的能力,同时也能够支持更复杂的2个周期操作,包括一些位移组合指令、逻辑指令、移动指令和测试/比较指令等。
ARM表示,新的管道增加带来了惊人的性能提升,随着核心变得越来越大,后端可能成为瓶颈,这就使得执行单元需要与核心中的其他部分一起变强。
执行核心另一个更大的变化是问题队列的统一。ARM解释这样做是为了通过增加执行端口来维持核心的效率。
最后,现有的执行管道没有看到太多变化,其中比较值得
转载请注明地址:http://www.1xbbk.net/jwbrc/8367.html