性能更强、核心更多、更为灵活

2021-09-10 08:30张平
微型计算机 2021年15期
关键词:功耗内存条目

张平

带有SEV的Cortex-X1?Neoverse V1架构解读

Neoverse V1架构是ARM奥斯汀设计中心的产品,Cortex-X1也是出自他们之手。因此从块结构来看,NeoverseV1和Cortex-X1有一些相似之处。

Neoverse V1的微架构:更宽、更强

ARM对Neoverse V1的定位是面向大型设备、机器学习、要求性能的云计算等场合。Neoverse V1最大的特点在于加入了2x256b的SEV计算能力,并且支持目前在A I计算中被广泛应用的bFloat16。在设计取向上,NeoverseV1更看重性能,而非功耗或者芯片面积,毕竟它面向的是对性能有要求的市场。相比之下,Neoverse N系列则是面向对每瓦特性能敏感的5G设备和云计算场合。

在架构改进上,Neoverse V1采用了新的微架构,并专门为HPC和服务器市场进行了针对性优化,性能水平得以全面提升。Neoverse V1在微架构上首次加入了SE V指令集,增强了功能、安全性和性能。在架构可伸缩性方面,Neoverse V1可以在有限的系统资源下实现性能功耗的管理。

在架构指令集方面,Neoverse V1是基于Armv8.4设计的,并且加入了Armv8.5和Armv8.6的特性—后两者的大部分内容都是面向H P C市场的。可能考虑到研发时间的问题,它并没有引入前段时间发布的Armv9,不得不说是一个遗憾。

在性能方面,Neoverse V1相比Neoverse N1,在7nm或者5nm工艺下整体性能提升高达50%。虽然提升幅度很大,但是实际上后者相比NeoverseV1在架构设计上要落后2代,因此这样的性能差距还算正常。

Neoverse V1采用了超过11级的超短流水线设计,前端为8个发射宽度,搭配15宽度的队列单元。在功能单元方面,Neoverse V1拥有2个专用的分支预测单元。后端执行方面则拥有4个64bit的整数执行ALU和2个256bit的S V E单元,也可以执行4x128b i t的NENO浮点运算。写回方面,它拥有3个读取/加载地址单元,以及3个读取数据、2个存储数据的流水线。从前端到后端,分别是8发射的指令拾取、5~ 8宽度的解码和重命名、分支预测、初次和二次整数执行单元(包括MUL、DI V、CRC等)、浮点单元、地址计算以及读取和存储数据等。

Neoverse V1和Cortex-X1很相似,比如都采用了相同的短流水线设计,在分支预测方面都做出了一定的加强,以避免分支预测错误带来的分支预测惩罚。实际上从Cortex-A76开始,A R M的奥斯汀团队在架构设计方面一直保持相对稳定。因此Neoverse V1相比Neoverse N1,其频率并没有太大的变化(流水线级数没有大幅度增加),性能提升主要来自架构规模的提升和IPC的增加。

在前端方面。Neoverse V1针对服务器和HPC的应用场合做出了改变。首先是针对较大的指令运行时的指令足迹进行了优化,这意味着这些复杂的指令能够更为高效地在NeoverseV1中执行并输出结果。其次是分支预测方面的改进,比如更快的解耦获取带宽,新的设计采用了2x32b的方案,是之前方案的2倍;L2 BTB目前可以容纳超过8K个条目,增加了33%的容量;L0级别的nano BTB增加到了96个条目,是之前设计的6倍,更大的nano BTB可以避免0循环的气泡出现。第三则是前端的代码区域(coderegions)的追踪并发性能是前代产品的2倍。最后则是提升了“早期”分支管道中重定向性能,其带来了更低的延迟并避免了代价高昂的后期预测错误。在经过改进后,Neoverse V1的分支预测性能相比前代产品降低了90%的分支预测错误,减少了50%的前段失速,效果明显。

