未来可期 中科院计算所“香山”高性能处理器架构浅析

2021-08-13 00:01张平
微型计算机 2021年14期
关键词:雁栖湖香山分支

张平

国内的处理器开发一直是一个值得讨论的话题。近年来,随着外部环境变化和自身产业发展需求,国内处理器自主研发、自主可控的呼声越来越高。中科院作为国内水平最高、产业最为齐全的研发机构,在自主处理器尤其是处理器架构方面做出了很多贡献。2021年,中科院计算所包云岗研究员又发布了全新的、采用RISC-V指令集的“香山”高性能处理器架构。那么,“香山”高性能处理器架构究竟怎么样?它的性能和设计大概相当于国际什么水平的产品呢?

2021年6月22日,中科院计算所包云岗、唐丹和徐易难三位研究人员公布了有关“香山”高性能架构(下简称“香山”)的相关内容。在“香山”公布之后,引发了业内高度关注。从行业角度来看,“香山”是目前国内少有的以RISC-V为主的高性能架构,并且它仅用了1年时间,就完成了整体架构设计。

“香山”高性能处理器架构的一些背景资料

香山的开发从2020年6月11日开始。实际上,在相关工作开始之前,研究人员就在探讨为什么CPU产业界没有出现一个像Linux那样开放和共享的开源主线,在经过多番讨论和深入的思考后,中科院计算所的研究人员选择了RISC-V作为基础指令集,并基于它开发全新的开源CPU架构。

有关RISC-V的相关内容,本刊在2018年6月的《处理器领域的“Linux”?一起走进开源免费架构RISC-V》 -文中有过比较详细的解读,虽然这篇文章已经是3年之前的了,但是对RISC-V的一些基本概念和知识的解读到现在也依1日有效。简单来说,RISC-V是一个标准、免费、开放的指令级架构,RISC-V基金会和企业SiFive对其进行维护,RISC-V研讨会用于展示和沟通有关RISC-V的发展和创意。在技术方面,RISC-V定义了一个基本的整数ISA和一系列標准扩展,还对处理器设计的大量内容进行了规范和定义。任何用户都可以使用RISC-V的相关架构内容,对其进行二次开发或者扩展,从而设计出符合自己需要的CPU架构。在没有购买私有IP的前提下,也不需要付费给RISC-V的相关组织。由于RISC-V的开放和免费特性,吸引了业内一大批厂商加入,包括英特尔、AMD、英伟达等我们耳熟能详的企业,自然也吸引了中科院计算所,基于RISC-V的特性开发一款全新的CPU架构产品。

在选择了RISC-V之后,香山的研发团队希望自己的架构能够被工业界广泛支持,同时也能够支持学术界实验创新想法,因此才将整个香山架构开源出来供大家使用。香山研发团队希望这个架构不断通过使用、扩展、再使用、再扩展,就像Linux那样,存活30年以上。

现在,香山整个核心代码库均以开源的方式存放在GitHub上,大家可以通过以下网址进行访问并查看相关资料:https://github.com/OpenXiangShan。另外,包云岗研究员针对香山架构的开发过程进行了详细解读。除了采用RISC-V和开源香山架构的内容外,他描述了有关香山架构研发的具体人数和研发的工作量。比如在一年时间内,香山架构的研发吸引了25位中科院计算所的同学和老师加入,发生了821次主分支代码合并,3296次代码提交( commit),5万余行代码,400多个文档,所有这些代码和文档、流程都公布在前文的GitHub链接中。在开源方面,香山架构采用了“木兰宽松许可”( MulanPSLv2),这是一个国内的开源许可证,整体许可内容和法律内容非常适合香山架构未来发展所需。现在,万事俱备,香山架构究竟有哪些秘密呢?

“香山”高性能处理器架构的演进和细节

中科院计算所希望香山架构能发展30年,那么就需要对这30年进行一些规划,并且作为高性能架构产品,香山架构还需要针对高性能架构未来的发展在如今就打好基础。

香山架构的演进

香山架构目前研发的核心架构被称为“雁栖湖”,这个架构是2020年6月开始建立,2021年4月RTL完成。目前预估的性能SPEC CPU 2006为每GHz 7分,现在的版本暂时采用台积电的28nm工艺,1.3GHz频率制造。

在“雁栖湖”之后,2021年3月香山架构启动了新一代“南湖”核心架构的研发,计划在2021年底完成。它的SPEC CPU 2006能够达到每GHz10分,相比雁栖湖核心架构提升大约43%左右,工艺则改用中芯国际的14nm,目标频率为2GHz。

