感谢星原的投递
近日,龙芯中科宣布3A3000四核处理器芯片完成流片并通过系统测试。根据现有的测试结果,龙芯3A3000达到了预定的设计性能目标。其中,综合计算性能方面,在1.5GHz主频下,GCC编译的SPEC
CPU 2006定点和浮点单核分值分别超过11分和10分;访存性能方面,Steam分值超过13GBps。
龙芯3A3000的流片成功,标志着我国自主研发的高性能微处理器芯片,可以超越目前引进的同类芯片性能。龙芯CPU首席科学家胡伟武撰文披露了龙芯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应用和试点对性能的要求。
龙芯3B在学术上是成功的,3B1500峰值浮点运算速度达到160GFLOPS,现在拿出来也不丢人,当时在国际上算高的。论文分别被国际顶级会议Hotchips和ISSCC录用,龙芯3B的报告引起了很大反响,美国IT Times对此专门进行了报道,MIT也发表评论,认为龙芯3B的浮点性能超过了同期的Intel处理器。但3B1500的通用处理能力比3A1000提高得不多,通过每个处理器核增加128KB的私有二级Cache以及主频及内存频率的提高,3B1500的单核通用处理性能比3A1000提高了30%-50%,但与国外主流产品的性能差距还很大。
SPEC CPU是一组国际上公认的测试通用处理器性能的测试程序。2006年SPEC CPU2006刚出来时,厂家公布的SUN的blade服务器单核性能为2-4分左右,高端Pentium IV的分值是10来分。2006-2013年是国外主流处理器通用处理性能高速增长期,在主频不怎么提高的基础上,通过微结构优化,厂家公布的SPEC CPU2006单核分值提高到50分左右,平均提高了5倍以上。当然厂家公布的分值都是经过精雕细刻编译优化(包括使用向量和多核加速)的,一般我们使用gcc编译出来的单核分值需要把这些厂家自己公布的分值打7折左右,大致是20-40分。2013年以后,国际单核性能的提高趋缓,每代提升5%就不错,已经到了天花板。SPEC CPU先后发展了1989、1992、1995、2000、2006五个版本,开始时每三年更新一版,后来五、六年更新一版,到2006年后就没有更新。从中也可以看出,CPU的通用处理性能到2010年前后已经到了天花板,运行SPEC CPU2006的时间就够长了。
“十一五”期间,多核CPU成为国际学术界的热点研究方向。因此,学院派思想主导的国内CPU在“十一五”期间都放松了单核性能的提高,而是转做多核,而且核数做得比国外还多。2006年研制成功的龙芯2E的通用处理性能与市场上主流X86处理器差1-2倍(与龙芯2E微结构相同的龙芯3A1000在900MHz时SPEC CPU2006单核分值为定点2.4分,浮点2.3分),但龙芯CPU的单核性能从2006年的龙芯2E到2013年的龙芯3B1500只提高了50%左右;而在此期间市场主流X86处理器的单核通用处理性能提高了5倍以上。也就是说,“十一五”期间我国CPU通用处理性能被国外大幅度拉开了距离,从相差1-2倍到相差一个数量级。
技术上的差距体现在市场上就是不好用。“十一五”期间,国家有关部门在涉及国家安全的领域开始了自主CPU应用试点,大量的应用往基于自主CPU和操作系统的计算机上移植。在2011-2013年的三年中,以嵌入式计算机为代表的装备类应用取得了不少成功;而以通用PC和服务器为代表的信息化类应用虽然通过基础软硬件的磨合优化取得了较大进展,但由于自主CPU的性能基础与国外产品有数量级差距,在很多应用中遭遇性能瓶颈。
由于自主CPU的通用处理性能不够,2013年起,“核高基”基本上放弃了CPU自主研发路线,转而支持引进国外CPU技术的路线。以IBM、AMD、威盛、ARM为代表的国外/境外CPU趁虚而入,纷纷寻求与国内企业合资或开放技术授权的方式,把原来的产品摇身一变成为自主CPU(操作系统和数据库也有类似情况)。这使得主要靠国家支持进行研发的龙芯CPU陷入了巨大困境。
虽然当时对“核高基”支持引进CPU不满,但究其原因,还是我们自己在“十一五”“核高基”支持的龙芯3B上没有摆脱学院派的惯性,走了弯路,满足不了当时迫切的自主信息化市场需求。问题还是出在我们自己身上。“十五”期间负责863计划的科技部高新司领导在龙芯2C没有达到预期技术指标,龙芯2E立项专家提出19条反对意见的情况下作为非共识项目支持龙芯2E的研发,给了我们一次改良的机会。而这次,机会没有了,需要我们自己想办法。
痛定思痛,知耻后勇。2013年5月,龙芯公司结合市场需求对CPU的研发路线进行了认真调整。一是龙芯3号系列多核CPU不追求核的个数而是大幅度提高单核性能,放弃高性能机专用CPU的研制,暂停16核处理器研制,重点把双核、四核处理器做精做透。二是龙芯2号系列SOC芯片不追求“大而全”的复杂度,而是重视结合用户需求定义芯片,以及SOC片内互连的通畅性。三是龙芯1号系列结合特定应用,如宇航、石油、流量表等研制专用芯片,专用芯片产业链短,容易形成技术优势并快速形成销售(如面向宇航应用的龙芯1E和1F已经为龙芯公司带来持续稳定的销售收入)。种瓜得瓜、种豆得豆。从2014年下半年开始,龙芯研发和市场结合的作用开始显现,2014年龙芯公司销售收入比2013年增长51%;2015年在2014年基础上再增长57%,为龙芯公司的可持续发展奠定了良好的基础。龙芯公司逐渐摆脱国家项目的支持,能够主要通过市场销售养活团队和产品研发。
龙芯3A2000芯片
基于上述对龙芯CPU研发路线的调整,2013年5月,我们暂停了已经完成主要设计的16核龙芯3C处理器流片,开始四核3A2000处理器的研发。核多了没有用,单核必须要强。就像体育比赛,靠人多取胜的只有拔河(相当于计算机中的高性能计算机),绝大多数项目要靠运动员个人素质。3A2000主要目标就是大幅度提高单核性能,使单核通用处理器性能提高3倍以上。当时龙芯公司承担了基于某境内40nm LL工艺的高可靠嵌入式CPU研制项目,虽然工艺性能不高,甚至比我们原来用的65nm GP工艺还慢30%,但至少流片的钱有地方出了,我们就基于该工艺研制3A2000。当时还有一个重要决定就是保持3A2000与3A1000的引脚兼容,这样龙芯客户中基于3A1000研制的已有上百种板卡解决方案可以直接通过换焊3A2000来提高性能。基于境内工艺、通过微结构优化大幅提升性能以及与3A1000引脚兼容说明3A2000开始摆脱了学院派惯性,走出结合用户需求研发CPU的关键一步。
2013年初,在龙芯最困难的时候,中科院计算所孙凝晖所长在所里资金本身就很困难的情况下,拿出500万元支持龙芯3A2000处理器核GS464E的前期研发。虽然与研制3A2000所需要的上亿元经费相比,500万显得很少,但在龙芯最困难的时候得到来自龙芯“娘家”计算所的支持,觉得非常温暖。
事实上2012年初龙芯公司在香山饭店召开年度规划会时就决定对GS464处理器核(龙芯2F、2H、3A1000、3B1000、3B1500等都基于GS464微结构)进行优化,形成新一代龙芯微结构GS464E。GS464处理器核一直是我自己维护,其中有一半左右代码(包括流水线控制部分如寄存器重命名、乱序发射队列、寄存器堆控制、重排序缓存,以及访存部分如地址运算、一级数据Cache、TLB、访存失效队列、最后一级共享Cache)是我自己写的,2012年上半年我在机房中花了整整两周时间为GS464升级为GS464E打好必要的基础(我当时说要把马的架子变成骆驼的架子,先要把一个访存部件升级为两个访存部件)后,把维护和升级处理器核的任务移交给汪文祥和吴瑞阳。这很可能是我最后一次有机会写龙芯CPU的代码了。现在回忆起来,能够在机房中心无旁骛地写代码真是莫大的幸福,有无比的成就感,但我不能让自己成为龙芯CPU发展的瓶颈。而且经过多年实践的锻炼,龙芯的年轻人已经充分地成长起来了。龙芯3A1000、3B1000和3B1500都是我自己当技术负责人,3A2000开始由年轻人担任芯片的技术负责人,3A2000的技术负责人是王焕东,3A3000的技术负责人是杨梁。承担国家项目也主要由年轻人作为项目负责人。
GS464E对GS464的改造是全方位的。在指令系统方面,我们在MIPS64 R3的基础上进行了扩展(MIPS指令系统的授权允许用户进行扩展)并形成龙芯指令系统LoongISA,除增加一些基础指令外,还有支持云计算的虚拟化扩展,以及加速X86和ARM二进制翻译的扩展。在微结构方面,除了前述的把访存功能部件从一个增加到两个外,还把Cache行大小从256位增加到512位,最后一级Cache从四路组相联提高到16路组相联,增加了多个层次的预取,把重排序缓存ROB从64项增加到128项,重命名寄存器个数从64个增加到128个,乱序发射队列由原来的定点和浮点各16项增加到定点16项(3A3000增加到32项)、浮点24项(3A3000增加到32项)、访存32项,重新构建了整个转移猜测模块。此外,用大量的测试程序对微结构进行了细节的磨合,局部优化达到三十多处。3A2000的多核互连模块和内存控制器也进行了性能优化。尤其是内存控制器的优化,可以大幅度提高访存频率和效率。2014年7月,RTL代码冻结。
3A2000除了使用流片厂家提供的标准单元库、Memory Compiler生成的RAM、低速IO单元以及efuse单元以外,包括锁相环、HT PHY、DDR2/3 PHY、多端口寄存器堆、CAM、温度传感器等宏单元都是我们自己定制的,没有使用任何第三方的宏单元模块。因此,全定制工作量也不小。
3A2000的物理设计采纳了很多优化措施,初步建立起一套在主流EDA工具基础上的In-House的流程和工具,包括统一数据库支撑的设计平台,基于触发器聚类的定制时钟设计,深度层次化设计等。这套In-House的流程和工具比纯粹依赖EDA工具的单元级设计流程提升性能20%左右。
2014年11月初,3A2000交付流片。这次流片共有龙芯的三款芯片一起拼了个全掩膜。由于流片前的功能验证非常充分,尤其是在3A2000验证过程中,王朋宇负责的验证组完善了龙芯指令级随机验证环境,从原来只覆盖用户态指令到覆盖核心态指令以及例外处理,大大提高了3A2000的功能验证覆盖率。物理设计和检查也精雕细刻,我们对3A2000流片成功很有信心。
经过几个月的焦急等待,2015年4月10日晚饭后,终于拿到了3A2000的盲封样片,连夜进行调试,到第二天早上三点多成功运行操作系统。随后的测试一切顺利:在运行了包括SPEC CPU2000、SPEC CPU2006、Unixbench等大型程序后,功能未见异常;主频可以达到1GHz;SPEC CPU2006单核分值达到6-7分,是3A1000的3倍左右,尤其是以STREAM测试表征的访存带宽大幅度从3A1000的不到1GB/s上升到10GB/s,与市场主流处理器基本持平。在基于龙芯3A2000的桌面终端上进行各种办公应用,觉得流畅多了。有部分芯片在较高电压下运行不稳定,当时并没有引起重视。
2015年5月,经过ATE测试台成测的一批芯片回来测试,发现功能测试结果与ATE测试台测试结果不一致,即部分芯片通过ATE测试后功能还是不正常,这是3A2000完成产品化的严重障碍(即通过测试后提供应客户的芯片中有一部分可能是坏的)。通过调整ATE向量,ATE测试与功能测试的一致性增强,但还有部分芯片不完全一致,总体感觉N管偏快的工艺稳定性明显增强。为了更好地分析原因,6月初请厂家把第一次流片中6个hold的晶圆调整工艺角开始生产。
经过继续深入的分析,发现两个明显现象:一是N管偏快的芯片稳定性好很多,ATE测试和功能测试比较一致;二是通过改善主板电源稳定性,有利于芯片稳定。虽然机理不是很清楚,但在当时巨大的市场压力下(采用引进技术的CPU到处攻击龙芯性能不行,要求有关自主化应用放弃龙芯,使用引进技术的CPU),决定结合已有的现象进行改版流片,一是更换定制的电容更大的DECAP交换厂家提供的DECAP以抑制动态压降(定制的DECAP电容比厂家提供的DECAP电容提高一个数量级),这会带来抗ESD能力下降的风险,但我们经过分析觉得风险不大(事后流片回来进行了ESD实验,抗2000V人体模型没问题);二是根据负责全定制工作的钟石强的建议调整了定制寄存器堆的字线和位线配合时序(增加了20ps左右的裕量),因为仿真发现N管偏快有利于定制的寄存器堆字线和位线时序配合,与实验现象符合。3A2000的第一次改版只改了6层掩膜板,于9月初完成改版设计并交付流片。
2015年11月初,6个调整工艺角的芯片回来,经过大量的ATE测试和功能测试,确定寄存器堆是部分芯片功能不稳定的主要原因。ATE测试发现不同工艺角芯片的寄存器堆MBIST测试在1.30V到1.50V的不同电压下出错,功能测试出错电压则比寄存器堆低100-150mV,有较强的一致性,但机理仍不清楚。
2016年1月11日下午下班前,我跟范宝峡、苏孟豪在讨论苏孟豪通过JTAG通路(这是预留的除了正常的ATE测试外的另外一条测试通路)以Scan Collar方式测试寄存器堆没有发现错误的问题,并了解到杨旭审查版图发现写端口的位线的延迟在其它端口写相反值及读端口旁路读时是最差情况,我马上叫苏孟豪用最差情况向量通过JTAG端口进行测试,很快就复现了寄存器堆出错的问题并经过进一步分析搞清楚了寄存器堆写出错的机理:在寄存器堆写端口写入过程中,要求位线比字线先到,字线与位线之间保持必要的延迟差才能保证写入的正确性,但在位线负载大时(其它写端口写相反值及其它读端口读旁路)位线延迟变大,字位线延迟差太小,导致写寄存器堆出错。提高电压会进一步减少字线与位线的延迟差,因此更容易出错。
真是柳暗花明,困扰我们大半年的3A2000产品化问题终于搞清楚了,尤其是这说明我们在2015年9月份在机理不清楚情况下的改版是正确的。而且这个测试向量提供了一种在已有芯片中把不稳定的芯片筛选掉的办法,这是龙芯3A2000产品化过程迈出的重大一步。
2016年2月8日是春节,3A2000第一次改版的芯片在2月4日完成封装,为了在春节前完成3A2000第一次改版芯片测试,孙凯军专门到封装厂等待封装好的芯片,拿到芯片时已经是下午6点多,直飞北京的飞机已经没了,半夜到上海倒了一次飞机,5日上午到北京,马上安排测试,确实寄存器堆的问题大大缓解了,稳定性大幅度提高。春节上班后我们又组织攻关解决了一个软硬件磨合的问题,到2016年2月22日,完成3A2000的初步产品化工作,开始对外销售芯片(原来一直只能以样片方式赠送给客户试用)。
2016年3月中旬,3A2000进行再次改版,这次改版是全掩膜改版(原来是三个芯片拼了个全掩膜),除了进一步增加寄存器堆字线和位线的延迟差以外,还修改了其它几个小问题。2016年7月下旬,芯片回来后经测试,原来的定制模块问题不复存在,芯片功能正常,而且ATE测试与功能测试一致性好。目前3A2000已经进入量产阶段,其中经过测试支持通过直连形成多路服务器的芯片成为3B2000。
在随后的应用推广中,3A2000与3A1000保持引脚兼容以及软件兼容体现出巨大优越性,很多客户直接在原来3A1000的主板上换焊3A2000芯片,只需通过简单的BIOS和内核调整,就可以大幅度提升性能。龙芯的整机厂家迅速升级了部分原来基于龙芯3A1000的计算机并进行了应用试点。在2016年6月进行的某办公应用试点验收会上,有关部门和专家认为,基于3A2000的计算机使自主化办公应用从“基本可用/可用”提高到“基本好用/好用”。
龙芯3A3000是在2015年5月临时安排研制的。2015年5月初,我去常熟跟龙芯梦兰公司的张福新、吴少刚等人讨论3A2000整机解决方案的研发。大家对3A2000大幅度提升性能都很高兴,大大增强了信心。同时张福新他们提出,由于我们使用境内的40nm低速工艺,而引进ARM和威盛的CPU都使用境外28nm高速工艺,虽然3A2000在微结构上已经超过了引进的ARM和威盛的CPU,由于主频偏低,3A2000在综合性能上还是吃亏(1.0GHz的3A2000处理器核SPEC CPU2006分值为6-7分,而1.6-2.0GHz的ARM和威盛处理器核SPEC CPU2006分值达到8-10分),建议龙芯也尽快使用境外工艺提升频率。经过认真讨论,我们认为如果我们采用Intel的Tick-Tock(嘀嗒)研发策略,应该可以很快推出主频1.5GHz以上,综合性能超过2GHz的ARM和威盛的处理器。Tick指的是结构不变,通过工艺优化提升性能;Tock指的是工艺不变,通过结构优化提升性能。Tick-Tock策略可以把两个芯片流水推进,加快进度的同时降低技术风险。
3A2000主要是通过结构优化提升性能,属于Tock;3A3000则直接采用3A2000的源代码,通过工艺优化提升性能,同时继续保持与3A2000的引脚兼容,属于Tick。因此,3A3000在功能上没有什么风险,主要是工艺移植的风险。当然,3A3000在微结构上还是做了适度增强:一是结合3A2000的性能瓶颈分析把定点/浮点发射队列从16/24项增加到32/32项,二是把最后一级Cache从4MB提高到8MB。到6月底,完成了RTL源代码修改,随后全面展开物理设计。
3A3000物理设计中继续需要定制包括HT-PHY、DDR-PHY、锁相环、多端口寄存器堆、CAM等全定制模块。由于3A2000中的全定制模块出过问题,3A3000的全定制模块检查特别严格。除了加强设计仿真外,还让原龙芯全定制组的组长杨旭(现在是龙芯中科公司全面负责生产的副总)重新披挂上阵,进行背靠背的复查。紧赶慢赶,于2016年1月底完成了全定制设计的签核和复查评审。
3A3000物理设计中另一个难点是时序收敛。3A3000使用的28nm FD SOI工艺晶体管确实比3A2000使用的40nm LL快60%左右,但连线延迟大,而且互相干扰也大,废了很多周折。杨梁率领物理组在2016年春节期间也没有休息,终于在2016年2月中旬交付流片。
2016年6月端午假期期间,龙芯3A3000完成晶圆生产并进行了中测,刚开始比较顺利,已经调试完成大部分向量,只是测试我们自己研制的锁相环时发现锁相环输出时钟有不稳定现象。6月中旬拿到盲封芯片,测试发现只有在低于0.8V的低电压下芯片才能正常工作,经过两周的分析发现还是寄存器堆的问题,这次是读出电路的问题,读电路译码时产生了毛刺,把别的字的内容耦合到读出字内容来了。好在该问题只需要修改一层掩模版。
2016年9月13日,修改寄存器堆问题的改版芯片回来。这次测试非常顺利,很快就运行了SPEC CPU2000和SPEC CPU2006等大型程序,均未发现异常。主频可以达到1.5GHz以上。进一步的测试结果比想象的好,一是内存频率可以达到750MHz以上,而且信号眼图还非常好,STREAM测试带宽达到13GB/s;二是虽然主频只提高了50%,但综合SPEC CPU2006和SPEC CPU2000分值可以提高60%,其中SPEC CPU2006单核分值为定点11分以上、浮点10分以上,四核分值为定点36分,浮点33分;三是可以运行在很低电压下,例如运行在1.0V电压下主频1GHz时功耗还不到3A2000运行1GHz时的一半。对于复杂应用(如打开几十MB的复杂文件),3A3000的用户体验比3A2000有显著提高。
2016年10月17日,龙芯3A3000通过了龙芯公司质量体系要求的商业级产品的鉴定检验摸底测试(工业级产品鉴定检验工作正在同步展开),表明龙芯3A3000可以进入批量生产状态。目前3A3000已开始小批量生产,其中经过测试支持通过直连形成多路服务器的芯片成为3B3000。
龙芯3A3000运行SPEC CPU2000定点分值1100多分,浮点分值1700多分,运行一遍不到一个半小时(如果使用计算所的编译器进行优化,定点和浮点分值还分别可以提高15%和30%以上)。回想2002年龙芯1号刚诞生时,运行一遍SPEC CPU2000需要近三天时间,龙芯2C由于SEPC CPU2000分值没有达到863课题合同要求的300分而没有完成验收,龙芯2E费了九牛二虎之力才勉强达到500分,真是“向来枉费推移力,今日中流自在行”。
在3A2000和3A3000的研制过程中,有两点深刻领会。一是CPU的可调试性设计很重要,3A2000和3A3000的全定制问题和若干其它问题的定位,都是基于通过JTAG接口控制的预先设计的调试模块,该调试模块可以控制和读出CPU内部所有触发器和RAM的内容,比起以前调3A1000、3B1000和3B1500方便多了。二是境内工艺的一致性比境外工艺有一定差距,包括不同批次的一致性,仿真模型和实际晶体管参数的一致性都和国外工艺有一定差距,设计时要多留些裕量,蒙特卡罗仿真也要把参数波动范围设大一些。
3A3000研制成功对自主CPU来说具有里程碑意义。首先,3A3000的通用处理性能已经跨过了国际通用处理器性能的第一个门槛,其单核SPEC CPU2006性能已经不低于ARM用于服务器的高端处理器、Intel的低端系列(凌动系列)处理器以及威盛处理器(这些处理器在1-4核环境下2GHz时单核SPEC CPU2006性能一般在8-10分之间,如果核数更多,由于最后一级Cache巨大,性能会有所提高),而且3A3000的访存带宽已经与AMD以及Intel的高端系列(酷睿系列)持平。这样的性能玩复杂的3D游戏可能还有差距,但对于以党政办公为代表的事务处理应用是足够了(如果软件做适当磨合优化,3A2000就够了)。龙芯3A3000跨过了国际通用处理器性能的第一个门槛后,也为下一步跨越第二个门槛(即达到Intel和AMD主流处理器的性能)打下了坚实的基础。其次,3A3000的通用处理性能超过了目前靠引进ARM和威盛技术发展的国内同类(四核)CPU。“十一五”开始的自主信息化应用试点发现第一代自主CPU通用处理性能不够的问题后,国内CPU研制单位均展开了第二代CPU的研发,并衍生出三条不同的技术路线。第一条是以龙芯和申威为代表的“研”的路线,即通过分析第一代产品应用中发现的问题进行自主研发升级。第二条是“攒”的路线,即使用国外的处理器核“攒”SOC,并在此基础上对处理器核进行局部优化。第三条是“O(ODM)”的路线,即中国人掏钱请外国人干,目前主要是把国外/境外已有的现成设计直接拿过来换成中国的品牌。由于自主研发路线在“十一五”期间走了弯路,很多人对自主研发路线产生了疑虑,觉得此路不通,因此“核高基”在“十二五”期间主要支持以ARM的处理器核“攒”SOC的路线和“O”威盛的路线为主。一是钱多,二是引进别人的产品省时间,加上龙芯3A2000与境内工艺磨合,在产品化方面花了较多时间,从2014年年底到2016年年初大约一年半的时间,采用引进技术的CPU大肆攻击自主CPU性能不行,要求在已有的自主信息化试点中换掉龙芯(而且确实换掉了一些),给龙芯造成很大压力。
3A3000的通用处理性能超过引进的ARM和威盛技术的CPU,加上前些日子使用申威处理器的“太湖之光”高性能机取得世界第一的好成绩,充分说明不论是通用CPU还是高性能机专用CPU,自主研发的道路都是走得通的,不仅安全性好,性能也高。尤其是通过自主研发形成持续改良能力后,未来的后劲更足。可以说,在与引进CPU的技术路线的斗争中,龙芯3A3000是抗日战争的石牌保卫战,是解放战争的济南战役,拉开了自主CPU战略反攻的序幕。尤其值得指出的是,龙芯3A3000的研制没有得到任何国家项目的补助,是完全由企业自己掏钱研制的自主通用CPU,也具有里程碑意义。
根据Tick-Tock策略,我们制定了龙芯3号系列下一步研制计划。四核龙芯3A4000为Tock,继续使用目前的28nm工艺,争取主频达到2GHz以上,SPEC CPU2006单核分值达到20分以上。3A4000的主要结构优化包括:增加256位的向量指令,增加片内安全机制,以及进一步通过微结构优化提高流水线效率,争取每GHz的单核SPEC CPU2006分值达到10分(目前3A3000每GHz的单核SPEC CPU2006分值为7分,ARM的高端处理器为5-6分,X86主流处理器为10-15分)。目前3A4000的研制工作已经展开。在3A4000之后将研制Tick阶段的新一代处理器,初步考虑使用16nm或14nm的工艺以及3A4000的处理器核研制16核的龙芯3C。经过3A4000的又一轮优化,龙芯的处理器核微结构已经基本到位,是时候把2013年5月暂停的16核龙芯3C重新提上日程了。
十年以来,我们先后研制了龙芯3A1000、3B1000、3B1500、3A2000/3B2000、3A3000/3B3000五款龙芯3号系列芯片,大的流片版本12个,小的流片版本(只改几层掩膜板)6个,碰到了各种各样的问题,经历了很多坎坷。为什么龙芯CPU的研制经历这么多坎坷呢?除了龙芯的质量流程需要持续改良以外(最近结合3A2000和3A3000的全定制问题正在举一反三,并完善全定制流程),究其根本原因,是因为我们坚持芯片中的核心模块自己研制。前面提到的龙芯3号研制过程中碰到的问题,都是包括CPU、HT控制器、内存控制器、全定制寄存器堆、全定制锁相环等核心模块内部的问题,并不是把这些模块“攒”在一起产生的问题。这些问题,如果购买商业IP(如ARM的CPU,Imagination的GPU等)来“攒”芯片一般不会碰到。自从2001年开始研制CPU以来,我直接或间接负责了近百次流片,流片后碰到的问题除了极个别外,都是核心模块内部的问题。
龙芯长期坚持芯片中的核心IP自己掌握。这些核心IP包括CPU核、内存控制器、DDR2/3/4的PHY、互连网络、HT控制器、HT PHY等,最近还展开了GPU的研发,只有少量的外围IP使用商用IP。不是吃饱了饭没事干,而是我们使用别人的IP吃过亏。2003年我们刚开始研制龙芯2号时委托一个很有名的EDA和设计服务公司定制一个3写6读寄存器堆,在交付流片后发现其中的电源地严重缺失,跟他们交涉时他们说这个不会有问题,导致龙芯2号系列的第一款芯片龙芯2A流片失败,后来我们自己定制了该寄存器堆才使龙芯2B流片成功。龙芯3A1000刚开始研制时曾经使用过商业DDR2/3 PHY,我们在检查中发现了一些问题,但厂家觉得没问题不愿意修改,后来3A1000流片时同时流了使用商用DDR2/3 PHY和自主研制DDR2/3 PHY的两个版本,并在使用自主DDR2/3 PHY的版本流片成功后确定使用自主DDR2/3 PHY的版本进行量产。龙芯3A1000和3B1000曾经使用过商业的内存控制器,但商业的内存控制器满足不了高性能CPU的带宽要求(使用商业内存控制器的SOC在双通道下不可能做出龙芯3A3000 的13GB/s实测带宽来),因此从3B1500开始自主设计内存控制器。龙芯2H集成了商用的GPU核,该GPU核有 Android操作系统的驱动程序,但我们需要Linux的Xserver驱动,厂家自己开发不了,我们希望厂家把内部配置寄存器如何使用的手册给我们,我们自己开发,可是厂家说这是商业机密,不愿意给,至今龙芯2H只有在Android上有3D驱动,Linux的Xserver驱动只有2D的。
一是吃过亏,二是觉得洋鬼子干得还不如我们,所以就自己干。在国际上,虽然Nvidia巴心巴肝地帮Intel做配套GPU,Intel还是坚持自己做GPU;虽然Imagination巴心巴肝地帮ARM做配套GPU,ARM也坚持自己做GPU;虽然开源的火狐浏览器很不错,谷歌还是坚持自己做Chrome。苹果和高通公司都是在ARM的架构授权下自主设计处理器核,其性能远高于ARM的处理器核。他山之石、可以攻玉。只有技术上不受制于人,才有产业上的主动权。
做任何事情,依靠别人总是容易一些,完全靠自己则困难得多。但依靠得多了,吃过亏后才明白还得靠自己。毛主席在青年时期也没有想过要革命,想着改良主义可以救中国,后来才觉得马克思主义是“山穷水尽诸路皆走不通了”的选择;建党后在陈独秀领导下在湖南搞工人运动,光大的罢工就举行了十多次,结果是罢工受镇压,工人领袖被杀;国共合作期间依靠国民党的武装干革命,结果蒋介石发动“四一二”政变杀共产党人;好不容易上井冈山建立了自己的军队,找到了武装夺取政权、农村包围城市的道路,却被那些在上海租界呆不住跑到井冈山避难的书生们轻松地夺了权,不得不进行两万五千里长征;经历千难万险与四方面军会师了,还差点被贪心不足的张国焘武力扣押。吃了这么多亏后,毛主席在以后的革命和建设中就牢牢掌握了主动权,包括国共第二次合作时坚持独立自主的山地游击战,反对共产国际的“一切通过统一战线”的错误主张;重庆会谈坚持保留边区和军队;建国后先是抗美援朝,后是中苏论战。等等。
在中国的近代史上,我们有三次向外国老师学习的经验,每次都是受老师欺负吃了亏后走上自力更生的道路。第一次是洋务运动,晚清时期中国海关关长都是英国人担任的,是中国历史上最开放的时期,却被西方列强欺负得水深火热,毛主席领导共产党推翻了三座大山,解放了中国人民。第二次是建国后向苏联学,一边倒,结果苏联在中国的土地上又想建联合舰队,又想建长波电台,毛主席拒绝后苏联又撤专家又逼债,毛主席还是领导中国人民自己搞了“两弹一星”,建立了自主可控的工业体系。第三次是变革开放,我们学习西方的管理理念和科学技术,刚开始觉得挺好的,现在有点觉得吃亏了(像我这样气性大的觉得忍无可忍了,很多人觉得还可以再忍忍)。2011年我国IT产业百强企业的利润总和是苹果公司的40%(我刚开始觉得华为是通信企业,可能不算在IT百强里面,后来查到华为也算在这里面时很有挫折感)。总是听专家说,我国跟美国的经济互相依赖,美国也不敢把我们怎么样,可是当美国制裁中兴时,我们不得不认怂,中兴公司定期向美国商务部报告工作,以获得延期制裁。美国可以通过不卖元器件在三个月之内把国人引以为豪的华为、联想、中兴等企业搞死,十大军工集团有大半开不了张,我们有哪种产品不卖给美国企业,会把美国的Intel、IBM、谷歌、微软、苹果搞死呢,我们顶多能把沃尔玛搞得比较难受。现在想想,毛主席周总理带着全国人民勒紧裤腰带炼钢铁、打油井、发展两弹一星,建立起自主可控的工业体系真是无比英明。
正如变革开放进入深水区,容易改的都改完了,剩下都是难改的;创新也进入深水区,容易创新的都创完了,剩下难创新的,需要十年磨一剑的积累。我们的IT产业先学会了用国外的芯片在主板上“攒”系统,后来又学会了用国外的IP在硅上“攒”系统。掌握这些简单技术后,下面该深入到CPU、GPU这些复杂的核心模块中去了。这些复杂的创新不是领导重视、钱多、人多就能一下子干出来的,还需要时间来磨,在探究和试错过程中不断演进。领导重视、人多、钱多可以加速探究和试错的过程,但不能消除这个过程。中国航天建空间站,先来个天宫一号试试看,再来个天空二号(还分两期)接着试,最后再发射正式空间站,也是这个演进的道理,不是缺钱,也不是领导不重视。CPU是超复杂系统,超复杂系统只能走进化论的道路,在产业化实践中通过长期演进发展起来。即使在这个过程中,得到别人的源代码,也只能加速自主研发的进度,取代不了自主研发的工作。更何况复杂系统是很难消化吸收的,即使拿到国外CPU的源代码,每一行都看得明白,但把几百万行代码拼在一起就不知道是干什么的,就像我们可以打开一头猪的大脑看得清清楚楚,但不知道猪在想什么。很多人现在还寄希望于引进国外技术发展我国的CPU,那是因为吃洋鬼子的亏没吃够。须知天上是不会掉馅饼的,要发展以自主CPU和操作系统为代表的基础软硬件,我们必须克服急躁情绪,克服崇洋情绪,发扬愚公移山精神,坚持实事求是作风,在自主创新实践中不断发现问题,在解决问题过程中不断提高能力,才能保障国家安全和支撑产业发展。
龙芯今年15岁了。中国共产党在15岁的时候完成了举世瞩目的万里长征,建立了陕北根据地,取得了生存的基础,但共产党长征的目的决不仅仅是建立一块根据地活下来,而是以此为基础解放全中国。龙芯在15岁的时候完成了3A3000的研发,跨越了国际上通用CPU的第一个性能门槛,性能超过了引进设计的CPU,龙芯公司实现盈利,取得了生存的基础,但龙芯的目标绝不是为了生存和挣钱,而是为了建立自主可控的信息产业体系。目前我国的信息产业主要建立在以Wintel体系(Intel的CPU和微软的Windows操作系统)和AA体系(ARM的CPU和谷歌的Android操作系统)为代表的国外基础软硬件平台上。要改变我国信息产业和信息安全受制于人的局面,不能只着眼于单项技术的突破和产品市场占有率的提高,必须建立起自主可控的信息技术与产业生态体系,形成与Wintel体系和AA体系“三足鼎立”的局面,才能掌握产业发展主导权,消除安全隐患。如果我们没有建立起自主可控的IT产业体系,继续在已有的Wintel体系和AA体系中当“马仔”,是难以实现中华民族的伟大复兴的“中国梦”的。反之,只要我们坚持自主创新,打通技术链,完全可以在局部指标不如国外产品的情况下,建设出优于国外产品的应用系统。须知判断技术是否先进的标准,不是看其跟美国人跟得紧不紧,而是看其跟应用结合得紧不紧。
古人说“事非经过不知难”。但只要认真去做,也有“事非经过不知易”的道理。龙芯3号系列CPU通用处理性能在从2013年起的不到四年时间提高到了原来的五倍以上,充分说明了这个道理。2001年我们开始研制龙芯CPU的时候,很少人相信我们能够做出来,在整个“十五”期间,网络上“龙芯打假”的言论层出不穷,但我们坚持做出来了,方法是在别人都不信的情况下,做给他看。2006年我们开始推广龙芯CPU应用的时候,也很少有人相信龙芯能用起来,不知受了多少奚落和冷嘲热讽,甚至有人说,如果龙芯能够卖得出去,他就从此倒立着走,但龙芯公司现在能够通过龙芯CPU的销售养活自己了,方法还是在别人都不信的情况下,做给他看。今天我们说要建立自主可控的信息产业体系,还是多数人不信,无非是认为做生态太难,自己肯定做不好,不如跟着别的老大当个马仔,所以总说与X86和ARM兼容生态好,总之是一种畏难情绪。对付信心不足,我们还是老套路,做给他看。世界上做CPU的企业中,凡是不做生态(DEC、IBM、HP、SUN、SGI)或者跟生态(AMD、威盛)的CPU企业都活不好。八十年前几万衣不蔽体的红军刚到陕北时有谁相信这帮泥腿子能解放全中国?变革开放初期以能买到日本彩电为荣的中国人有几个相信今天中国的制造业产值已超过美国加日本的总和?在建立自主信息产业体系方面,我们要在自己内部肃清一切软弱无能的思想,就像毛主席说的:“我们的同志,在困难的时候,要看到成绩,要看到光明,要提高我们的勇气”。
八十年前,当衣不蔽体的几万红军完成两万五千里长征时,他们是中国最生气勃勃,具有百折不挠的献身精神,真正的民族精英。他们是怀着对革命的坚定信念,在崇高理想的指导下走完长征的。同样,自从2001年开始龙芯处理器研发以来,龙芯人也是怀着坚持自主创新、保障国家安全、支撑产业发展的坚定信念走了一条别人没有走过、多数人不信能走通、非常艰难的“长征”。十五年来,很多龙芯的技术骨干都把人生最美好的青春献给了龙芯的“长征”。加班加点仍是龙芯研发人员的常态,而龙芯的薪酬长期低于同行业水平,有些人三十多岁就出现了各种健康问题。不少龙芯的技术骨干都接到过猎头公司百万年薪的电话,但龙芯团队的核心骨干非常稳定。为了龙芯的产业化,很多技术骨干都毅然放弃中科院的事业编制,辞职到龙芯公司。人都是有私心的,但我敢保证龙芯人的私心相对少一些;大家离毛主席要求的“一个高尚的人,一个纯粹的人,一个有道德的人,一个脱离了低级趣味的人,一个有益于人民的人”都有差距,但我敢自豪地说龙芯人的差距相对小一些。后之视今,尤今之视昔。我相信,我们的后人会像我们今天崇敬长征的英雄、崇敬抗美援朝的英雄、崇敬两弹一星的英雄一样,来崇敬今天在建立我国自主可控的信息产业体系道路上历经艰难险阻完成新长征的我们。
龙芯十五年的坚持来自中国科学院的光荣传承。中科院计算所是我国计算机事业的摇篮,经历了“完全自主但没有市场化”的第一个三十年,为两弹一星做计算机;也经历了“完全市场化但丧失自主性”的第二个三十年,创办了联想和曙光,为了与市场接轨,研发工作忍痛从CPU和操作系统中退出。我们是中国第三代计算机人,任务是在市场化条件下实现自主性,保障国家安全和支撑产业发展。我的导师夏培肃院士是我国计算机事业的重要奠基人,她多次对我说过,这辈子最大的心愿就是把中国的计算机事业搞好,她们这代人没搞好,希望我们搞得比她们好。李国杰院士曾经在一次自主可控行业的大会上动情地说:我的导师夏老师(李国杰院士也是夏培肃院士的学生)已经九十岁了,干不动了;我也七十岁了,快干不动了;如果到胡伟武这一代我国的CPU和操作系统还没有发展起来,中国的IT产业就没戏了。龙芯团队有一个老研究员黄令仪老师,今年八十岁了还天天在屏幕前拖着鼠标查版图。有一次我请黄老师参加某用于安全领域的芯片研发工作时,黄老师脱口而出:胡老师,我这辈子最大的心愿就是匍匐在地,擦干祖国身上的耻辱;我是亲眼见过我的同胞被日本鬼子的飞机炸死的。前辈的精神感染了我们,前辈的荣光照亮了我们前进的道路,让我们咬着牙关,勇往直前!
龙芯十五岁了。2001年8月19日清晨当屏幕上第一次出现“godson login”时的那声欢呼已经远去,在雨中登黄山的台阶上高唱《真心英雄》时的那种豪情已经消退,夜深人静时在计算所北楼长长的走廊尽头泡方便面记忆已经模糊,但龙芯人“为人民做龙芯”的初心未改,“十年磨一剑”的执着依旧,“人生能有几回搏”的奋斗长在。我们已经走在“以安全可控为主题、以产业发展为主线、以生态建设为目标”的新长征道路上。迷失方向时,坚持从国家和人民的角度(而不是自己的角度)做出选择就是我们心中的“北斗星”。长征的道路蜿蜒曲折,不仅有芳草鲜美、落英缤纷,更有沼泽沙漠、雪山草地、豺狼虎豹,因此前进的路上就要苦我们的心智、痛我们的体肤。龙芯走自主研发道路,比直接引进处理器芯片或者引进处理器核的道路见效慢一些,在路上会被别人暂时超过心里焦急;走市场化道路,要结合客户需求把短板补齐,比起在计算所做研究时只关注几个有显示度的指标来,在显示度方面差一些;要建立自主软硬件体系,比只在单一领域做单一产品难度大很多。这就要求我们在前进的道路上不仅要有冲天的豪情,艰苦奋斗、奋勇争先,而且要有钢铁般的意志,做到专心致志、持之以恒、精益求精,直至取得最后的胜利。我们是“苦命”而光荣的龙芯人,虽千万人吾往矣。
我们正在前进。我们正在做我们的前人从来没有做过的极其光荣伟大的事业。我们的目的一定要达到。我们的目的一定能够达到。
胡伟武
未经允许不得转载:陈丹的博客 » [两万字特稿]致龙芯15周年 胡伟武披露龙芯3号开发历程