微型计算机杂志:解析最新龙芯GS464E处理器架构

来源:百度文库 编辑:超级军网 时间:2024/05/03 20:35:26
http://www.mcplive.cn/index.php/article/index/id/14554
坦白来说,龙芯近年来在舆论中受到围攻已经不是新闻,今年初一篇名为《国产龙芯究竟水平如何?》的文章在网上掀起轩然大波,直指号称面向高性能服务器开发的龙芯3B-1500处理器尚不如今日ARM Cortex-A57手机处理器。耐人寻味的是,不到一个月过后,该文的作者再次撰写了一篇《详解,新一代“龙芯”能否挑战Core i7?》,笔锋一转为尚未正式公开露面的下一代龙芯大唱赞歌。
在不诉诸阴谋论的前提下,笔者认为这样剧烈起伏的舆情其实都指向一个事实:对于龙芯的现状,其实外界并不了解,一般公众并不具备从龙芯组公开发表的艰深论文中推断其结构设计水平的能力,亦并不知晓编译器,相关软件系统与所用基准测试程序的偏好,因此对性能的对比也多有偏颇。
而被其描述为可以在IPC上与Ivy Bridge一战的新一代龙芯微结构GS464E,虽然相比上一代产品取得了突破性的进步,但在频率指标取得突破之前,又将凭借什么与Intel抗衡呢?笔者将对龙芯目前产品布局给予简单介绍,接着从即将面世的新一代GS464E架构开始进行深度技术解读,仔细分析哪些地方的设计有望比肩国际主流水准,而哪些地方仍然存在不足,再回到一些外界对龙芯认识有所偏差的地方上来提供一个新的视角,以馈读者。http://www.mcplive.cn/index.php/article/index/id/14554
坦白来说,龙芯近年来在舆论中受到围攻已经不是新闻,今年初一篇名为《国产龙芯究竟水平如何?》的文章在网上掀起轩然大波,直指号称面向高性能服务器开发的龙芯3B-1500处理器尚不如今日ARM Cortex-A57手机处理器。耐人寻味的是,不到一个月过后,该文的作者再次撰写了一篇《详解,新一代“龙芯”能否挑战Core i7?》,笔锋一转为尚未正式公开露面的下一代龙芯大唱赞歌。
在不诉诸阴谋论的前提下,笔者认为这样剧烈起伏的舆情其实都指向一个事实:对于龙芯的现状,其实外界并不了解,一般公众并不具备从龙芯组公开发表的艰深论文中推断其结构设计水平的能力,亦并不知晓编译器,相关软件系统与所用基准测试程序的偏好,因此对性能的对比也多有偏颇。
而被其描述为可以在IPC上与Ivy Bridge一战的新一代龙芯微结构GS464E,虽然相比上一代产品取得了突破性的进步,但在频率指标取得突破之前,又将凭借什么与Intel抗衡呢?笔者将对龙芯目前产品布局给予简单介绍,接着从即将面世的新一代GS464E架构开始进行深度技术解读,仔细分析哪些地方的设计有望比肩国际主流水准,而哪些地方仍然存在不足,再回到一些外界对龙芯认识有所偏差的地方上来提供一个新的视角,以馈读者。
因此笔者认为,在坚持高性能设计并且想要获取市场支持的前提下,选择MIPS/DEC Alpha是一个正确的决策,以今日ARM的崛起来拷问当时的选择难免有马后炮的嫌疑,无人能够超越历史局限预估到十年之后的未来。正像无人能够预见到2000年正踩在钢丝线上生死未卜的苹果公司能够在十年后登上浪潮之巅一样。但是历史终究已成历史,今日龙芯面临的困境也是众人皆知的,那么龙芯团队能不能实现自己当初的目标,他们拿出的新一代GS464E又是什么样的呢?
从取指部件部分的框架图来粗略判断,前端部分的效率仍是喜忧参半。
令人欣喜的地方有三个,在这三个方面龙芯GS464E的结构设计都达到甚至超越了国际水准。第一,指令缓存的大小达到了64KB(四路组关联),超越了IBM Power7的32KB(四路组关联);第二,取指宽度已经达到了每周期8条指令,考虑到龙芯以MIPS32作为基础指令集,以每条指令32位宽计算,一级指令缓存的取指宽度达到了每周期32字节,而Intel Haswell处理器的一级指令缓存仅能达到每周期16字节的吞吐率(但存储解码后指令的uop cache能达到32字节/周期的吞吐率);第三,GS464E也加入了Intel从SandyBridge期间开始配备的循环检测器和循环指令缓冲区,这种结构设计允许CPU在不断取指令的同时,去识别哪些指令构成了一个循环,在发现循环再次出现的时候关掉指令缓存,仅从循环缓冲区中取用。笔者相信GS464E的循环缓冲区设计从Intel的SandyBridge中获取了一些灵感,巧妙地把它与负责解耦取指部分和解码部分的Instruction Queue做成了一个模块,与SandyBridge一样支持存储56条内层循环指令。
而令人担心的地方也有三个。第一,当一级指令缓存发生缺失时,缺失的地址会送给缓存失效队列进行处理。引入缓存失效队列(学界通称为MSHR)来负责从下层存储器取出缺失的和即将使用的预取数据本是早已成为标准配置的做法,但龙芯的缓存失效队列却由一级指令缓存和一级数据缓存共享,并且这个失效队列仅有16项,意味着仅能存储16个失效请求。笔者预计龙芯此后的设计将会尝试将失效队列分离或是提高容量;第二,从框架上看,GS464E的指令TLB部分距离国际水准仍有差距,Intel在Sandy Bridge微架构上就实现了144项四路组关联的一级指令TLB,AMD的Bulldozer也实现了72项全相连一级指令TLB和512项四路组关联TLB的搭配,而龙芯仅有64项全相连一级指令TLB(一级指令TLB的大小较难提升),且并未出现二级指令TLB的设计,指令TLB覆盖范围的弱势可能会加剧指令缓存缺失之后的性能损失;第三,IBM Power7的一级指令缓存部分与龙芯颇为相似,但是加入了先行路选择技术,推测性地只开启指令缓存中将要被访问的一个部分而不是全部,从而削减功耗,在此之外又非常激进地将一级指令缓存切分为16个bank,尽量避免读写冲突。而龙芯的指令缓存部分并未提及路预测技术的加入,也仅仅切分为4个bank。综合优势与劣势来看,尚不能简单断言龙芯的取指令效率能够比肩国际主流水准。
再来看前端中另一个不容忽视的模块—分支预测器。GS464E的分支预测器经过大幅改造,不难看出是投入了血本、大幅度提高了各项规格。从表面参数上来看,它已经能够比肩Sandy Bridge的水准—锦标赛分支预测器,返回地址栈,间接跳转预测器,一应俱全。锦标赛分支预测器有三大主要内建部件—专门根据局部历史预测分支走向的局部历史表(Local Branch History Table),专门根据全局历史分支走向的全局历史表(Global Branch History Table),以及专门负责决断前两者哪一个准确率更高的全局选择表(GSEL)。三者的存储空间都达到了16K项的大小,推测与Sandy Bridge齐平,也超过了IBM Power7。专门负责预测函数调用返回地址的返回地址栈(Return Address Stack)能够存储16项,与AMD Jaguar和IBM Power7齐平。在基本参数已经追平国际水准的情况下,比拼分支预测准确率的因素就落在了其他细节设计上,例如返回栈是否支持在错误预测下的栈修复、锦标赛预测器是否加入了其他设计技巧降低历史表的访问冲突等等。笔者谨慎乐观地认为,只要这些细节设计不出现明显失误,GS464E的分支预测能力将可以与Intel的设计一决雌雄。
仍有落后 新一代GS464E之乱序执行引擎
尽管同为乱序四发射的框架,但从表1来看,GS464E的乱序执行引擎部分的基本参数相比Intel的Sandy Bridge仍有显著落后。首先,重定序队列(Re-Order Buffer,ROB)决定了乱序执行引擎能够从多大的指令范围内抽取指令级并行度、挑选不相干指令进行乱序执行。而整数物理寄存器数量决定了最多容纳多少次整数寄存器重命名,在这些参数上龙芯仍有较大差距需要追赶。除此之外,龙芯在发射队列上还是选择了设计难度较小、容易提高容量、但是也容易导致资源配置不均衡的分离式发射队列设计。AMD和MIPS历史上都曾使用过这种设计,在这种设计里面所有允许乱序执行的指令都是分类型分开存储的,比如整数指令存储在自己的独立发射队列中,浮点指令存储在另一个独立发射队列中,碰到整数密集型的程序把整数队列占满了之后,浮点发射队列可能是全空的。

