第一部分:龙芯在艰难困苦中茁壮成长
龙芯课题组成立于2001年,在课题组成立之初,龙芯只有十来个人和一间不到40平方米的办公室。在人员方面,是中科院计算所唐志敏研究员、胡伟武研究员,和客座研究员张志敏等几人带着研究生在做,有很强的学术研究性质,大家也是边做边学边研究,积累经验,磨砺技术,培养人才带队伍。
由于在资金和人力上都非常匮乏,想要把CPU做出来,那就只能拿命去拼。龙芯课题组成员每周工作六天,每天加班到凌晨,以办公室为家。不少技术骨干全年无休,甚至连春节都是守在单位做CPU。以龙芯首席科学家胡伟武为例,由于常年加班加点,以至于女儿说:“你就知道做你的破CPU不要我们了”,胡伟武的夫人为了支持丈夫,甚至还辞去了工作照顾家庭。
经过1年多的时间,辛勤的努力终于获得了回报,龙芯课题组成功研发出了龙芯1号。由于龙芯1号的成功,龙芯也获得了越来越多的国家资金支持,从2003年至2006年先后研发成功龙芯2B、龙芯2C、龙芯2E等数款芯片,龙芯课题组的人数也从当初的十几人扩充到八十余人。就性能来说,龙芯2E达到了同时期美国Intel公司CPU百分之50的水平,虽然和美国的CPU依然有差距,但已经能够满足很多应用场景了。
正是因为龙芯2号在性能上已经具备了一定市场竞争力,意法半导体花3000万买下龙芯5年的生产代工权,每生产一片给龙芯专利费。开创了中国在高端IT核心技术领域对外授权的先例。2006年成功流片的龙芯2E为龙芯课题组赚来第一桶金,这笔钱比当年国家给的研究经费还要多。
2007年,龙芯2F成功流片,这是龙芯第一款产品芯片,销量达数十万片。在龙芯2E和龙芯2F相继取得成功之后,龙芯课题组启动了龙芯3号的研发。正是依靠国家政策扶持,计算所的鼎力支持和龙芯团队的“拼命三郎”精神,龙芯先后开发了3代CPU内核,近10款CPU,积累了CPU设计经验,并且磨练出了一只能打恶战,打硬战的队伍。
第二部分:龙芯产业化道路异常艰辛
过去几十年,国外垄断集团在中国不掌握技术时就封锁技术,在中国刚刚取得一定技术突破之后就通过合资换技术合作的方式阻止自主技术发展。这方面,最典型的例子就是运10,被麦道公司的合资陷阱肢解,中国的民用航空产业和民用汽车都被国外公司借助合资陷阱扼杀。
随着以龙芯为代表的自主技术进步,西方科技公司故技重施,一改过去严密技术封锁的策略,转而抛出橄榄枝,到中国大陆开始合资公司,或开展技术合作扶持代理人。虽然境外科技公司转让的都是在国际市场上缺乏竞争力的二流技术,而且境外公司基于“教会徒弟饿死师傅”的心理,技术转让或多或少都有一定保留,但经过精心包装之后,具有非常强的迷惑性。加上国内有一批专家学者和产业界大佬对于中国做自主CPU一直持否定态度,这些因素共同导致国家政策扶持也从支持自主研发,变成了扶持技术引进CPU。
龙芯课题组过去一直是研究团队,低估了CPU商品化、产业化的难度,导致起初的产业化道路并不顺利。
首先,工业界产品需要的通用处理性能和稳定性,看重的是CPU的“短板”。但学院派搞研究擅长做“长板”,龙芯3B1000和3B1500保持着学院派导向,追求多核以及浮点峰值性能的单一指标,导致通用处理性能不足。虽然龙芯3B1500峰值浮点运算速度达到160GFLOPS,论文分别被国际顶级会议Hotchips和ISSCC录用,美国麻省理工学院也发表评论,认为龙芯3B的浮点性能超过了同期的Intel处理器。但龙芯3B1500通用性能在产业化方面的表现不尽如人意。
其次,龙芯CPU产品市场化运作受限学院派体制。龙芯团队技术骨干大多都是计算所的研究员或高级工程师,研究人员更加倾向于做开创性研究,龙芯做产品是要补齐短板,产品完善是非常枯燥乏味的,和研究人员做科研完全不同。
最后,软件生态和产业联盟成为龙芯产业化的最大障碍。美国Intel公司的CPU能够垄断市场,一方面是因为Intel CPU性能卓越的因素,另一方面也是因为Intel构建起了软件生态和产业联盟。具体来说,Intel公司只需要研发CPU,操作系统由微软开发,主板由华硕、微星等台系厂商完成,戴尔、惠普、联想等公司做整机,甲骨文等一批厂商做数据库、中间件,众多软件厂商做应用软件。正是软件生态和产业联盟使Intel公司在个人电脑和服务器CPU领域称霸全球。而龙芯在这方面,几乎是一片空白,这使龙芯的产业化之路异常艰辛。
第三部分:破釜沉舟,明确方向,提升技术水平
面对困难,龙芯并没有气馁,而是迎难直上,见招拆招。
针对办企业和做研究不一样的问题,龙芯的解决之策是要求绝大多数技术骨干都从计算所辞职,像张戈25岁就已经是副高职称,是学术上很有前途的苗子,也毅然从计算所辞职,大家必须呕心沥血,破釜沉舟做芯片。
在理顺了体制机制问题之后,龙芯调整了研发导向,彻底从做研究转变到做产品上:
一是龙芯1号系列结合特定应用,如石油、流量表等研制专用芯片,因为专用芯片产业链短,容易形成技术优势并快速形成销售。
二是龙芯2号系列SOC芯片不追求“大而全”的复杂度,而是重视结合用户需求定义芯片,以及SOC片内互连的通畅性。
三是龙芯3号系列多核CPU不追求CPU核的个数,或某项特定性能,而是大幅度提高单核性能。放弃高性能机专用CPU的研制,暂停16核处理器研制,重点把双核、四核处理器做精做透。
在2012年年底,龙芯开启了3A2000 的研究,放弃了过去过于看重某项指标的做法,转而专注于提升单核性能。
这里专门说明一下单核性能的重要意义。由于在桌面环境,程序大多是串行的,这直接导致如果单核性能上不去,堆核心数毫无意义,即便做出了八核CPU,往往会导致“一核有难,七核围观”的情况。
AMD的CPU过去几年一直被压着打,就是因为单核性能明显逊色于Intel。在锐龙CPU和新内核Zen问世之后,之所以AMD的市场份额有所回升,也是因为单核性能上缩小了和Intel的差距。
提高处理器单核性能,提高主频和优化芯片微结构不可偏废,只把主频做高,而忽视芯片微结构设计是会出大问题的,这方面最典型的案例就是Intel的奔腾4处理器,虽然拥有很高的主频,但在微结构设计上存在很大不足,因而获得“高频低能”处理器的称号。
而要提升主频,一方面可以通过物理设计优化实现,另一方面可以通过采用更好的制造工艺提升晶体管集成度来实现。
而优化芯片微结构设计,实现CPU性能的飞跃,就非常考验一个CPU设计团队的功底了。微结构也就是CPU的内核,现在大家经常听到的四核、八核CPU,就是把四个、八个CPU的内核集成到一片硅片上。
处理器的核心技术在于:Cache一致性协议,存储一致性模型,可扩展性结构,多核的片上互连结构,多路的互连结构,访存的通路,IO的互连结构等等。
从处理器核的设计角度,多端口的访存,低延迟高带宽的cache,高精度的分支预测器,高效率的预取机制,用于挖掘指令级并行性的大框架,用于挖掘数据级并行性的高宽度simd,用于挖掘线程级并行性的多线程机制,处理器低功耗技术,以及各种处理器设计涉及到的电路技术和工艺磨合等技术都是非常关键的。而这些技术细节则是龙芯攻关的重点方向。
第四部分:龙芯长期坚持芯片中的核心技术自己掌握
在“十一五”期间,多核CPU成为国际学术界的热点研究方向。学院派思想主导的国内CPU在“十一五”期间都放松了单核性能的提高,而是转做多核,而且核数做得比国外还多。这直接导致龙芯的单核通用性能提升只有50%。
相比之下,在此期间市场主流X86处理器的单核通用处理性能提高了5倍以上。也就是说,“十一五”期间我国CPU通用处理性能被国外大幅度拉开。
而要弥补这种差距,就必须重视单核通用性能,设计新一代CPU核。此前,龙芯2F、2H、3A1000、3B1000、3B1500等都基于GS464微结构。而龙芯3A2000则采用了新一代内核GS464E。
不过,自主研发之路颇为艰难,龙芯GS464E让龙芯技术团队又爱又恨。
GS464E虽然只比GS464多了一个字母E,但对GS464的改造是全方位的。
在指令系统方面,龙芯CPU在MIPS指令集上进行扩充,增加了MIPS中不具备但X86和ARM具备的对二进制翻译影响很大的核心功能,形成了龙芯指令系统LoongISA。
在微结构方面,除了把访存功能部件从一个增加到两个外,还把Cache行大小从256位增加到512位,最后一级Cache从四路组相联提高到16路组相联,增加了多个层次的预取,把重排序缓存ROB从64项增加到128项,重命名寄存器个数从64个增加到128个,乱序发射队列由原来的定点和浮点各16项增加到定点16项、浮点24项、访存32项,重新构建了整个转移猜测模块等等。
此外,龙芯还用大量的测试程序对微结构进行了细节的磨合,局部优化达到三十多处。龙芯3A2000的多核互连模块和内存控制器也进行了性能优化。尤其是内存控制器的优化,可以大幅度提高访存频率和效率。
龙芯3A2000的物理设计采取了很多优化措施,初步建立起一套在主流EDA工具基础上的In-House的流程和工具,包括统一数据库支撑的设计平台,基于触发器聚类的定制时钟设计,深度层次化设计等。这套In-House的流程和工具比纯粹依赖EDA工具的单元级设计流程提升性能20%左右。
2014年11月初,3A2000交付流片。2015年4月10日,龙芯终于拿到了3A2000的盲封样片,连夜进行调试,到第二天早上三点多成功运行操作系统。随后的测试一切顺利:在运行了包括SPEC CPU2000、SPEC CPU2006、Unixbench等大型程序后,功能未见异常;主频可以达到1GHz;SPEC CPU2006单核分值达到6-7分,是3A1000的3倍左右,尤其是以STREAM测试表征的访存带宽大幅度从3A1000的不到1GB/s上升到10GB/s,与市场主流处理器基本持平。在基于龙芯3A2000的桌面终端上进行各种办公应用,觉得流畅了许多。
不过,最早批次的3A2000有部分芯片在较高电压下运行不稳定,之后经过了测试,发现部分芯片通过ATE测试后功能还是不正常。为了解决这个问题,龙芯耗费1年多时间进行排查,终于解决在2016年初解决了问题。2016年7月,最终版的3A2000完成流片,芯片回来后经测试,原来的定制模块问题不复存在,芯片功能正常,而且ATE测试与功能测试一致性好。
龙芯3A2000最大的特点就是高度自主化——除了使用流片厂家提供的标准单元库、Memory Compiler生成的RAM、低速IO单元以及efuse单元以外,包括锁相环、HT PHY、DDR2/3 PHY、多端口寄存器堆、CAM、温度传感器等宏单元都是龙芯自己定制的,没有使用任何第三方的宏单元模块。
为何龙芯长期坚持芯片中的核心技术自己掌握呢?
不是吃饱了饭没事干,而是龙芯使用别人的IP吃过亏。
2003年龙芯刚开始研制龙芯2号时委托一个很有名的EDA和设计服务公司定制一个3写6读寄存器堆,在交付流片后发现其中的电源地严重缺失,跟他们交涉时他们说这个不会有问题,导致龙芯2号系列的第一款芯片龙芯2A流片失败,后来龙芯自己定制了该寄存器堆才使龙芯2B流片成功。龙芯3A1000刚开始研制时曾经使用过商业DDR2/3 PHY,龙芯团队在检查中发现了很多问题,但厂家觉得没有问题不愿意修改,后来下决心自己做,从3B1500开始自主设计内存控制器。
正是因为吃过亏,加上龙芯觉得洋鬼子干得还不如自己干得好,所以就自己干。
从实践上看,虽然nVidia帮Intel做配套GPU,Intel还是坚持自己做GPU;虽然Imagination帮ARM做配套GPU,ARM也坚持自己做GPU;虽然开源的火狐浏览器很不错,谷歌还是坚持自己做Chrome。他山之石、可以攻玉。只有技术上不受制于人,才有产业上的主动权。
从实践上看,龙芯GS464E内核设计非常成功,就性能来说,已经优于同时期从境外厂商引进的X86和ARM CPU核。虽然龙芯GS464E内核在性能上超越了技术引进的CPU核,但由于技术引进的X86和ARM CPU基本采用了台积电28nm工艺,优于龙芯采用的中芯国际40nm工艺,因而在主频上明显处于优势。
为了在技术上超越技术引进CPU,龙芯基于GS464E内核开发了龙芯3A3000。3A3000主要通过工艺优化提升性能,对龙芯3A2000的CPU核略作修改:
一是结合3A2000的性能瓶颈分析把定点/浮点发射队列从16/24项增加到32/32项;
二是把最后一级Cache从4MB提高到8MB。
因此,CPU内核设计的工作量较小,很快就完成了RTL源代码修改,全面展开物理设计阶段。
3A3000物理设计中继续需要定制包括HT-PHY、DDR-PHY、锁相环、多端口寄存器堆、CAM等全定制模块。
3A3000物理设计中另一个难点是时序收敛。3A3000使用的28nm FD SOI工艺晶体管确实比3A2000使用的40nm LL快60%左右,但连线延迟大,而且互相干扰也大,废了很多周折。由杨梁率领物理组在2016年春节期间也没有休息,终于在2016年2月中旬交付流片。
2016年9月,龙芯3A3000成功流片,很快就运行了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有显著提高。
3A3000研制成功对自主CPU来说具有里程碑意义。3A3000的通用处理性能已经跨过了国际通用处理器性能的第一个门槛,其单核SPEC CPU2006性能已经不低于ARM用于服务器的高端处理器、Intel的低端系列(凌动系列)处理器以及威盛处理器,而且3A3000的访存带宽已经与AMD以及Intel的高端酷睿系列持平。这样的性能玩复杂的3D游戏可能还有差距,但对于办公场景应用是足够了。
第五部分:产业报国,未来可期
在2016年,使用申威处理器的“神威太湖之光”高性能机取得世界第一的好成绩,充分说明不论是通用CPU还是高性能机专用CPU,自主研发的道路都是走得通的,不仅安全性好,性能也高。尤其是通过自主研发形成持续改进能力后,未来的后劲更足。
2019年4月,龙芯3A4000样片流片成功,同年12月正式发布。同时还搭配龙芯自研的7A系列桥片,提高整机的自研水平。龙芯3A4000/3B4000一如既往地强调“完全的”自主研发。芯片中的所有功能模块均自主设计,所有电路设计源代码均为龙芯团队从零开始自已编写。同样的,整个芯片的电路版图均为龙芯团队自主设计。
龙芯设计团队严格遵循“实际应用需求牵引CPU发展”原则,未来方向是在龙芯3A4000/3B4000基础上继续提升处理器主频、提升内存控制器频率、降低功耗、提高核数。
目前,正在研发中的龙芯3A5000将通过12nm工艺改进提高主频,单核性能达到25-30分。龙芯通过20年积累完成CPU性能“补课”。龙芯3A5000与龙芯3A4000在引脚上兼容,实现在同一主板上“原位替换升级”。
同时,定位于服务器CPU的龙芯3C5000主要是增加核数,采用12nm工艺,每芯片包含16核,支持4至16路服务器,具备高端服务器的商业竞争力。
就发展路线来说,龙芯走“市场带技术” 的道路,坚持自主研发掌握CPU的核心技术。随着龙芯CPU性能的不断提升,越来也多的企业也开始加入龙芯产业链中。目前,已有数千家企业,数十万名研发人员加入了龙芯产业链,基于龙芯开发产品。
除了与国内企业通力合作之外,龙芯也在自力更生建设软件生态,像几个重要的API,以及MIPS的JAVA虚拟机、GS引擎等都是龙芯贡献的,而且龙芯还是实际的维护者,像MIPS的GCC编译器、Linux内核等,龙芯也贡献了大量的代码。
可以说,龙芯的道路之所以这么难,是因为龙芯选择了建设中国版Wintel这条最为崎岖的道路。这条道路需要龙芯自己设计CPU,自己建设软件生态,自己构建产业链,技术门槛搞,资金门槛搞,工作量巨大。虽然这条道路异常坎坷,实现的难度极大,但一旦做成了,无论对于国家信息安全,还是产业的可持续发展,意义都非常巨大。
,