龙芯开源社区

 找回密码
 注册新用户(newuser)
查看: 897|回复: 0

[两万字特稿]致龙芯15周年 胡伟武披露龙芯3号开发历程(一)

[复制链接]
发表于 2016-10-31 22:33:48 | 显示全部楼层 |阅读模式
近日,龙芯中科宣布3A3000四核处理器芯片完成流片并通过系统测试。根据现有的测试结果,龙芯3A3000达到了预定的设计性能目标。其中,综合计算性能方面,在1.5GHz主频下,GCC编译的SPEC CPU 2006定点和浮点单核分值分别超过11分和10分;访存性能方面,Steam分值超过13GBps。 龙芯3A3000的流片成功,标志着我国自主研发的高性能微处理器芯片,可以超越目前引进的同类芯片性能。龙芯CPU首席科学家胡伟武撰文披露了龙芯3号开发的历程。

2016年是红军长征胜利80周年,2016年研制成功的龙芯3A3000处理器即以CZ80命名,每颗芯片的硅片上都刻有CZ80字样。

1936年10月,红一、二、四方面军经过艰苦卓绝的努力,三大主力会师,开创了中国革命的新局面。它雄辩地表明,只要坚持理想,实事求是,中国共产党完全有能力摧坚于正锐、挽澜于极危,从重大挫折中走出来。

2016年10月,以长征胜利80周年命名为CZ80的龙芯3A3000处理器研制成功。它雄辩地表明,只要坚持自主研发,进行持续改进,自主研发的CPU性能完全可以超过引进技术的CPU,满足自主信息化需求。

2016年10月7日,我怀着虔诚的心情走进毛主席纪念堂,向毛主席汇报龙芯3A3000的研制成功。步出毛主席纪念堂,我感慨万千。当十年前我开始龙芯3号研制时,完全没有想到龙芯3号系列CPU发展道路之曲折,奋斗之艰辛,付出之巨大。

2006年9月13日,以长征胜利70周年命名为CZ70的龙芯2E通过科技部组织的验收,时任科技部部长徐冠华亲自参加了龙芯2E的验收会。龙芯2E的研制是“十五”末国家863计划紧急安排的一个任务。当时“汉芯”造假事件被曝光,加上“十五”863计划早期支持的龙芯2C没有达到合同要求的SPEC CPU2000分值300分的目标,自主处理器研发受到普遍质疑。2005年4月,科技部高新司领导把我叫到办公室,问我到2005年年底前能不能完成863计划“十五”初制定的主频1GHz、SPEC CPU2000分值达到500分的目标。我说剩下不到一年时间,肯定来不及。他说根据有关规定,项目时间到期后三个月内(即2006年3月底前)提出验收申请就算按时完成。我硬着头皮接了该任务,因为我知道如果“十五”的任务完不成,那“十一五”国家是不是还支持自主CPU研发就成问题。经过艰苦的努力,龙芯2E在2005年11月底交付流片(把设计好的技术文件交给芯片生产厂家进行生产),2006年3月18日流片成功,达到了技术指标。虽然达到这些指标有些勉强(SPEC CPU2000分值达到500分是计算所的编译组做了很多编译优化实现的,但SPEC CPU的测试是允许进行编译优化的),但毕竟完成了指标。龙芯2E的意义从徐冠华部长参加完验收会后接受新闻联播记者采访时说的一句话可以看出:龙芯2E的成功表明,我国在“十五”期间安排的自主CPU研发是成功的。这也为“十一五”期间国家继续支持自主CPU研发打下了基础。

2005年深秋,利用龙芯2E流片后等待芯片回来的时间我带着部分龙芯课题组的骨干在香山别墅讨论龙芯3号的结构方案。香山别墅和香山饭店一样在香山公园内,但比香山饭店便宜而且清静。香山别墅三天讨论的成果是基本明确了龙芯3号系列CPU的可伸缩互连结构以及基于目录的Cache一致性协议。龙芯3号的互连结构中,每个结点四个处理器核通过交叉开关进行全相连,结点间(不论片上还是片间)通过可伸缩的mesh网络相连;多核的Cache一致性采用基于目录的一致性协议,目录设置在片上共享的最后一级Cache(LLC)上。上述结构有别于当时主流的环状多核互连以及基于侦听的Cache一致性协议。现在看来,该结构是成功的,目前商用主流处理器随着核数的增加也越来越多采用可伸缩的互连结构以及基于目录的Cache一致性协议。