与之相对的设计是集中式发射队列,集中式的发射队列设计复杂,极难大幅提高容量,但是所有的指令都存储在同一个地方,避免了空置的情况,这是与分布式发射队列不同的权衡。在这种设计上,Intel已经浸淫多年,Intel的第一代乱序多发射微结构P6就是采用集中式发射队列,从Pentium4的Netburst开始改成了分布式发射队列,从Core开始又改回了集中式发射队列,并一直坚持至今,堪称是集中式发射队列设计的忠实拥簇。在Core时代,Intel的集中式发射队列容量仅为32条指令,而AMD的K8所配备的分布式发射队列的总容量达到了60条指令,几乎多了一倍,但强大的Intel硬生生地将自己的发射队列容量逐年提高,终于在Haswell上实现了72条目的集中式发射队列和8发射端口的设计。在不存在并发条件限制的情况下,单单这一个集中式发射队列每周期就可以分派8条允许乱序执行的指令到各个执行单元,可谓是集中式发射队列的登峰造极之作。龙芯在论文中并未透露自己的分派宽度,但从发射队列和执行单元的配置来看,笔者估计可能在4~6条指令之间。
当然,在具体的细节上,龙芯GS464E这一边的设计也有值得称道的部分。所有频繁触及的执行单元都能够单周期完成操作,并通过激进的数据前递设计在数据依赖的情况下支持背靠背发射,访存流水线支持访存指令的推测性发射和指令回放(一种较为困难的访存优化技巧,可以缩短访存延迟)。更值得称赞的是,物理寄存器堆(PRF)和基于指针的发射队列处理逻辑也被早早地引入,这是一条曾经被Intel放弃的路线,后来为了引入AVX指令集又不得不选择相同做法,龙芯非常聪明地避开了Intel曾经走过的弯路。

