棋子 · 2 天前

Arm Neoverse N2核微架构分析

简介

这是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 架构在移动端的生态积累,这种性能和功耗的优势也是其能快速获得云市场青睐的原因。

image.png

取指单元

前端的优化很多,和N1相比对预测器的优化比较多,N1不支持每个周期预测2个跳转分支,而N2则将预测的带宽扩大为原来的2倍,并且支持了每周期预测2个跳转的分支,这是非常重要的特性,对于提升前端的带宽有非常重要的意义。但从Fetch Queue以及Decode宽度来讲,估计不是实际意义上的2-taken/cycle,应该会有不少限制,例如是2个连续的block的预测,不能在bank冲突时跨cacheline,但既然支持了,肯定会有一定的性能提升的。取指单元总体来讲没有看到太多关于预取的优化,其它方面的优化多少都有。

图片

预测器

预测器属于前端的核心组件了,其精度对整个处理器的性能都有很重要的影响,每一次预测错误都会导致流水线刷新,这会导致处理器在做无效功,错误路径的指令会污染CacheTLB,这种错误的影响会随流水线深度增加而增加,当然还要很多负面的影响不太容易量化评估。不管何种设计,现代超标量处理器都是非常重视分支预测器的。

一般情况下,出于并行性和延迟考量,预测器都多级的,一般第一级需要能够实现0cycle定向,有处理器厂商称为0bubblenextline预测器,考虑到延迟,面积等因素,第一级预测器很难使用复杂算法,所以一般做的都比较小,当然这几年工艺改进快,所以做的可以很大了。N20cycle的重定向由原来的16entry提升到64entry,和同样是服务器系列的V2有一定差距,目前定位旗舰核的都是1K+,但考虑到这是2021年推出的核,定位也不是旗舰核,有不少参数差异是能接受的,毕竟这个系列设计对功耗优先级很高。预测方向的算法从各方面的消息来讲,还是Tage,这个算法我在很多文章中说过,这里不多赘述,目前依据这个算法基本是工业界最好的预测器,这里的最好指的是在一定的面积开销,良好的时序下,能实现的精度是最好的,主流厂商基本基于这个算法做一些改进。 主预测器是8K,即使是现在,这个数值也不算小,BTB的大小很大程度决定了能覆盖的范围,同样也影响了命中率,如果预测方向很准确,但BTBMISS比较高,那么预测器的性能也会很受限,目前 BTB 的大小一般做的都比较大,并且有很多方法优化存储的信息密度。

Alt-Path的优化,估计是优化预测精度的模块,应该和Tage算法的Alt-Pred不太一样,或者是单独做个模块来跟踪Alt-Path,其实我一直觉得Tage本身的算法(指经典的论文)对可供选择的预测结果挖掘不够,相对而言做的太简单。

指令缓存

ICache也是核心模块,一般考虑到速度,做的都比较小,Arm64KB/4WAY的配置很多年了,我在很多微架构分析文章都提到相关,这里不多赘述。取指带宽仅有16B,而旗舰的V2则是有24B,这是他们的定位决定的。

稍微值得关注的是,Cache(ICache/DCache)都更重视预取机制,预取本身在处理器中非常重要,可以打破一些原本固有的延迟,例如L1 ICacheL2 Cache之间又较大的延迟,预取机制可以在取指或者预测前将指令取到ICache内,这样可以降低延迟,这种性能提升对提升IPC有重大意义。

ArmN2演说PPT里单独讲了预取机制,如下图:

图片

Op Cache

这是一个比较有趣的设计,前端除了2-taken/cycle预测,这个地方变化最大,具有1.5K entry,可以绕过decode,对于复杂指令集,decode流水线比较深的微架构,这个组件几乎是必须的,对性能提升很好,前面说的10cycle的预测错误惩罚,很可能就是指命中Mop Cache的情况,因为10cycle属于非常低的预测错误惩罚了。关于这个组件在移动端沿用了好几代,服务器系列的核仅有一代便被删除,Arm后面舍弃这个模块也是功耗的权衡,将更多的资源投入到ICache,并通过ICache增大取指带宽降低删除Mop Cache的影响。

内存管理单元

到目前为止,MMU模块实在写的太多,后面的侧重点可能都不在此处,感兴趣可以看其它核的分析文章。

经典的2TLB结构,L1 ITLB48entryL1 DTLB32entryL2 TLB是共享的存储,具有5路,这个5路还是比较奇怪的,一般是4路,6路,8路,可能有一路做特殊的设计或者为特殊的Feature做的保留。

Mid-Core

Rename的改进主要在宽度,这里得益于前端的Mop的引进,RenameCheckpoint也是N2比较前代引入的新的特性,有利于快速从预测错误分支状态的恢复。ALU增加了一个通路,分支执行则改为2个,实际即使每周期只能预测一个跳转分支,也可以有2个分支执行。,这样也能带来收益,大家可以关注一下其它核都有类似的思想。

其实之前有经验非常丰富的人质疑我的说法,他说很多执行部件都是按照比例固化的,例如Load Store的比例,前端Issue和退休带宽的比例,这些我是知道的,但我理解这些比例不是完全固化的,是可以设计一些荣冗余的通路,尤其是当这个部件的面积和逻辑复杂度开销相对较低的时候,可以设计看上去不合理的比例获得一些场景的收益。并且统计一下Intel/AMD/Arm这些传统强势的CPU厂商他们在设计的时候也没严格按照某些统计学的比例来设计,我并不觉得一些教科书式的经验设计是必须要遵循的。一些模拟器仿真器给出的结果也各不相同。

分支预测惩罚为10cycle,非常低的值,像Zen4我记得是最小11cycle(实际应该大不少),高通24年的核还是13cycle,但这里的10cycle可能指的是命中Mop Cache

图片

Back-End

又到了喜闻乐见并且我不熟悉的后端了,DCache64KB/4WAYVIPT,从寄存器里看,潜在的alias使用硬件维护。替换算法使用PLRU,这个算法简单,硬件开销相对较小,性能感觉一般,尤其对路数比较小的,这个算法我感觉更一般了(曾经做过这个算法也测试过,但没辙,因为稍微复杂点的算法硬件开销都很大)。L2的带宽是前代的两倍,预取有所改变,这一代开始,Arm的预取的重视明显变得更高了。官方放出的信息来看,LSU设计思路变化不大,基本都是在优化,后面可能改为双口DCache来增加带宽,这一部分挺久没有看到比较有意思的改变了,也可能官方没说。很期待 Arm 能在 Cache 设计的核心思路上有所改变。

图片

总结

Arm N1的改进相比它的前代实在太小,而N2一些重要的feature纷纷引进,例如预测器每周期预测两个跳转分支,提高L2 Cache容量,重点优化预取器,增加Mop Cache等等。N2目前确实算是比较经典的一代处理器,和移动端的A78一样具有很重要的地位,在商业上也证明了它的成功。

下图是Arm参考设计,本代N2对应的CMN700系列,相关的GICMMU均更新到700系列,CMN700支持最高256核/dieSLC支持最高512MB,每个die支持最多144个节点。国内阿里设计的云服务器CPU采用128N2,频率最高可以跑到3.2GHz,非常成功的设计。

图片

END

作者:亦安QAQ
文章来源:亦安的数字小站

推荐阅读

更多 IC 设计干货请关注IC 设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。

推荐阅读
关注数
22673
内容数
1360
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息