在中核部分,Neoverse V1也进行了很多改进,主要是增加宽度和深度。首先它加入了全新的Mop缓存,这个缓存的作用主要是为L0指令解码提供了3K的队列深度,并且还拥有较高的指令拾取带宽。Mop缓存每周期可以完成8个指令的存取,相比前代产品翻倍,相关指令缓存的带宽从之前每周期4宽度提升至5宽度,也带来了性能的增加。Mop缓存还拥有更低的解码管道延迟,现在整个过程只需要占据1个周期。其次是新指令的加入,目前新指令可以提高整个执行过程的性能、效能和密度。第三则是乱序执行窗口方面,Neoverse V1的乱序执行窗口相比Neoverse N1直接翻倍,达到了256条目,还附带了压缩设计。值得一提的是,Neoverse V1的ROB条目可执行数量实际上已经超越了Cortex-X1,后者的ROB条目只有224个。在并行性方面,Neoverse V1还增加了指令和内存方面的并行性。最后则是整个中核执行部分的加强,包括分支指令执行部分从1个提升至2个,ALU从之前的3个提升至4个,新引入复杂ALU,可以执行复杂计算。ARM宣称针对中核整数部分的改进,可以带来25%的性能提升。

在浮点计算方面,由于SEV的引入,中核部分也发生了很大的变化。Neoverse V1借助SEV指令集,可以执行2x256bi t的浮点计算,也可以执行4x128bit的浮点计算—这是NENO的规格。另外Neoverse V1还大幅度加强了机器学习的性能,它的2个SEV单元能够支持包括bF16,int8在内的机器学习常用数据格式,大大提高了整个内核在机器学习和推理方面的能力。如果在矢量计算中,Neoverse V1每周期性能可以达到16、32、128、256,相比此前的產品整体效能大幅提升。

最后再来看看后端的设计。Neoverse V1的后端主要是增加了更多的带宽和智能功能。其采用了第三代LDAGU流水线设计,整体性能相比前代产品增加了50%。另外LD和ST数据带宽也有显著提升,其中LD部分带宽提升至3x16B,提升幅度为50%。新增的LD(SEV)部分每周期可移植性2x32B的数据操作,ST部分从之前的每周期16B提升至每周期32B。其余改变还包括更大的LD/ST缓冲区,新加入的内存级并行和分布式结构。在未完成的外部内存事务条目方面,从之前的48提升至了96,这带来了更好的延迟容忍。MMU部分也从之前的1.2K条目提升至2K条目,提升了67%。ARM的数据显示,后端部分带宽的改进带来了45%的性能提升。

后端的L2部分,Neoverse V1也进行了优化。L2延迟在1MB块内降低到了1个周期,之前的架构则需要10个周期才能够完成操作,此外还包括额外的数据预取覆盖和新的L2替换政策。在可伸缩性和效能改进方面,Neoverse V1应用了动态拾取功能。这个功能主要是适应系统变化并优化不同的系统(包括延迟、带宽、拥塞),带来更好的公平性并提高整体吞吐量等,尤其是在减少L2互聯流量方面起到了重要的作用。另外,Neoverse V1还引入了新的时间预取器,它能够随着时间的推移,锁定任意访问模式并识别相同模式的后续数据,直接将后续数据拉入计算流程。经过上述改进,其降低了15% L2或者SLC的填充时间,减少了50%的L2数据流量,这能很有效地改善处理器内部的数据使用效率,提升整个架构的效能。

Neoverse V1的平台:增强的电源管理和平台管理机制

Neoverse V1在整个处理器平台的特性方面也做出了很多改进。它能够支持MPAM或者Max Power MitigationMechanism(最大功耗缓解机制)。这个技术是一个新细粒度(大约100个时钟周期)的电源管理机制,可以平滑内核的电源行为,使得平台电源供应商不需要考虑最恶劣的电源供应情况,并且允许所有的处理器核心以最高频率运行。在这种情况下,ARM还提供了三种电源配置方案,分别针对节流功耗、节流带宽和矢量负载、节流矢量和浮点负载这三种情况。