但是这些细节改进并不足以帮助GS464E在乱序执行能力上叫板Core i7,龙芯需要再花费多长时间才能达到Haswell的乱序执行引擎的设计水平,就要看龙芯的物理和电路层设计水准能不能够撑得住规模更大的发射队列、更加复杂的数据前递网络以及支持更多并发读写口的物理寄存器堆,这些关键结构是支撑乱序执行引擎的设计重点所在。
同频性能接近Sandy Bridge   实测数据分析
龙芯目前公布的实测数据主要是在RTL仿真以及硬件加速仿真验证平台上取得的,设定频率为1GHz,如果实际芯片能够运行在1GHz上,并且接口时序设定正确,它们和实际芯片运行性能是没有什么差别的。

从表2可以看到,龙芯GS464E号称访存性能即内存性能提高了10~20倍。据悉前代龙芯过于注重核心微结构,内存控制器设计则过于轻视,甚至连突发传输模式的支持都没有做好,因此内存性能非常低下。而这一次流式访存性能暴涨则也是因为修正了内存控制器的bug,同时加上了激进的多级预取机制的结果。以Memcpy和Stream-Copy两个测试子项来看,龙芯的内存控制器在操作双通道DDR3-1000时,在局部性较好的流式访问上距离Ivy Bridge + 单通道DDR3 1333的平台还有20%左右的差距。

