致龙芯15周年 胡伟武披露龙芯3号开发历程
2016-10-25
近日,龙芯中科宣布3A3000四核处理器芯片完成流片并通过系统测试。根据现有的测试结果,龙芯3A3000达到了预定的设计性能目标。其中,综合计算性能方面,在1.5GHz主频下,GCC编译的SPECCPU2006定点和浮点单核分值分别超过11分和10分;访存性能方面,Steam分值超过13GBps。龙芯3A3000的流片成功,标志着我国自主研发的高性能微处理器芯片,可以超越目前引进的同类芯片性能。龙芯CPU首席科学家胡伟武撰文披露了龙芯3号开发的历程。
致龙芯15周年:胡伟武披露龙芯3号开发历程
龙芯3A3000芯片
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就很稳定了,至今还是龙芯销售的一款重要芯片,尤其是在工控领域。
现在回头看,龙芯3A1000的研制是成功的。3A1000是我国第一个四核CPU芯片。在3A1000的研制过程中,我们掌握了多核CPU的片内互连及Cache一致性技术,以及片间多路互连技术。直到今日,龙芯仍然是唯一能支持多路服务器的自主CPU。在最近国外CPU企业对中国企业的CPU技术授权中,支持多路服务器的技术受美国政府限制还是不能给中国的。龙芯3A1000的处理器核沿袭了龙芯2E和龙芯2F的处理器核结构,虽然在MIPS64兼容性方面有较大改进,性能只进行了局部优化。龙芯3A1000处理器核的性能略高于Pentium III的水平,在2006年龙芯2E刚出来时这个性能还说得过去。龙芯3A1000仍沿用该处理器核有点慢了,但在应用比较固定的很多领域还能用,按理说龙芯的下一款CPU应该致力于处理器核的性能优化,大幅度提高通用处理性能,但在学院派的思想主导下,随后的龙芯3B走了弯路,使龙芯遭受了挫折。
龙芯3B的研发得到“核高基”重大专项的支持,是在龙芯团队转型成立公司(龙芯中科技术有限公司)以及有关部门大力展开自主基础软硬件应用试点的背景下展开研制的。2010年把龙芯课题组转型成立公司是下了很大决心的,当时已认识到不能脚踩两只船,办企业和做研究不一样,即使呕心沥血,也是九死一生,因此一定要专心,要求绝大多数技术骨干都从计算所辞职。像张戈25岁就已经是副高职称,是学术上很有前途的苗子,也毅然从计算所辞职。下这么大决心,与我当时担任全国人大代表,对中央以企业作为创新主体,科技创新要为经济社会发展服务的精神非常了解有很大关系。尤其是在“十七大”报告中,传统的“科教文卫”不再单独作为一个板块,科技创新直接在经济发展的第一部分来描述,对我触动很大。龙芯公司的成立得到很多领导专家的支持。除了李国杰所长的大力支持外,路甬祥院长专门批示,要求科学院有关部门落实龙芯团队的股权激励。原国家外专局局长马俊如从2006年起就曾多次对我说,龙芯在科学院里面已经做得很好了,不能再好了,要想更好,就必须下海办企业;在成立企业后马局长又给了我很多指导。工信部的电子司司长丁文武也给了我很多鼓励。
龙芯3B的研发工作在2008年底龙芯3A交付流片后开始全面展开。首款龙芯3B1000继续基于65nm工艺,目标主频800MHz-1GHz,八核结构,每个核包含两个256位向量部件,峰值浮点性能达到128GFLOPS,这在当时处于世界领先行列。龙芯3B1000于2010年6月20日左右流片,2010年11月底回来第一批芯片。但第一批芯片回来测试并不顺利,连操作系统都启动不了。很快就找到了原因:由于芯片可测性设计部分的逻辑设计错误,在功能模式下误把内存引脚置为测试状态,导致芯片访问不了内存,通过FIB(用离子束改变硅片上的连线)修复后功能正常。
这是一个重大的打击,龙芯历史上从来没有犯过这样简单的错误,而且在同一时期流片的龙芯1A、龙芯2I等芯片也出现了由于简单工作失误引起的错误。究其原因,是龙芯团队在2010年初从课题组管理机制转向公司管理机制的过程中,原来“作坊式”的设计流程被打破了,“工业化”的设计流程没有建立起来。在课题组阶段,我作为课题组长,每颗芯片从结构设计、逻辑设计、功能验证、可测性设计、定制设计、物理设计各个环节从头盯到尾,及时协调各组的配合,关注每一个细节,因此没有出现管理上的错误。而在3B1000的研制过程中,龙芯课题组转型成立了龙芯公司,我的主要精力转向公司,芯片研发的总协调人缺位,导致频频失误。痛定思痛,从此我着手芯片研制的质量体系建设,建立了“五步法”(立项、方案、签核、测试、结项)研制过程,并详细规定了每个阶段的研发和审核内容。在此后龙芯公司进行的几十次流片中,没有出现过严重的质量问题,而且比我作为课题组长天天盯着效率高很多。
龙芯3B1000首款流片不成功促使我们马上进行改版,好在只要改一层金属,时间和费用上都比较省。3B1000的第一次改版2011年2月初流片,7月初回来,调试比较顺利。但在压力测试时又出现死机现象,经过几个月的攻关发现又是死锁问题。大致机理是一个处理器核访问其它结点的内存时,写地址和写数据是分开发出的,结果在另外一个结点的处理器核也过来访问内存,而且同时有几十个这样的互相访问时,写地址过去了但写数据互相堵住,导致死锁。避免死锁的办法是要求写地址和写数据保持原子性,即必须一起发出和传输。为此龙芯3B1000进行了第二次改版,于2011年12月初流片,2012年4月底回来。从此达到稳定状态。
在掌握65nm工艺的基础上,我们于2009年11月开始评估32/28nm工艺,并准备把它作为龙芯CPU的下一个工艺结点。2010年12月选定意法开云棋牌官网在线客服与三星合作的32nm工艺并开始八核3B1500的设计。3B1500基于3B1000的设计,主要通过工艺升级提高性能,同时做了局部的性能优化,尤其是在处理器核中增加了私有二级Cache。2012年1月中旬完成3B1500的设计并交付流片。2012年8月底拿到样片,初步测试正常,频率从3B1000的900MHz提高到1.25GHz(最高可达1.5GHz)。在经过测试后对该芯片进行了万片规模的小批量生产。在应用验证过程中,出现了在很大的应用压力下个别芯片不稳定现象。刚开始觉得是个体问题,后来出现的次数多了,开始于2013年1月31日组织人员攻关定位问题,查找机理。也是每天晚上召开例会讨论,安排各种尝试,在这个过程中发现了几个软硬件磨合的问题并通过软件调整后,出问题的概率小了很多,但问题如幽灵般还在。直到2013年4月12日,才抓到了该问题。这个问题是从3B1000到3B1500改版过程中引进的,为了提高性能,处理器核收到多个维护Cache一致性的无效请求时,原来每两拍才能处理一个,改成可以连续处理,导致清除LL/SC同步指令的同步位llbit时错了一拍,误把IO DMA引起的Cache无效请求当作0号处理器核的Cache无效请求(IO DMA的编号刚好为0,与0号处理器核区分不开),通过软件调整可以规避此问题。经过批量测试,原不稳定现象消失。
为了从根本上消除该问题和其它一些小问题,我们对3B1500进行改版。改版时根据生产厂家的建议,工艺从32nm迁移到28nm,于2013年4月底流片,10月底收到样片,功能正常,但成品率极低,与厂家确认后明确是厂家生产问题。厂家又建议我们恢复到32nm工艺流片,并以某种方式补偿此次流片费用,于是又再次改版,于2015年1月底流片,2015年6月下旬收到样片,测试后功能正常,而且成品率正常,目前已经量产。
龙芯3B的研制过程真是一波三折。出现过龙芯从课题组向公司转型过程中的管理问题,生产厂家引起的问题,多核互相访问引起的死锁问题,处理器核Cache一致性引起的问题。在解决了一个个问题后总算取得了成功。
但龙芯3B的主要问题不在研制过程中,而是刚开始定方向就出了很大偏差。主要问题在于虽然龙芯团队从课题组转型成为了公司,但龙芯3B的研发还保持着学院派导向,过度追求多核以及浮点峰值性能的单一指标,通用处理性能不足,满足不了在“十一五”期间展开的自主CPU应用和试点对性能的要求。