Cortex A76没出生就已被它干掉——三星Exynos M3架构详解
▲点击上方 雷锋网 关注
文 | 任然
来自雷锋网(leiphone-sz)的报道
今年年初,三星发布了Exynos 9810旗舰处理器,其CPU为三星第三代自研猫鼬(Mongoose)架构:Exynos M3。一直以来,外界对于Exynos M3知之甚少,终于在昨天的HotChips会议上,三星官方披露了Exynos M3的详细设计,让外界得以一窥这款超级架构。
据雷锋网了解,三星Exynos 9810刚刚公布时,外界曾普遍认为其在性能方面取得了巨大的飞跃,甚至有数据显示,Exynos 9810的GeekBench单线程得分甚至高达3400+,远超包括骁龙845在内的其他安卓阵营处理器。
三星的架构研发是在德克萨斯州的三星奥斯汀研发中心(SARC,Samsung’s Austin R&D Center)进行的,该中心成立于2010年,目标是为三星的S系列手机研发Exynos系列处理器。
三星的第一代自研架构Exynos M1据说在2012年的某个时候就已经开始设计,历经短短三年研发,Exynos 8890便于2016年首次亮相于Galaxy S7。
Exynos M1是完全从零开始设计的,后续的几代架构自然会把它作为下一步开发的起点。随着Exynos M1的淘汰,SARC团队在2015年第一季度开始使用现有的Exynos M1 RTL着手进行Exynos M3的设计。
Exynos M3最初的定位是一次增量开发,然而在2016年第一季度,开发计划发生了大变动,架构目标被设定得更高,以实现更大的性能提升,原本为增量开发设定的目标被拆分成了Exynos M2(即Exynos 8895处理器)。
Exynos M2在各工作负载上的IPC改进率高达20%,这使得它即便在频率降低了12%的情况下,最终性能仍优于Exynos M1。三星通过在Exynos M2中加入一些原本为Exynos M3设计的特性实现了这一增长目标,而新的Exynos M3设计方案则变得异常激进。
第三代猫鼬架构
对比Exynos M3和Exynos M1可以看到了很多的相似之处,但Exynos M3增加了相当多的扩充。SARC团队将微架构的解码单元从4宽度扩展到6宽度,并为内核新增了一个带有乘法器功能的整数ALU、一个加载单元和一个大幅强化的浮点/SIMD单元,将计算容量提升了三倍之多。
三星从未真正公开过Exynos M2的信息,也没有特定的编译器机器模型与之关联,但在此次HotChips会议上,三星将Exynos M2的乱序提交窗口大小从96修改为100。尽管无法直接进行不同ISA之间的比较,但Exynos M3的乱序提交窗口大小被再次扩展至228,这与Intel的核心设计颇为相似。
值得注意的是,在6月初Arm公布的全新Cortex A76架构信息中,其乱序提交窗口大小为128,比Exynos M3还要小,Arm表示乱序提交窗口增加7%只能提升1%性能,出于平衡性能和面积/功耗的考虑,并没有着重增强这部分设计。
三星则在会上解释称,乱序提交窗口的大小与架构的其余部分、缓冲区设计以及后端调度程序容量的设计相关联,窗口大小和解码宽度在设计时应该相互适应。Exynos M3的6宽度解码单元可以很好地填充乱序提交窗口,从而获得更强的性能。
更大的前端规模
继续深入了解架构前端的更多细节,可以看到分支预测单元和取指单元的各种改进。Exynos M1的分支预测单元与其他架构的不同之处在于能每周期接收两个分支并且在后端具有两个分支端口。
Exynos M3似乎仍然保持了这个宽度,但是将μBTB(BTB,Misses per kilo instructions,分支目标缓冲器)从64链路增加到128链路,主BTB仍维持4000链路,低于Cortex A76的6000链路,但对于已接收分支的延迟有所改进。
此外更重要的是,Exynos M3中分支预测单元的整体质量得到了提高,分支预测失败的情况减少了15%。三星在会上公布了一个真正的MPKI(Misses per kilo instructions,每千条指令失败率)值,这是Arm及其他厂商均未公布过的数据。
Exynos M3的分支预测单元和取指单元分别提供解耦的地址队列和解耦的指令队列,这样可以在执行中对单元进行时钟控制。
Exynos M3的取指单元的带宽也被加倍,每时钟周期期最多可读取48Byte,即12条32bit指令,取指与解码的比率为2:1(12条/6解码),相比Exynos M2的1.5:1(6条/4解码)有所提升。
三星表示,为了应对日益严重的分支气泡问题,需要大幅增加架构成本。虽然被取分支的平均间距小于12条指令,2:1的取指/解码比率可能会造成浪费,但更大的解码宽度对突发的指令爆发有很大帮助。
虽然这种设计具有很高的瞬时功率利用率,但当指令队列(现在是深度的两倍)的填充速度比解码单元的消耗速度更快时,它允许对取指单元进行时钟门控,因而会对功耗产生积极的影响。
Exynos M3的指令转换后备缓冲区(ITLB)大小从256个条目增加到了512个条目。三星采用了与常规Arm处理器不同的三级层次结构,Cortex A75和Cortex A76的一级ITLB分别有32条和48条,其中mainTLB 共有1280个条目,包括1024个条目(页面最大为64KB)和一个辅助256条目表(页数> = 1MB)。
Exynos M3也有一级数据和指令TLB,但三星没有透露L1 ITLB的大小。
流水线与缓存设计
Exynos M3的解码单元设计为6宽度,不过三星并未披露任何相关细节,只是称其改进了指令/微指令融合功能。Exynos M3支持自Exynos M1以来的多调度形式,解码器发出的微指令可以同时分派到多个调度器,但在乱序提交窗口中它仍然只作为一个调度和一个条目。
流水线方面,Exynos M3的整数部分新增了两个额外的调度器,微指令发射能力从前代的7发射增强至9发射。两个新增端口之一是具有乘法功能的附加ALU单元,使MUL吞吐量加倍,并将简单整数算术吞吐量提高25%。另一个新增端口是负载AGU,它可以使核心的负载带宽加倍。
暴力的浮点运算能力
与前代相比,Exynos M3的浮点运算能力堪称暴力,三星为其增加了第三条流水线,就简单的浮点能力而言,其的乘法和算术吞吐量增加了三倍。Exynos M3在Exynos M1的FMAC+FADD单元基础上,又增加了3个128位FMAC/FADD单元,使最大吞吐量从3(1*FMAC(2)+1*FADD(1))翻倍到6(3*FMAC(2))。
当然,由于执行吞吐量的急剧增加,所以必须扩展调度器窗口和物理寄存器页面。Exynos M3的调度器窗口大小从32增加到了62,FP PRF大小也从96扩展到192。
三星一直在努力降低执行延迟,这也适用于浮点流水线。Exynos M3乘法单元的执行周期从4缩短到3,乘法累加单元的执行周期也从5下降到4;简单浮点加法的执行周期从3缩短到2,并升级了浮点除法单元Radix-64以显着降低除法运算的延迟。
BTW,Arm在Cortex A76发布时大肆宣传其新的浮点流水线,称为其全新的“VX(矢量执行)流水线”感到非常自豪。不过从Exynos M3的情况来看,三星似乎在一年之内便再次领先了Arm,Exynos M3与Cortex A76具有相同的浮点延迟,但同时还有更高的执行吞吐量以及更低的ASIMD延迟。
全新的加载/存储单元
Exynos M3的加载/存储单元增加了第二个128bit加载端口,读取带宽加倍。加载调用延迟在4个周期内保持不变,存储带宽在每周期1次存储时只有1个周期延迟。Exynos M3的两个加载单元均以128bit/周期运行,与Cortex A76相同,而Cortex A75则为64bit/周期。
总体而言,Exynos M3的加载/存储调度器容量已经增加,存储缓冲区增加了一倍。在这里,三星的预读取单元需要有相当高的性能,以实现完美命中缓存的目标,避免任何内存瓶颈。
随后,三星提到了之前描述的新TLB层次结构。Exynos M3拥有与Exynos M1相同的32入口的DTLB(Data Translation Lookaside Buffer,数据转换检测缓冲区),但是Exynos M3额外有一个容量为512条目的全新中级DTLB,且为ITLB(Instruction Translation Lookaside Buffer,指令转换检测缓冲区)和DTLB提供服务的统一L2 TLB容量也从前代的1024条目扩容至4096条目。
有得有失的高性能流水线
显而易见,扩大架构规模要付出代价,与Exynos M1的15级流水线相比,Exynos M3的流水线深度增加了2级,为17级,并添加了辅助调度阶段,以及用于寄存器读取的第二阶段。相比之下,Cortex A75和Cortex A76的流水线深度为13级。Exynos M3的分支预测错误的惩罚也从Exynos M1上的14个周期增加至16个周期。
Exynos M3和Exynos M1相对于Arm公版架构的的缺点是,它的取指和解码单元比Arm公版多2级,寄存器重命名单元要多1级,以及需要第二个调度阶段(再多1级)。三星没有透露Exynos M3在流水线各阶段之间是否有其他快速路径来减少关键情况下的延迟,但表示这是设计大规模高性能架构的必要成本。
理论上更长的流水线级数有利于频率的提升(Intel为让奔腾4冲击高频,曾在NetBurst架构的Prescott核心中使用31级超长流水线)。不过奇怪的是,三星的17级流水线并没有给Exynos M3带来频率上的优势,反而在冲击高频时付出了极大的功耗代价。这似乎意味着三星在EDA功力还有待提升。
全新的缓存层次结构
与Cortex A75和Cortex A76一样,Exynos M3引入了新的独占L2缓存作为核心和最后一级共享缓存之间的中间级。新的独占L2为每核心512KB,与Exynos M1中的共享L2相比,访问延迟从22个周期减少到12个周期。不过,Cortex A75的L2命中延迟只有8个周期,Exynos M3在这一方面处于劣势。
Exynos M3的L2缓存带宽也增加了一倍,为每时钟周期32Byte读写,而Cortex A75则每时钟周期16Byte读/32Byte写。
值得注意的是,由于实际芯片中会受到物理布局的影响,实际延迟数据可能还会更高。根据实测,骁龙 845的L2延迟在2.8GHz时约为4.4ns, Exynos 9810在2.7GHz时的延迟L2延迟约为4.6ns。
Exynos M3的共享L3缓存是以NUCA(Non-uniform cache architecture,非一致性缓存体系)方式实现的大型4MB缓存,由4个位于CPU核心的对面的1MB分区组成。由于布局不均匀,CPU核心在访问缓存分区时的延迟并不相同,访问相邻分区时延迟为32个周期,访问距离最远的分区时延迟为44个周期,三星表示整体的平均访问延迟为37个周期。
与L2的情况相似,Exynos M3在L3缓存方面也要弱于Arm公版架构,Cortex A75的L3访问延迟仅为25个周期,这一点在实测数据中也得以体现:骁龙845的L3访问延迟约为11.4ns,而Exynos 9810的延迟则为11ns~20ns。
三星在会议中解释称,这种缓存分区的设计旨在为高端移动设备之外的不同设计实现更好的可配置性,言外之意似乎与S.LSI试图进入汽车领域有关。总体而言,三星承认最终产品的缓存层次结构设计并未达到他们真正想要的水平。
硅芯片上的物理布局
三星今年公布了芯片物理布局的数据,详细分析了处理器内核的平面图。
以下是雷锋网对图片中一些术语名词的简短说明:
·pL2:独占L2缓存,在Exynos M3中为每核心512KB。
·FPB:浮点数据路径;浮点单元/ASIMD单元。
·FRS:浮点调度器以及浮点/向量寄存器。
·MC:解码单元和重命名单元。
·DFX:这是调试/测试逻辑,代表“X设计”,例如DFD(调试设计)、DFT(测试设计)、DFM(可制造性设计)和其他杂项逻辑。
·LS:加载/存储单元以及64KB的L1高速数据缓存。
·IXU:整数执行单元,包含执行单元、调度器和寄存器。
·TBW:透明缓冲写入,包括TLB结构。
·FE:架构前端,包括分支预测单元、取指单元和64KB L1高速指令缓存。
与Exynos M1相比,Exynos M3中的功能单元尺寸都大大增加,最终Exynos M3的内核功能模块面积为2.52mm²,另外还有0.98mm²的面积用于512KB L2缓存。
Exynos M1核心布局
Exynos M1核心布局
三星还展示了整个Exynos M3集群的平面图, 4个核心彼此相邻排列,L2和L3也有序的彼此相邻放置。这种布局可以大大节省芯片布局工作,只需将每个模块简单地复制4次即可。
IPC平均提升59%
会议最后,三星分析了Exynos M3的性能表现,称其IPC增长幅度约为59%。
当然,在不同的工作负载下,IPC的增长并不是线性的,在高ILP(多种指令同时执行)的工作负载下,IPC增长仅有限25%,在MLP(存储级并行)工作负载下甚至几乎没有增加,而在其他许多混合工作负载中,IPC的提升幅度超过80%。
三星展示了Exynos M2、Exynos M3和Cortex A75之间的GeekBench4性能对比,分布代表Exynos 8895、Exynos 9810和骁龙845的性能表现。
除三星展示的对比数据外,我还添加了一些新的Spec分数,这些分数改进了最初的评论数据,新的Spec分数考虑了动态电压频率调整以及更综合的测试环境。
能效比一直是处理器的一个重要评判标准,不过三星在Exynos M3上显然省略这些。正如上文中提到的,Exynos M3在冲击高频时付出了极大的功耗代价,尽管它在2.7GHz时拥有绝对领先的性能,但此时能效比却低于Exynos M2。在将Exynos M3的频率降低到与Exynos M2相同的2.3GHz后,Exynos M3才显示出能效比上的优势。
下图显示了完成测试中的电能消耗量及平均功耗,左边的条形表示消耗的能量,以J(焦耳)为单位,条形越短代表耗能越少,相应的平台的效率越高;右边的条代表性能分数,条形越长代表性能越强。
从结果来看,Exynos M3拥有相当宽泛的能效比区间。与Cortex A75相比,Exynos M3在2.3GHz时便可拥有更强的性能以及相仿的能耗比;而与Exynos M2相比,Exynos M3即便在1.8GHz这个最低频率上,性能和能效比均压倒性的优于2.3GHz的满血Exynos M2。
据雷锋网了解,Exynos 9810中的Exynos M3集群在单核、双核、四核满载的情况下频率分别为2.7GHz、2.3GHz、1.8GHz,功耗均为3.5瓦左右。换言之,M3核心从1.8GHz到2.3GHz,提升500MHz频率功耗便翻了一倍,而从2.3GHz提升到2.7GHz,仅400MHz的提升就让功耗再次翻倍,即从1.8GHz到2.7GHz,即便性能也呈线性同步提升,幅度也只有50%,功耗则翻了两番。
而Exynos 9810的四核Exynos M3全部运行在相同的电压和频率上,但许多情况下执行次要线程的核心并不需要跑在与主线程核心相同的最高性能点上,但其所需的性能又超过了Cortex A55小核心所能负担的范围,所以执行次要线程的核心只能与主线程核心飚在相同的高频率上,大大降低了整体的能效比。
三星未来战略与结论
最后,三星更多地讨论了Exynos项目的时间表。正如开篇介绍中所说,Exynos M3原计划于2014年第2季度开始,然而随着M1的完成,RTL在2015年第1季度开始,开发计划发生了大变动,目标被设定得更高,原本的Exynos M3被拆分成了Exynos M2,而新的Exynos M3设计方案则变得异常激进。
RTL于2017年第一季度交付给SoC团队,用于Exynos 9810的第一个EVT0流片(实际产出的芯片是EVT1),并于2017年中期下线,而最终发布的Exynos 9810则是在 2018年3月上市。
Exynos M3对于三星设计团队来说是一次相当大的挑战,整个架构设计几乎推倒重来,并且还必须面对极端的时间压力,在项目截止日期前推出产品。
整体来看,Exynos M3是一个非常坚实的微体系结构,感觉上更像是一款桌面级架构。三星为了增强架构性能,采取了最简单粗暴的办法扩充规模,这也导致了其巨大的内核尺寸。不过由于时间限制,三星似乎仍然保留了很多没有被纳入Exynos M3的改进,特别是缓存层次结构似乎是这一架构中最薄弱的部分,三星承认他们对此并不满意。
三星的猫鼬架构经历了Exynos M2和Exynos M3两代改进,其IPC增长率分别高达20%和59%。据悉,SARC设计团队现在每年都会有持续的架构改进,且三星表示Arm Cortex A76的真正竞争对手是明年的Exynos M4,而不是现在的Exynos M3。
就在几天前,Arm公布了其未来三年CPU路线图,揭示了Cortex A76的继任者Deimos和Hercules,并承诺约15%和10%的代际收益。从目前的测试数据来看,Exynos M3在性能方面似乎已达到或超过Cortex A76的水平,预计在Exynos M4上,我们仍可以看到三星自研架构的竞争优势。
感谢三星一直以来所做的架构曝光,这种细节展示在行业内实属少见。希望S.LSI和SARC能够解决Exynos M3架构的弱点,使明年的新架构取得更大的成功。
关于峰会购票信息,点击“阅读原文”了解详情~