同时龙芯公布了Whetstone,Coremark,Dhrystone等几个小型benchmark的测试结果,如表3所示。一般来说这几个测试结果的可信度不如Spec,PARSEC等大型测试程序。但是这种小型测试能够轻松地在龙芯RTL测试平台上运行,该测试平台可以给定静态时序分析结果,并通过RTL代码仿真一颗芯片,而无需流片,使用更加方便。
所幸龙芯还公布了Spec CPU 2000的测试结果,如表4所示目前GS464E在1GHz频率下的整数性能得分为762,相对上一代涨幅104%左右,浮点性能达到1125分,提升幅度更加惊人,达到278%。其整体性能已经非常接近同为1GHz频率,采用Sandy Bridge核心的Core i5 2300。若以Spec CPU 2000的初步测试结果作粗略估计,龙芯的IPC还是比较乐观的,但从另一面看龙芯还不能提前开香槟庆祝。从最新披露的消息来看,基于GS464E架构的龙芯处理器主要有3A2000、3B2000两种。其中龙芯3A2000为单路四核桌面版本,龙芯3B2000则是支持双路八核、四路十六核的服务器版本。由于是新架构的第一版产品,制造工艺仍旧是40nm,主频只有1GHz左右。考虑到频率只有当今Intel、AMD处理器的1/3,因此新一代龙芯处理器总体的绝对性能大约仅为Haswell的20%~30%左右。何时能采用更先进的28nm工艺生产,能否在新架构上大幅提升工作频率?还是一个大大的问号,龙芯仍有比较长的路要走。
结语:成功不可能一蹴而就
据笔者了解到的消息,龙芯目前已经打入了军方和航天市场,这两个市场都对安全性极为重视,性能要求则相对比较宽松,龙芯的抗辐照版本问世后也装上了北斗卫星。中国那段由国家领导人亲自出马谈判进口抗辐照芯片的过去可以宣告埋入历史尘埃了,但龙芯要在民用市场上对抗Intel和AMD还是很难,毕竟绝对性能上差距过大,在短期内恐怕仍无可能。

龙芯项目启动迄今已过十五年,有过明察秋毫拒绝使用超长指令字结构的睿智,但也同样有过不知深浅“一步到位”的狂热;有过在媒体上放话打败Intel的自负,也有过公开承认性能差距过大的诚恳,这些都已经是龙芯成长历程中被凝固的笔墨。时过境迁,笔者认为,对待今日龙芯的进步,我们需要抛开过往,保持足够冷静和理智,如计算所的前任所长李国杰院士2004年就在《科技日报》上撰文指出的那样:“我国CPU/SoC设计任重道远”,“今后若干年内,龙芯CPU的性能只能做到国外最高水平CPU性能的一半左右”,要时刻清醒地认识到在这个国外已经发展超过五十年(以乱序执行发明的时间计算)。有十万至数十万顶尖水平从业者支撑的行业里面,龙芯以区区数百人的规模和几十分之一到几百分之一的投入做到几分之一的性能已经足堪自豪,至于追平和赶超,还是需要耐心。

近日中国计算机协会举办的走进龙芯活动中,龙芯项目负责人胡伟武坦诚“乞丐与龙王比宝,越比越落后”,希望“重视整机性能,在每一个局部都不如别人的情况下实现整机性能的反超”,龙芯目前已经将自己走向“支柱型CPU产业”的规划划到了2020~2030年,这将会是一场旷日持久的大战。如果成功了,中国CPU产业将多出一位内能自给自足,外能力拼英美的巨头,即便失败,以龙芯项目这些年的投入,以及作为第一个国产乱序多发射高性能CPU的先驱所贡献的经验和培养的人才来说,亦是能够有所慰籍的。


