深入理解Arm Cortex-A76处理器

微信公众号 mindshare思享

在今年的Computex上arm公布了2018年的Cortex-A旗舰CPU,Cortex-A76. 这个CPU的微构架做了彻底的重新设计,它重点提高了峰值性能,同时良好地保持了性能功耗比。Cortex-A76将arm CPU的性能推上了一个新高度。

Cortex-A76还是armv8.2-a构架实现,与现有的处理兼容,还是使用DSU技术,到时微构架的重新设计使得它比Cortex-A75平均有35%的性能提升,且有40%的能耗比提升。对浮点数和机器学习运算任务提升最大,所以我们来深入了解一下这个新设计。

CPU开足马力 

Cortex-A76设计的变化基本体现在“更宽”,提升CPU的吞吐量让更强大执行单元尽可能地开足马力运行。

在每个Core里,Cortex-A76装备了

  • 2个简单的ALU执行单元用来基本的算术运算和移位操作,

  • 一个多指令周期的整形组合ALU用来做乘和乘加运算

  • 一个分支跳转单元

Cortex-A75只有一个基本的ALU和一个ALU/MAC单元,这也解释了为什么整形运算性能的提升。

Cortex-A76有两个SIMD NEON执行pipeline, 只有其中一个可以处理浮点数除法和乘加指令。两pipeline都是双128bit的SIMD pipe,提供了比以前arm CPU两倍的带宽。和Cortex-A75一样,支持半精度的FP16运算,同时对低精度的INT8 点积(dot product)指令的性能有大幅提升,提高机器学习应用的性能。

A76另外一个重要的变化是新的分支预测设计,分支预测现在从指令预取里解耦出来,分支预测单元每时钟周期fetch 32 byte,比以前的每时钟周期16 byte速度快一倍。这样做的主要原因是利用内存级并行,换句话说,潜在的一次处理多个内存操作的能力。这特别对处理cache和TLB miss,去掉pipe line无事可做的周期特别有帮助。

A76也有每周期4条指令的decode路径,可以每周期decode 8条16bit的指令。而A75是3条,A73是2条。这意味着CPU可以dispatch最多 8 micro-ops/cycle, A75的数值是6,A73是4.

加上8个issue queue(每个执行单元一个),和128 bit的指令windows, arm 更进一步地加强了指令乱序执行的能力,以提高IPC。

在设计中,使pipeline的早stage更宽,提高了指令吞吐量,这可以喂饱后面高性能的运算单元。即使在cachemiss情况下。但这也稍微增加面积和功耗。

低延迟memory设计

如果处理器存在内存读写带宽瓶颈,前面所说的对预取和执行单元的提升就不会这么有用,所以arm也提升了memory访问效率。

和以前一样,A76有一样的64KB,4-way set associative L1cache,和256-512KB的私有L2cache, 但是解耦addressgeneration和cache-lookup流水线两倍提高了带宽。

内存级并行也是关键目标,因为内存管理单元可以处理64个in-flight loads,72个in-flight store和2个outstanding非prefetch miss。整个cache层次结构也对访问延迟做了优化。它只需要4个cycle访问L1 cache,9个cycle访问L2 cache,31个cycle访问L3 cache。基本上内存访问越快,执行也越快。

Cortex-A76改进了单核的吞吐量,低延迟的内存访问,和稳定性能。

说到L3 cache,在第二代DSU设计中它支持高达4MB的内存。这么大的内存极有可能是为笔记本产品预留的,因为加倍cache只会大致提升5%的性能。智能手机产品极可能最多只会配置2MB,因为芯片面积和成本的限制,和对较低性能的要求。

aarch32的取舍

Cortex-A76是第一个开始逐渐去除32bit支持的CPU。A76还是支持aarch32,但是只是在最低特权级的EL0支持,而aarch64在EL0-EL3都支持-从OS到底层的固件。在将来某个时候,arm非常有可能完全只支持64 bit,这取决于arm生态系统的发展。

在server市场,很多软件本来就是64bit的,所以QC的Centriq等处理器EL0-EL3只支持aarch64.

在mobile市场,大多数的处理器已经都是64bit的OS和Android kernel,但是还是有部分32bit的应用,为了高效执行,所以在EL0设计保留支持aarch32。EL0是应用级模式,不需要特权级的OS支持,虚拟化,异常处理,内存管理的指令和行为,基本上基础的运算指令,内存访问指令和分支跳转指令,这些指令中大多数也是aarch64要支持的,所以不会增加很多的逻辑。

只在EL0支持aarch32,很大程度上减少了对CPU设计指令和行为的验证(验证全面EL0-EL3 aarch32支持,基本上和验证一个armv7-a的CPU工作量上是一样的),同时因为少了处理和aarch64很不一样的行为的逻辑要求,可以减少CPU面积和功耗。                                                            

笔记本级性能(TLDR)

通常来说,CPU的速度用它在一个时钟周期可以做多少事情来表示,比如可以做2个加法比只能做一个好,所以arm增加额外的运算单元和提升了浮点运算的性能。

这种方式的问题是你需要让执行单元有事情可做,否则就是浪费芯片的面积和功耗,所以你必须能比以前更快发射更多指令给执行单元。这导致一些问题,比如增加了数据不在处理器认为该在的地方(cache miss)的可能性,这会导致整个系统stall. 因此你需要重点提高分支预测和预取,和更快的cache访问。最后,这些是以芯片面积和功耗为代价的,所以你需要优化使这些因素可控。

arm需要关注这些所有的因素,这就是arm做这么大重新设计的原因,而不是仅仅对A75做些调整。综合这些IPC性能提升和预计使用的7nm工艺,我们可以看到Cortex-A76比已经很让人影响深刻的Cortex-A75性能方面有显著的35%提升,而且A76只需要一半的功耗,以更低的频率达到一样的性能目标。

A76是arm在从mobile到笔记本(甚至超越)高性能计算方面的大动作,A76同时保持了使arm这样成功的能效。我们非常有可能在2019早些时候看到第一个A76的芯片。

本文属个人观点。

本文主要来源:https://www.androidauthority.com/cortex-a76-deep-dive-870896/

猜你喜欢

转载自blog.csdn.net/weixin_39366778/article/details/81272920