简介
这是Arm
第一款做的比较成熟的服务器核Neoverse N2
,前面的系列Neoverse N1
是由移动端A76
改进而来,但相对而言没有那么成熟,或者说性能没那么高,这款核在市场上反馈良好,并且以低功耗以及平衡性能的特点占据了一定的市场,本文将分析这款核的一些设计特点。
Neoverse N2
最高能跑到3.6GHz
,考虑到Op-Cache
的引入,这是一款5
宽乱序核心,并且非常值得关注的是,N2
的分支预测惩罚仅有10
个周期,并且在5nm
工艺下,面积1.1-1.3mm2
(取决于L2
配置的大小),作为服务器端的核,功耗仅有1.0-2.0W/core+L2
,除去本身 Arm 架构在移动端的生态积累,这种性能和功耗的优势也是其能快速获得云市场青睐的原因。
取指单元
前端的优化很多,和N1
相比对预测器的优化比较多,N1
不支持每个周期预测2
个跳转分支,而N2
则将预测的带宽扩大为原来的2
倍,并且支持了每周期预测2
个跳转的分支,这是非常重要的特性,对于提升前端的带宽有非常重要的意义。但从Fetch Queue
以及Decode
宽度来讲,估计不是实际意义上的2-taken/cycle
,应该会有不少限制,例如是2
个连续的block
的预测,不能在bank
冲突时跨cacheline
,但既然支持了,肯定会有一定的性能提升的。取指单元总体来讲没有看到太多关于预取的优化,其它方面的优化多少都有。
预测器
预测器属于前端的核心组件了,其精度对整个处理器的性能都有很重要的影响,每一次预测错误都会导致流水线刷新,这会导致处理器在做无效功,错误路径的指令会污染Cache
和TLB
,这种错误的影响会随流水线深度增加而增加,当然还要很多负面的影响不太容易量化评估。不管何种设计,现代超标量处理器都是非常重视分支预测器的。
一般情况下,出于并行性和延迟考量,预测器都多级的,一般第一级需要能够实现0cycle
定向,有处理器厂商称为0bubble
,nextline
预测器,考虑到延迟,面积等因素,第一级预测器很难使用复杂算法,所以一般做的都比较小,当然这几年工艺改进快,所以做的可以很大了。N2
的0cycle
的重定向由原来的16entry
提升到64entry
,和同样是服务器系列的V2
有一定差距,目前定位旗舰核的都是1K+
,但考虑到这是2021
年推出的核,定位也不是旗舰核,有不少参数差异是能接受的,毕竟这个系列设计对功耗优先级很高。预测方向的算法从各方面的消息来讲,还是Tage
,这个算法我在很多文章中说过,这里不多赘述,目前依据这个算法基本是工业界最好的预测器,这里的最好指的是在一定的面积开销,良好的时序下,能实现的精度是最好的,主流厂商基本基于这个算法做一些改进。 主预测器是8K
,即使是现在,这个数值也不算小,BTB
的大小很大程度决定了能覆盖的范围,同样也影响了命中率,如果预测方向很准确,但BTB
的MISS
比较高,那么预测器的性能也会很受限,目前 BTB 的大小一般做的都比较大,并且有很多方法优化存储的信息密度。
Alt-Path
的优化,估计是优化预测精度的模块,应该和Tage
算法的Alt-Pred
不太一样,或者是单独做个模块来跟踪Alt-Path
,其实我一直觉得Tage
本身的算法(指经典的论文)对可供选择的预测结果挖掘不够,相对而言做的太简单。
指令缓存
ICache
也是核心模块,一般考虑到速度,做的都比较小,Arm
是64KB/4WAY
的配置很多年了,我在很多微架构分析文章都提到相关,这里不多赘述。取指带宽仅有16B
,而旗舰的V2
则是有24B
,这是他们的定位决定的。
稍微值得关注的是,Cache(ICache/DCache)
都更重视预取机制,预取本身在处理器中非常重要,可以打破一些原本固有的延迟,例如L1 ICache
和L2 Cache
之间又较大的延迟,预取机制可以在取指或者预测前将指令取到ICache
内,这样可以降低延迟,这种性能提升对提升IPC
有重大意义。
Arm
在N2
演说PPT
里单独讲了预取机制,如下图:
Op Cache
这是一个比较有趣的设计,前端除了2-taken/cycle
预测,这个地方变化最大,具有1.5K entry
,可以绕过decode
,对于复杂指令集,decode
流水线比较深的微架构,这个组件几乎是必须的,对性能提升很好,前面说的10cycle
的预测错误惩罚,很可能就是指命中Mop Cache
的情况,因为10cycle
属于非常低的预测错误惩罚了。关于这个组件在移动端沿用了好几代,服务器系列的核仅有一代便被删除,Arm
后面舍弃这个模块也是功耗的权衡,将更多的资源投入到ICache
,并通过ICache
增大取指带宽降低删除Mop Cache
的影响。
内存管理单元
到目前为止,MMU
模块实在写的太多,后面的侧重点可能都不在此处,感兴趣可以看其它核的分析文章。
经典的2
级TLB
结构,L1 ITLB
是48entry
,L1 DTLB
是32entry
,L2 TLB
是共享的存储,具有5
路,这个5
路还是比较奇怪的,一般是4
路,6
路,8
路,可能有一路做特殊的设计或者为特殊的Feature
做的保留。
Mid-Core
Rename
的改进主要在宽度,这里得益于前端的Mop
的引进,Rename
的Checkpoint
也是N2
比较前代引入的新的特性,有利于快速从预测错误分支状态的恢复。ALU
增加了一个通路,分支执行则改为2
个,实际即使每周期只能预测一个跳转分支,也可以有2
个分支执行。,这样也能带来收益,大家可以关注一下其它核都有类似的思想。
其实之前有经验非常丰富的人质疑我的说法,他说很多执行部件都是按照比例固化的,例如Load Store
的比例,前端Issue
和退休带宽的比例,这些我是知道的,但我理解这些比例不是完全固化的,是可以设计一些荣冗余的通路,尤其是当这个部件的面积和逻辑复杂度开销相对较低的时候,可以设计看上去不合理的比例获得一些场景的收益。并且统计一下Intel/AMD/Arm
这些传统强势的CPU
厂商他们在设计的时候也没严格按照某些统计学的比例来设计,我并不觉得一些教科书式的经验设计是必须要遵循的。一些模拟器仿真器给出的结果也各不相同。
分支预测惩罚为10cycle
,非常低的值,像Zen4
我记得是最小11cycle
(实际应该大不少),高通24
年的核还是13cycle
,但这里的10cycle
可能指的是命中Mop Cache
。
Back-End
又到了喜闻乐见并且我不熟悉的后端了,DCache
是64KB/4WAY
,VIPT
,从寄存器里看,潜在的alias
使用硬件维护。替换算法使用PLRU
,这个算法简单,硬件开销相对较小,性能感觉一般,尤其对路数比较小的,这个算法我感觉更一般了(曾经做过这个算法也测试过,但没辙,因为稍微复杂点的算法硬件开销都很大)。L2
的带宽是前代的两倍,预取有所改变,这一代开始,Arm
的预取的重视明显变得更高了。官方放出的信息来看,LSU
设计思路变化不大,基本都是在优化,后面可能改为双口DCache
来增加带宽,这一部分挺久没有看到比较有意思的改变了,也可能官方没说。很期待 Arm 能在 Cache 设计的核心思路上有所改变。
总结
Arm N1
的改进相比它的前代实在太小,而N2
一些重要的feature
纷纷引进,例如预测器每周期预测两个跳转分支,提高L2 Cache
容量,重点优化预取器,增加Mop Cache
等等。N2
目前确实算是比较经典的一代处理器,和移动端的A78
一样具有很重要的地位,在商业上也证明了它的成功。
下图是Arm
参考设计,本代N2
对应的CMN
是700
系列,相关的GIC
和MMU
均更新到700
系列,CMN700
支持最高256
核/die
,SLC
支持最高512MB
,每个die
支持最多144
个节点。国内阿里设计的云服务器CPU
采用128
个N2
,频率最高可以跑到3.2GHz
,非常成功的设计。
END
作者:亦安QAQ
文章来源:亦安的数字小站
推荐阅读
更多 IC 设计干货请关注IC 设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。