相比x86处理器在最大TDP下进行频率波动不同的是,ARM的处理器更愿意在更多时间内保持最高频率,但是实际的功耗则是远低于T D P功耗,这就需要使用MPAM这类技术来将部分内核模块节流以尽可能高地提高处理器的频率。在一般产品中,实现这个目标的方法还包括微架构内部的调度节流,核心减慢调度指令速度来平滑具有高执行周期的工作负载中的高功率需求,尤其是在加入了SEV指令集的情况下。

在MPAM加入后,Neoverse V1可以在更大的系统范围内进行统筹和交互,比如多个VM负载或者进程在同一个系统上运行的时候,内存分区和监控功能有助于提高服务质量并降低进程之间的干扰。不过这些功能需要软硬件合作和实施,一旦成功,能够为云计算等场合带来非常显著的效能提升。

再来看看Neoverse V1的CBusy功能,所谓CBusy是指Completer Busy,在这个功能中,CPU内核在基于反馈的基础上,和整个片上网格交互连接,CPU可以根据整体片上网格情况和系统内存负载改变内存预取器的优先级。这个功能和前文介绍的动态预取功能相关,可以实现两全其美的性能提升:要么在带宽可用的情况下更好地预取提高每个内核的性能,要么在系统高负载下进行保守的预取来确保数据传输的带宽。ARM宣称这个功能设计可以带来15%的性能提升。

首个企业级Armv9指令集架构:Neoverse N2

接下来,我们再来看看NeoverseN 2的平台和微架构的相关内容。Neoverse N2是首个企业级的、采用Armv9指令集的微架构。和NeoverseV1有所不同的是,Neoverse N2并不是追求极端性能的微架构,而是面向平衡的P PA的产品,也就是在面积、性能和功耗之间取得最佳的平衡。

从架构设计来看的话,NeoverseN2和Neoverse N1有一定的继承关系。Neoverse N2的设计目标是为面向云计算到边缘计算的设备,提供更好的可伸缩性和每瓦特性能,满足电力和空间的限制等。

Neoverse N2拥有三大新的特性,包括IPC提升40%从而带来性能大跃进、全面的架构升级以及增强的伸缩性等。更具体来看的话,Neoverse N2采用了基于Armv9的全新微架构,全面提升了性能和真实服务器场合的性能负载、PPA和Neoverse N1维持基本不变,同时还带来了更好的每瓦特性能。

在具体架构细节方面,ARM没有给出太多内容。不过ARM宣称NeoverseN2的前端采用了5发射设计,其ROB条目只有160余条,相比NeoverseV1的256条目要减少不少,此外还支持2x128b的SVE、NENO和浮点计算等。从这些内容可以看出,NeoverseN2的确是一个面向PPA最优化的微架构,并不像NeoverseV1那样追求极致性能。

另外在“智能”方面,ARM宣称Neoverse N2继承了很多Neoverse N1的“智能”功能,包括智能的分支预测、智能的数据预取、智能的替换策略等。另外,Neoverse N2的前端设计和Neoverse V1非常接近,比如都有增强的分支预测部分,同时都引入了Mop缓存,不过Neoverse N2的Mop缓存只支持1.5K的条目,相比Neoverse V1的3K条目要少不少。

在电源管理方面,Neoverse N2类似Neoverse V1的加强版本。ARM宣称Neoverse N2可以根据工作负载改变CPU微架构,以便在不影响性能的前提下降低功耗等。

总的来说,由于Neoverse N2发布的时候Armv9指令集还未上市,因此ARM对其没有太多介绍。从它的性能和特性来说,重点关注的主要是40%的IPC提升和PPA最优化设计,这一点究竟是如何做到的,本刊还将继续关注。

NeoverseV1和NeoverseN2的性能预测

了解了Neoverse V1和Neoverse N2的架构内容之后,接下来就是大家最关心的性能、面积和功耗等信息。我们先回顾一下ARM之前在Neoverse N1上做出的性能预测和最终的实际性能情况。