这篇文章有几个错误外,其他看起来好像是那么回事。错误1,SNB的指令L1TLB是128项,不是144.错误2,GS464E使用单通道DDR1000跟IVY比较的,不是双通道。错误3,Haswell上实现了72条目的集中式发射队列,不是72,是60条目。
楼5的表,访存队列有疑问

这篇文章有几个错误外,其他看起来好像是那么回事。错误1,SNB的指令L1TLB是128项,不是144.错误2,GS464E使用单通道DDR1000跟IVY比较的,不是双通道。错误3,Haswell上实现了72条目的集中式发射队列,不是72,是60条目。
楼5的表,访存队列有疑问
哇塞塞!!!  一定要仔细阅读!!
核心硬件乱序资源:GS464接近或者相当于nehalem,跟压路机和推土机也接近。。。。。。
终于看到一篇比较专业同时又心平静气的评论了
微型计算机杂志很多年前就烂了,很久不看了。
继续等量产版的实测SPEC值
花落庭院 就是懂的好多;你是搞什么的?
花落庭院 发表于 2015-6-27 10:29
核心硬件乱序资源:GS464接近或者相当于nehalem,跟压路机和推土机也接近。。。。。。
nehalem是1代i7? 还是2代?
推土机和压路机分别是AMD的第一代/第二代模块化架构吧
mips64el 发表于 2015-6-27 13:55
花落庭院 就是懂的好多;你是搞什么的?
没看见我依专家的葫芦画小白的瓢。。。。。。。。。。。。。。。。。。。。
没看见我依专家的葫芦画小白的瓢。。。。。。。。。。。。。。。。。。。。
不得不承认的是,你对龙芯内部数据的了解要比这篇文章的作者,也就是知乎的那位要多不少。464e在gcc下跑762,他一开始都怀疑这数据有问题。
花落庭院 发表于 2015-6-27 17:03
没看见我依专家的葫芦画小白的瓢。。。。。。。。。。。。。。。。。。。。
你不会是龙芯内部人士吧?你关于龙芯的消息比一般人要多得多,还早的多
期待龙芯越走越好。
你不会是龙芯内部人士吧?你关于龙芯的消息比一般人要多得多,还早的多
不是内部 就是和内部有联系的发烧友
微型计算机杂志很多年前就烂了,很久不看了。
专业杂志都很落魄,白开水书籍看的人多。
SPEC 测试内容,尤其是通用CPU标志性能的定点测试,SPEC int 2000和SPEC int  2006内容介绍:
scybliyu 发表于 2015-6-28 01:59
专业杂志都很落魄,白开水书籍看的人多。
说真话的没人投广告,没有广告收入就靠卖杂志,到后面只有关门。
跟微型计算机同期出现的电脑高手,敢说真话,敢做真正的评测,到后面变成软件专刊,再后来没了
zmic777 发表于 2015-6-27 11:18
微型计算机杂志很多年前就烂了,很久不看了。
科普杂志,也无所谓烂不烂了;
虽然有几篇倾向性明显的烂文的确令人作呕。


微计作者提到GS464E的L1ITLB太小,小白感觉确实有很大问题:所以查了一些资料,发现SNB的L1ITLB是144项,(但是有3种页面大小,所以我看错了)nehalem是142项。又翻了GS464E的论文,发现GS464E的L2TLB是不是指令和数据共存?因为论文明确说明了查2级TLB的指令。。。。。。L1ITLB还有一个D2ITLB bus......