接下来,香山架构还将以“X湖”为代号,实现持续的迭代优化,并最终达到ARM Cortex-A76的水平。

雁栖湖微架构解读

在这部分,本文将对香山高性能处理器架构的首发微架构——雁栖湖微架构进行简单的解读,并对比ARM Cortex-A76,具体来看看两者所存在的差异。

从宏观角度来看,雁栖湖微架构是一个11级流水线、6发射的微架构。值得注意的是,雁栖湖微架构前端发射部分的宽度非常宽。相比之下,Cortex-A76的前端发射宽度为4,采用了13级流水线设计。雁栖湖架构相比Cortex-A76,在整体设计上存在显著差异。

继续来看前端设计,雁栖湖架构前端部分的重点在于分支预测设计。其分支预测部分主要用于和取指单元紧密耦合,并和流水线同步。在设计上,雁栖架构的分支预测部分采用了三级覆盖预测、分支历史管理的方法。第一级采用了uBTB方案,第二级采用BTB+BIM方案,第三级则采用了TAGE-SC-L结合RAS和预译码的方案。值得一提的是第三级采用的TAGE-SC-L分支预测方案,其中TAGE全称是TAgged GEometric history length branch predictor,也就是标记几何历史长度分支预测期,这个分支预测器在2006的分支预测大赛获得了冠军,并且展示出了卓越的面积性能比,堪称目前最强的分支预测器之一。AMD在Zen 2架构上就引入了TAGE分支预测器,而英特尔可能在更早之前就已经选择TAGE作为自己的分支预测器的部分了。从已公布的资料来看,雁栖湖架构非常重视分支预测器的设计,三级结构和最先进的TAGE分支预测的配合,能够基本解决取指令的空泡问题,有效地提升整个CPU架构的效率。根据中科院计算所团队内部的评估,雁栖湖架构的分支预测器平均MPKI也就是每干条指令集的错误预测率相比其他设计降低了大约3%。

在指令缓存的设计上,雁栖湖架构的L1指令缓存采用了128KB,8通路的设计,而ITLB则采用32通路,另外还有专用的指令缓存,规格为16KB、4通路。另外拾取目标队列为48个队列深度、指令缓存也是48队列深度,前端解码器采用了6宽度的设计。相比之下,Cortex-A76的L1指令缓存容量为64KB,其余的类似设计并未公布详细参数。

在重命名和指令派遣阶段,雁栖湖架构设计了浮点重命名模块、整数重命名模块和拥有192个队列深度的重新排序缓存,浮点物理寄存器文件的队列深度为160,整数物理寄存器文件的队列深度也同样是160。这部分物理寄存器是对应到执行阶段单元的。

在执行阶段,雁栖湖架构的规模是比较大的。整数部分包括4个ALU、2个DMU和一个MISC,浮点部分则包括4个FMAC和2个FMISC,地址解码和数据写回方面设置了2个AGULD和2个AGU ST。雁栖湖架构特别对浮点除法和开方器进行了优化。和Cortex-A76对比来看,Cortex-A76整数部分只有2个ALU和1个ALU/MAC/DIV单元,以及1个独立的分支单元,浮点部分只有1个可以执行FMUL/FADD/FDIV/IMAC的复杂浮点单元和1个执行FMUL/FADD/ALU的单元。

这样看来,雁栖湖架构在后端执行方面要比Cortex-A76的规模大一些,并且大量采用简单功能单元,而Cortex-A76则相对规模较小,但是大量采用复杂功能单元。这显示了两者不同的设计取向。相对应的,雁栖湖架构的前端也是为这种较大规模的执行单元设计的,比如发射宽度为6,而Cortex-A76的发射宽度为4。当然,这部分设计并不能说明两者孰优孰劣,目前来看雁栖湖架构还只是初代版本,在设计经验和性能方面还有很大的上升空間。相对ARM这种在CPU微架构设计的“千年老妖”来说,雁栖湖架构在现阶段最重要的任务是完成架构设计,并通过架构不断迭代提高性能。