ARM在2019年发布了N eover seN1,当时ARM给出的性能参数指标是Neoverse N1的核心在2.6GHz~3.1GHz频率下,搭配512K B或者1M B L2缓存,使用台积电7n m工艺,核心面积大约在1.12mm2~1.4mm2,功耗大约在1.0~1.8W,在64核心的配置下可以在SPECint_2017测试中获得190分的成绩,功耗控制在大约105W左右。而在实际产品实现上,其芯片的面积和预测值大约有10%的偏差,最终性能也达到了预测的要求。

以此来分析Neoverse V1的话,它可以在频率以及其他配置和NeoverseN1相同的情况下,I P C提升48%,或者达到Neoverse N1 1.5倍的性能。在能耗比方面,Neoverse V1的性能功耗比实际上是Neoverse N1的0.7倍到1倍,最终能耗数值应该是NeoverseN1的1.5倍到2.4倍,这是非常重要的数据。在芯片面积方面,Neoverse V1是Neoverse N1的1.7倍,这和前述的Neoverse V1核心规模更大直接相关。ARM还展示了采用Neoverse V1架构的芯片参考设计。比如在5n m工艺下拥有96个内核,频率2.7GHz。虽然Neoverse V1的微架构本身可以提升至更高的频率,但是实际上拥有超多内核的产品受限于功耗,将导致其很难达到更高的频率,需要做出平衡。

目前,已经有厂商采用NeoverseV1推出具体产品,比如SiPearl的Rhea芯片,它使用了台积电的N6工艺(7nm工艺的改进版本),拥有72个NeoverseV1核心,相比官方方案,Rhea芯片的内核数量大幅度提升,这意味着如果SiPearl想让其达到官方设定的频率的话,那么TDP功耗就会大幅度提升。因此,相比目前顶级的80核心Altra芯片,Rhea芯片保持在250W以内的TDP是非常困难的。

接下来再看Neoverse N2,相比Neoverse V1,Neoverse N2实际上是一个更“合适”的设计,如果企业不追求最后那10%的极限性能的话—因为Neoverse N2相比Neoverse V1只损失了大约10%的IPC,且其目标功耗值仅为Neoverse N1的1.45倍,因此其性能功耗比应该是Neoverse N1的0.96倍。面积方面,Neoverse N2则是Neoverse N1的1.3倍。

一般来说,Neoverse N2的性能似乎相比Neoverse N1是线性增加的,当然功率也是这样。虽然在性能功耗比方面来说并不是很好的改进,但这种情况往往意味着在频率和最终性能目标方面,Neoverse N2需要更先进的工艺节点,以便实际使用微架构的企业能够实现相关功能并带来更为显著的IPC和性能改进。

不过实际产品设计需要考虑更多的因素,比如Ampere Altra,在这款产品上很多CPU核心都没有被充分利用,因此整个芯片甚至运行在TDP功耗之下。如果Neoverse N2的架构能够在这种工作负载中提高性能的话,并且能够实现更高的效率,即使不考虑工艺方面的因素,Neoverse N2的使用也意味着性能的提升。

此外,在绝对IPC提升方面,ARM还给出了更多的性能数据。对于Neoverse V1而言,IPC的改进中位数大约在50%左右,在SPEC CPU测试中基本上能够达到这个数字。ARM还特别强调,如果应用能够很好地使用SVE或者加宽的矢量执行宽度的话,那么性能提升还会更为显著,ARM给出的数据是100%~125%的提升幅度。

相比之下,Neoverse N2的IPC性能增幅中位数为32%,SPEC CPU性能测试的增幅约为40%,如果是顶级方案,那么IPC增幅也能够超过50%,不过相比Neoverse V1还是略逊一筹。

最后,ARM还展示了NeoverseN2、NeoverseN1和NeoverseV1的SPECCPU2017的测试数据估计值。可以看出,NeoverseN2相比NeoverseN1的改进是比较均匀的,一般都在20%~50%之间,只有少数例外。相比之下NeoverseV1的性能增幅更为明显一些。不过在部分测试中,NeoverseV1的性能是不如NeoverseN2的,主要是因为NeoverseN2是新的微架构,采用的是Armv9指令集,相比之下NeoverseV1更老一些,部分优化特性只有NeoverseN2才有,因此NeoverseN2在这部分实现了反超。