微计作者提到GS464E的L1ITLB太小,小白感觉确实有很大问题:所以查了一些资料,发现SNB的L1ITLB是144项,(但是有3种页面大小,所以我看错了)nehalem是142项。又翻了GS464E的论文,发现GS464E的L2TLB是不是指令和数据共存?因为论文明确说明了查2级TLB的指令。。。。。。L1ITLB还有一个D2ITLB bus......
花落庭院 发表于 2015-6-28 17:08
微计作者提到GS464E的L1ITLB太小,小白感觉确实有很大问题:所以查了一些资料,发现SNB的L1ITLB是144项,( ...
有些看不懂;你直接说结论吧

mips64el 发表于 2015-6-28 18:55
有些看不懂;你直接说结论吧

                       
应该是指令数据混合  L2TLB,L2指令数据混合缓存。不清楚作者是不是指纯L2ITLB。
mips64el 发表于 2015-6-28 18:55
有些看不懂;你直接说结论吧

                       
应该是指令数据混合  L2TLB,L2指令数据混合缓存。不清楚作者是不是指纯L2ITLB。
龙芯3A2000主板和龙芯3B2000服务器图片
花落庭院 发表于 2015-6-29 16:17
龙芯3A2000主板和龙芯3B2000服务器图片
这个黑盒子是个什么东西


这次龙芯的新CPU,能组建巨型机了不??

这次龙芯的新CPU,能组建巨型机了不??


大图





http://weibo.com/2049771057/Co2xPzw9N

大图





http://weibo.com/2049771057/Co2xPzw9N

ddeell72 发表于 2015-6-29 16:35
这次龙芯的新CPU,能组建巨型机了不??


申威1600    140g双精浮点  都能做神威

龙芯3b1500   192g浮点

3b1500都可以-_-#  何况2000

看建设单位有没有 为了国产化  牺牲性能的决心
ddeell72 发表于 2015-6-29 16:35
这次龙芯的新CPU,能组建巨型机了不??


申威1600    140g双精浮点  都能做神威

龙芯3b1500   192g浮点

3b1500都可以-_-#  何况2000

看建设单位有没有 为了国产化  牺牲性能的决心
申威1600    140g双精浮点  都能做神威

龙芯3b1500   192g浮点

3B1500说不定还真不可能做超算,因为其内存带宽太小;怎么和其它CPU高效的互联;而申威的内存带宽很大;SW1610是25.6*4, SW1600估计也不会太差;
申威1600    140g双精浮点  都能做神威

龙芯3b1500   192g浮点

估计曙光7000可能会大规模采用龙芯(龙芯3BX000,或者3C,如果有3C的话),因为曙光7000的处理器要采用自主技术(新闻说的)
mips64el 发表于 2015-6-29 18:37
估计曙光7000可能会大规模采用龙芯(龙芯3BX000,或者3C,如果有3C的话),因为曙光7000的处理器要采用自 ...

龙芯3B 1500的说明文里面 配图注解是龙芯3C
mips64el 发表于 2015-6-29 18:34
3B1500说不定还真不可能做超算,因为其内存带宽太小;怎么和其它CPU高效的互联;而申威的内存带宽很大;S ...
每颗龙芯3B1500都有双通道DDR3-1600 怎么会带宽太小?
CPU之间是靠两条16bit 1600mhz的hypertransport总线
ayanamei 发表于 2015-6-29 19:33
每颗龙芯3B1500都有双通道DDR3-1600 怎么会带宽太小?
CPU之间是靠两条16bit 1600mhz的hypertransport总 ...
内存带宽小是GS464/GS464V的通病(设计问题);这个是官方承认的。
ayanamei 发表于 2015-6-29 19:33
每颗龙芯3B1500都有双通道DDR3-1600 怎么会带宽太小?
CPU之间是靠两条16bit 1600mhz的hypertransport总 ...
HT总线是3.0以前的老版本;GS464E才用上3.0;
单核同主频测试性能达到INTEL I7处理器同等水平,为龙芯新一代高性能处理器主力产品。
内存带宽小是GS464/GS464V的通病(设计问题);这个是官方承认的。
曙光有龙芯3B内存性能测试 理论峰值DDR3-1333双通道都有4gb多的实测带宽 不算太糟糕

明天补资料给你  内存性能烂得过分的是GS464