在香山别墅的讨论中还明确了龙芯3号片内集成内存控制器以及HyperTransport(简称HT)接口。HT是AMD主推的系统总线接口。当时计算所高性能中心与AMD合作紧密,希望我们使用HT接口。此外HT接口比较开放,只要每年交5000美元就可以用于商业应用,但AMD开放的HT接口不支持多片互连的Cache一致性协议,我们自己进行了扩充。曾经有一段时间,我后悔选择了HT总线,觉得HT总线不如PCIE总线普及,一是HT总线没有现成的PHY(片内高速接口模块)可以买到,每次工艺升级都需要定制HT的PHY,而PCIE的PHY有很多;二是PCIE接口的外围器件很多,而HT接口的桥片只有AMD有。但现在觉得选用HT是对的。HT是系统总线,协议简单高效,相当于Intel的QPI系统总线,而PCIE是IO总线,通过HT总线可以方便地把多片龙芯3号直连起来形成多路服务器。虽然每次工艺升级都要定制HT PHY,但可以使龙芯CPU不依赖别人的IP,自主性强。龙芯3号所有CPU中,没有一款CPU需要到厂家merge第三方IP。尤其是龙芯3A2000和3A3000,除了厂家提供的标准单元库、单/双端口RAM以及低速IO单元,每一行代码(包括CPU核、内存控制器、HT控制器、互连网络等)以及每一个定制模块(包括多端口寄存器堆、锁相环、HT PHY、DDR2/3 PHY等)都自主设计。至于外围桥片,龙芯已经开始研制并提供外围桥片,桥片上支持足够多的PCIE接口。以后不论AMD是否继续发展HT接口,龙芯都能自成体系往前走了。

香山别墅会议的另外一个成果是明确了龙芯抗辐照CPU的发展。有一天晚上8点左右,我们正在会议室热烈地讨论龙芯3号的结构,当时在计算所科研处工作的夏洪流和傅信国给我打电话说是要来跟我谈一个项目的事。他们到香山别墅已是晚上9点多,我们就坐在香山别墅的走廊尽头谈,他们说科学院有一个抗辐照CPU的预研项目,希望龙芯课题组来承担。我刚开始不愿意做,结果他们好说歹说地让我勉强答应了,当时的一个理由是领导每年对他们争取的项目经费有要求,我如果不做这个抗辐照CPU项目,他们的任务就完不成了,我头脑一热就答应了。现在龙芯抗辐照CPU已经随着以北斗为代表的多颗卫星在天空翱翔,每年还为龙芯公司带来较可观的收入,成为龙芯公司的战略产品并开始走向系列化。真是非常感谢夏洪流和傅信国那天晚上的苦口婆心。

在龙芯3号结构基本确定后就展开了龙芯3号CPU的研发。但当时“十五”863课题结束了,“十一五”“核高基”(即“核心电子器件、高端通用芯片和基础软件产品”重大专项)课题迟迟启动不了。为此,科学院对龙芯3号的研制给了500万元的前期经费支持(执行期限2007年1月到2007年12月)。科技部高新司冯记春司长得知龙芯3号的第一款芯片龙芯3A1000已经基本完成设计,但缺少流片费时,在863计划内紧急安排了2000万的经费支持龙芯3号的研制(执行期限2008年1月到2010年12月)。原计算所所长李国杰院士曾经在计算所中层干部会上当众点我的名说,“胡伟武,你不能以任何经费的理由放缓龙芯3号的研制,计算所就是砸锅卖铁也要支持龙芯的研发”,并在所内设立了一个经费没有封顶的课题,到2010年龙芯第一笔“核高基”课题经费到账时,龙芯课题组已经预支了计算所七、八千万元经费。