CMN-700 Mesh架构:更大、更灵活

ARM在5年前发布了CMN-600互联网络架构,这是ARM构建片上SoC的基础架构,ARM在之前也对其进行了更新,比如r2版本引入了更大的缓存和CCIX功能等。

现在,ARM终于发布了全新的CMN-700Mesh架构,它具有了全新的可扩展性、更强的性能以及灵活性等。相比前代产品,CMN-700极大地扩展了片上SoC可以拥有的核心数量、缓存容量、节点数量、内存支持以及接口等,使得厂商能够更容易地设计出核心数量更多以及性能更强的SoC产品。

CMN-700支持最多单个处理器拥有最多256个内核,整个系统拥有最多512个内核,这个数量是上代CMN-600产品的4倍。此外,片上系统缓存(SystemLevelCache,简称为SLC)的容量也从之前的最大128MB提升至512MB,节点数量提升至最多12x12也就是144个,每个核心的内存接口数量提升至最多40个,CCIX设备接口的数量提升至每核心32个。

虽然最大内核数量增加至256个,不过这256个核心也需要通过128个RN-F节点实现,每个节点通过CAL(ComponentAggregationLayer)来实现2个核心布局。ARM此前也曾经有过类似的配置,比如CMN-600最多只支持64个核心,但实际上最终产品拥有80个核心。ARM也提到,64个核心是指最多可以连接到RN-F的原生核心,如果用户通过CAL或者DSU(DynamiQ共享单元)连接,则可以容纳更多的核心。虽然Ampere公司从未解释过他们是如何布局更多核心的,但是ARM的解释应该是实现更多核心的唯一路径。

除了128个RN-F之外,CMN-700还支持最多128个HN-F主节点,也就是系统级缓存所在的节点。ARM宣称每个芯片的最大缓存可达512MB,也就是个每节点4MB。相比之下,上代产品也就是CMN-600只支持最多128MB,这和ARM之前公布的设计手册内容存在矛盾,比如ARM曾提到在64个节点上每个节点最多可以容纳4MB的緩存,最多可以容纳256MB。有关这里的矛盾,ARM还没有给出更多的解释。

无论如何,考虑到缓存高昂的成本和巨大的面积,一般来说用户不會在自己的产品中使用如此巨大的缓存。比如目前的Graviton2和AltraQ芯片在其网状设计中只有32MB的SLC。除了缓存容量外,在Mesh架构中的HN-F节点还包含尺寸较大的Snoop过滤器缓存。ARM公司宣称,在通常情况下,Snoop过滤器至少需要1.5倍于核心的聚合独占缓存大小,这意味着如果有80个核心,每个核心1MBL2缓存,除了32MB的SLC缓存外,至少在Mesh网络上需要120MB的Snoop过滤器缓存。这就解释了为什么AMD的SLC缓存比较小,因为AMD使用L2的影子标签来实现一致性,IOD核心则使用CCD的L3缓存的影子标签。相比之下,ARM在这里的设计显得面积效率不高。

另外,Mesh结构中最大的内存控制器,也就是CHISN-F节点已经从16个端口大幅度增加到40个端口。因为ARM设想在这些新的设计中采用更广泛的混合内存系统结构和设计方案。CCI X端口也从之前的4个增加至32个,这对一些分散部署的小芯片方案来说至关重要。

再来看看内存方面。CMN-700现在不仅允许最终产品增加更多的DDR内存控制器,还会集成HBM内存。比如前文提到的R h ea芯片,使用了4个HBM2E堆栈和4~6个DDR内存控制器。CMN-700的特点是能够处理此类内存并正确管理跨异构内存架构的流量和带宽。