最后再来看—下雁栖湖架构的内存部分。这部分包括1个64队列深度的读取排队单元和同样为64队列深度的存储排队单元,以及16x64Bit的存储缓存。雁栖湖架构设计了1个32KB、8通路的数据缓存用于缓冲所有的内存数据,这个缓存到DTLB的速率是2x8Bit每周期、到读取队列单元的速度是每周期64Bit,到存储缓存的速度也是每周期64Bit。相比之下,Cortex-A76的数据缓存容量为64KB,没有采用存储缓存设计。雁栖湖架构的L2缓存为1MB、8通路,这个缓存容量在面向高性能设计的架构中并不算大,这可能和整体架构的设计目标有关。

总的来看,整个雁栖湖微架构的设计具有独特的创意和思想,尤其是前端6发射、改进的分支预测器、后端执行单元的方案选择等,都让人看到了国内微架构研发团队的实力,非常值得期待。

香山架构的雁栖湖微架构性能和对比

前文提到,目前雁栖湖架构的性能大概在SPEC CPU 2006中每GHz达到了7分,未来的南湖架构可以达到10分。相比目前主流的ARM处理器架构,这个成绩算是什么水平呢?

在文章中,雁栖湖微架构的研发团队没有说明测试的数据是SPEC CPU 2006的整数还是浮点部分,不过业内通常以整数部分的测试来进行对比,这里本文就默认雁栖湖微架构也是运行的SPECint 2006的测试。需要注意的是,这里没有考虑实现这样性能的雁栖湖微架构的每瓦特性能、每晶体管性能和最终的每平方毫米性能,而这些具体的参数会影响到整个架构的商业化和实际可达性能,本文在这里仅仅单纯对性能,不考虑其他任何变量。

用于对比的数据来自GoldenReviewer,这是一家海外的测试团队,测试了Cortex-A76、Cortex-A77、Cortex-A78和Cortex-X1等不同架构、不同处理器的SPECint2006性能。从他们的测试数据来看,Cortex-A76架构在SPECint 2006的每GHz性能大约是10分左右,普遍在10.0 2-10.2之间,最低也有8.6分的产品,但那是作为中等核心,可能存在缓存削减的情况。Cortex-A77的成绩大约在12.2-11.2之间,Cortex-A78则在1.275-13.15之间,Cortex-X1则能达到13.65-15.13。

目前,雁栖湖微架构在同等条件下分数为7分,相比Cortex-A76差距大约还有43%,下一代南湖微架构基本上就可以赶上Cortex-A76了,都是10分左右。不过,目前ARM Cortex-X1可以达到最高15分,最新的Cortex-X2应该可以提升至17-19分左右,以南湖10分的水平和它们相比,差距还是比较大的。更不要说苹果的Firestrom微架构整体水平显然超越了Cortex-X2,因此香山架构还需要加紧努力追赶国际先进水平。香山架构团队自己也认为,目前的架构性能依旧比不上多年前的Cortex-A73,要知道Cortex-A73只是一个2发射的微架构。因此在整体核心架构设计上,香山架构现有的雁栖湖微架构只是一个开始。

除了性能外,在工艺方面雁栖湖微架构也存在掣肘。目前雁栖湖微架构和后期的南湖微架构能够获得的最先进工艺只有SIMC的14nm,这和目前国际主流的5nm乃至3nm差距很大。不过研发团队解释道,自己在28nm工艺下只能运行在1.3GHz,并不是由于台积电的工艺问题,而是和架构设计有关,这个可能和香山架构流水线级数较少、工艺实现上缺乏相对应的高频率设置有关。

未来可期的香山架构

到这里,本文对香山微架构的粗浅解读就告一段落。实际上在包云岗研究员的文章中还介绍了大量有关快速开发和测试的内容,由于和本文关心的架构、性能不是很相关,就暂且略去,有兴趣的读者可以去阅读原文。从本文的介绍以及香山架构、研发团队现有的表现来看,香山架构整体设计还是颇为独特的,初次亮相就体现了一个自主研发的高性能微处理器架构所应有的方方面面,并且具有非常强的成长性。可以确定的是,未来随着香山架构内部设计的不断演进,其性能还会持续增长,也有可能某天就突然来到我们身边,成为RISC-V世界的主流高性能架构,被使用在我们的手机、平板、智能电视机中,想想还是颇令人期待的。

猜你喜欢
雁栖湖香山分支
北京香山
游香山
巧分支与枝
雁栖湖古今探幽
香山峰会的新期待
一类拟齐次多项式中心的极限环分支
“生态会都 醉美雁栖湖”首届全国旅游摄影大赛获奖名单
战略思维提升咨询服务价值——以怀柔雁栖湖国际会都项目为例
雁栖湖,汉唐风
香山二老