在龙芯3号研制过程中,作为中法两国在IT领域战略合作的一部分,科技部安排龙芯CPU在意法半导体流片。2006年10月26日,在胡锦涛总书记和希拉克总统共同见证下,中国科学院与意法半导体在人民大会堂签署了关于龙芯CPU战略合作的文件。基于龙芯2E的成功,意法半导体还花三百多万美元授权费购买了龙芯2号系列产品的授权,其中龙芯的第一个产品芯片龙芯2F于2007年7月31日流片成功,目前仍在大量应用中。后来意法半导体由于自身业务的原因终止了购买龙芯2号系列的产品授权,计算所收回了龙芯2号的产品权利并同意不再收取剩余的三分之一左右授权费,但我们从龙芯2F的研制中学会了意法半导体的芯片质量管理,学会如何把一个样品变成产品。龙芯CPU在意法半导体的流片一直延续了下来,龙芯3A1000即使用意法半导体的65nm工艺流片。

不记得经历了多少加班加点,龙芯3A1000于2008年底交付流片。只记得流片前的几个月每天晚上十点开例会安排工作。晚上十点例会是非常高效的一种工作方法,会后大家把有关设计在EDA服务器上跑起来再回家,第二天早上上班时刚好跑出结果来;如果是早上上班后开始在EDA服务器上跑,基本上大半天就在等待服务器运行出结果中度过。在此后龙芯CPU问题的攻关中,一直沿袭了晚上例会安排工作的方法。

2009年5月20日龙芯3A1000晶圆生产下线,9月28日样片回来,成功启动操作系统,主频800MHz-1GHz。这是龙芯CPU第一次启动多核操作系统,免不了调一通。印象最深刻的是10月2日晚上熬了个通宵,一起的有王剑等人,刚开始是挨个核跑单核操作系统,把每个核都跑一遍,再把多核操作系统搞稳定,一直到第二天早上才弄完。

中国科学技术大学的陈国良院士曾经在2007年用三百多颗龙芯2F搭建了峰值性能达到1TetaFLOPS的高性能计算机KD50。在龙芯3A1000出来以后又用80颗龙芯3A1000搭建了KD60高性能计算机。在KD60运行LINPACK过程中,总是出现偶发性错误。这个错误如果单个芯片跑一个月也碰不上一次,只有像KD60这样80多片一起跑才会一天碰到一次。有三个多月的时间,我们一直进行各种尝试,试图定位该错误并明确其机理。现在只记得2010年春节的大年三十晚上还在跟当时负责软件的高翔商量进行各种尝试,缩小搜索范围。一直到春节后才定位了这个错误,错误的原因是当访问Cache失效,从内存回填(Refill)数据时,同时回填一级和二级Cache,通常为了提高性能,这是应该的。但在某种极端情况下出现了错误,即二级Cache的回填由于二级Cache忙需要等待,而处理器核得到一级Cache回填数据后继续运行,该数据被修改后再从一级Cache中替换出来写回二级Cache,替换回来的新数据写到二级Cache后,从内存回来的老数据再回填二级Cache把新数据冲掉了,从而引起错误。这个问题以及其它的小问题导致龙芯3A1000进行了第一次改版并于2010年5月中旬流片,10月底第一次改版流片成功,然后开始了小批量生产。

龙芯3A1000在2012年又进行了第二次改版。第二次改版主要是双路直连时在特定访问序列下导致两片间的互连网络死锁。大致机理是HT协议的虚通道只有三个,分别是POST、NONPOST、RESPONSE,而龙芯的片上网络协议AXI有五个实通道,分别是读请求、写请求、写数据、读响应、写响应。于是在通过HT传输Cache一致性协议时,就将写请求与写数据合并一个通道,读响应与写响应合并一个通道传输。Cache一致性协议要求写响应不能被堵,而读响应通道发出的二级Cache给一级Cache的一致性请求有时会因为一级Cache处理不过来而被堵住,这时就会顺带堵死写响应通道,导致死锁。当时解决的办法是在HT原有三个虚通道的基础上增加了第四个虚通道并且允许写命令与写数据之间插入写响应包。3A1000的第二次改版还解决了HT互连时一个异步握手的问题。3A1000的第二次改版于2012年2月下旬流片,2012年8月中旬流片成功。至此龙芯3A1000就很稳定了,至今还是龙芯销售的一款重要芯片,尤其是在工控领域。

本版积分规则

小黑屋|手机版|Archiver|Lemote Inc.  

GMT+8, 2019-3-26 06:54 , Processed in 0.171890 second(s), 18 queries .

快速回复 返回顶部 返回列表