ARM表示Mesh结构中的横截面带宽增加了三倍,这是通过更高的Mesh频率实现的。不仅如此,CMN-700允许节点之间的网格通道加倍。Mesh通道依旧采用了256b宽度,带有专用的读写端口,所以双倍设计则是每个方向都可以实现2x256b的带宽。目前Mesh网络的频率大约是2GHz,双通道的12x12网络将带来3TB/s的横截面带宽。在整个界面路由方面,目前这一代只支持2D路由。

最后再来看看有关CCIX 2.0的内容。CCIX 2.0对于未来的多芯片和多插座设计非常重要,因为它允许不使用PCIe交易层和物理层,转而采用更封闭的通用链接层和PHY。这主要是为了避免上一代类似设计的缺陷,那就是在多插座系统中要跨越所有不同的层和协议,将带来巨大的延迟惩罚。现在,CMN-700和CCIX 2.0连接有望解决那些非常高的延迟。值得注意的是,ARM现在的方案仍然需要在AMBA CHI和CCIX 2.0之间进行转换,虽然它比我们在CCIX 1.1实现中看到的表现要好得多,但它的性能可能仍然比不上英特尔和A M D解决方案中的完全本地协议处理。

最终的性能预测

最后我们来看看ARM针对Neoverse N2和Neoverse V1做出的最终实现预测。该预测和之前单纯的理论推测不同,和实际产品相关,比如采用的工艺或者最终频率、性能等。

ARM给出第一个关键信息是,如果采用台积电5nm工艺制造的话,NeoverseN2的最终实现面积、功率等应该和采用台积电7nm工艺制造的NeoverseN1基本相当,但是IPC性能提升了40%,频率提升了10%。当然,在这里需要台积电实现N5相当于N7工艺40%的功耗降低目标,这个目标定得非常高,因为现在N5工艺的产品比如苹果A14或者华为海思麒麟9000,和N7P相比,采用N5的它们仅仅带来了10%的功率优势,即使是N7P比N7有15%的优势,也意味着N5只有26%的优势,这显然还不能满足NeoverseN2的需求。

不过ARM也宣称,即使到现在,Neoverse N1的部分效能和功能都没有完全发挥,ARM希望累积更多的经验和实践,以便在下一代N5节点上实现更出色的性能和效能。

ARM还给出了一些数据用于对比NeoverseN2、NeoverseV1与“传统”处理器的性能,所谓的“传统”处理器是指24核心的至强8268和64核心的EPYC7742。另外,ARM还评估了2021年“传统”处理器可以达到的性能,给出的参照物是40核心的IceLake和64核心的EPYC7003。ARM的数据显示,在更多核心的情况下,NeoverseV1和NeoverseN2都能带来显著高于这些产品的性能。

另外,在单线程性能方面,ARM也给出一些评估,其认为Neoverse内核的性能是高于“传统”核心的。不过ARM的数据考察的是在云环境下,这种情况下处理器运行在虚拟CPU的模式下,AMD和英特尔SMT的设计自然会在性能上表现没那么出色。不过在实际应用中,很多云供应商并不区分虚拟CPU环境中的真实CPU核心和SMT核心,因此Amazon的Gravition2m6g实例在性能功耗比、性能线程等方面远远优于AMD和英特尔产品。

总的来看,ARM在Neoverse N2和Neoverse V1的架构设计上还是值得期待的,唯一的问题就是在5nm工艺下它能否达到如此高的性能功耗比提升,因为这关乎ARM新一代产品最终的效能。

猜你喜欢
功耗内存条目
基于任务映射的暗硅芯片功耗预算方法
外部高速缓存与非易失内存结合的混合内存体系结构特性评测
“春夏秋冬”的内存
《词诠》互见条目述略
Can we treat neurodegenerative diseases by preventing an age-related decline in microRNA expression?
揭开GPU功耗的面纱
数字电路功耗的分析及优化
IGBT模型优化及其在Buck变换器中的功耗分析
基于内存的地理信息访问技术
对县级二轮修志采用结构体式的思考