龙芯项目,疑似以备胎的身份出生
CPU即“中央处理器”,并未限定它一定是集成电路,也未限定它只能是一块集成电路。但是高集成高性能低能耗的CPU,在现代的表现形式只能是超大规模集成电路。
2001年4月,在国内放弃高集成高性能CPU技术二十多年后,一款国人团队设计的高性能嵌入式CPU“方舟”流片回来成功点亮,紧接着2001年5月,中科院计算所“龙芯(最开始名为GODSON)”课题组正式成立,开始全力投入对GODSON CPU的研发工作。早在1999年9月,“方舟”前身的负责人李德磊,就找倪光南院士帮忙挽救这个被日立抛弃的半成品外包项目;2000年初时,计算所李国杰所长则在安排了胡伟武和唐志敏等人开始进行CPU技术的预研;李德磊的嵌入式CPU项目更名为“方舟”,并于2000年5月接收到首笔2000万元投资后继续研发;在2000年10月,计算所的“GODSON CPU设计与验证系统”被批准立项。时间衔接如此紧凑,要说“龙芯”项目的诞生与来自“方舟”的刺激和压力没有半点关系,我是不信的。
“方舟”是第一款由国内团队设计的,用于网络数据处理的较高性能的也较复杂的嵌入式CPU,为了让这颗初生的幼苗能够茁壮成长,倪光南院士为这款应用面较窄的嵌入式CPU量身定制了使用场景——网络计算机的客户端。使用“方舟”CPU的客户机只需要连接到远程桌面,其它的所有工作都由使用英特尔CPU的高性能服务器完成,也就是“云桌面”的局域网版本。为了使“方舟”有足够的资金进行持续研发、提升性能、迭代产品,倪院士义无反顾地通过推动政府采购、争取863计划补贴、找寻合作者等方式使“方舟”项目能有持续研发的资金。然而,方舟项目的实际控制者李德磊对于倪院士一厢情愿的热忱并不领情,在解决了项目流产的危机后,他对“方舟”的态度便十分消极。作为技术型商人他更喜欢有一定技术含量且利润丰厚的短期项目,而不想把自己捆绑在“追赶世界先进水平”这种看不到希望的事情上。虽然当时许多事情还没有发生,但也有了一些苗头,即便单说李德磊是加大拿籍华人这样的身份,也会令许多人不敢把国内CPU发展的希望都押注在“方舟”身上。
那么,既然“方舟”的研发进展已经证明了国人自主研发CPU不是痴人说梦,如果此时有人提出由完全可控的中科院计算所也进行一款CPU的研制,作为分摊风险的备选,就是一个合情合理的保底方案,之前反对声音就会减少许多。我甚至觉得计算所李国杰所长在“GODSON”开始设计之初的会议上提出的“高性能、通用、一步到位”的口号,也是为了补充“方舟”的不足。“方舟”的计划是先发展对性能和软件生态要求较低,也不会与Intel等巨头产生冲突的的嵌入式CPU,积累足够的技术和资本后再逐步进入通用CPU的领域,而李所长则认为可以一步到位地完成对通用CPU的设计,因为嵌入式CPU几乎不存在被卡脖子的可能,远不如通用CPU那么危险和紧迫。我认为李所长定出这样一个稍高一些的目标,也有为“GODSON”项目的立项争取更多支持的考虑,他也为国产CPU筹谋已久,“方舟”创造的契机不能被白白浪费。
项目一日不正式立项,预研就只能是预研,没有可支配的资源,也不能放下手头的其它工作,全身心投入CPU研究。幸好因为李国杰所长的大力推动,以及后来对“龙芯”项目的支持和保护,才使得在“方舟”项目停止后,国产高性能通用CPU的研发工作也没有止步,“龙芯”完美履行了备胎的责任。“方舟”真正的继任者,是由原方舟技术团队主要人员离职后组建的“君正”,“君正”仍然是以嵌入式CPU为切入点,市场生存能力比龙芯更强,只是无论以前还是将来,无论“方舟”还是“君正”,都没有研制通用CPU的欲望。
为何无论是倪光南院士,还是李国杰所长,都不愿放过国产CPU诞生和发展的任何一点机会呢?像骤见光明的飞蛾一样!因为越是深入了解技术和行业,越能够体会到我们看似光鲜繁荣的信息技术产业,随时都有垮塌的风险。长期以来,由于生产设备受限,核心技术受限,我国几乎放弃了对通用计算机中难度最大的几种零部件的研究,许多基础软件也因此没有诞生的土壤。CPU和存储器是别人的,操作系统和各种基础软件也是别人的,欧美国家向我们提供这些产品,颇像商人们向农民们出售农具和肥料时绝不透露这些东西如何研制和生产那样,他们会说:“先进技术你们不懂,何必自寻烦恼,你们买农具和肥料种地,等我们收购就好”。农民要赚钱继续购买生产资料,只能视商人需要什么就种植什么,要想种点独特产品自己开拓市场,会发现农具会坏掉、肥料用不了!现实其实更加残酷,计算机的关键硬件和软件,关系到我们生产生活以及国防建设及社会管理等方方面面的安全,一旦出现任何问题,都会造成灾难!越是了解风险,越是不能安眠,因此倪院士和李所长必须要做他们认为正确的事情,尽管在有些人看来这是螳臂当车又或杞人忧天。
龙芯的鸿鹄之志——要做世界一流的备胎
“龙芯一号”是我国第一款高性能通用CPU,不管“龙芯”项目是在什么情况下立项的,它的目标都不是作为方舟这类嵌入式CPU的备胎,只有如Intel、MIPS这样同类的通用CPU,才能是它的替代目标。由于现代的嵌入式CPU已经进化为使用低功耗通用CPU核集成其它模来实现功能高度集成,龙芯的目标也就与时俱进地变成了替代进口的桌面和服务器CPU。
高性能的CPU已不只一次地被美国禁止出口,CPU设计和生产方面的技术更是在禁运之列。特别在是海湾战争之后,一些敏感应用中使用的CPU,只能通过对制程较老的早期型号CPU产品进行逆向工程后,小规模自产才敢放心使用。因为指令集本身虽不能隐藏“后门”,但实现指令功能CPU却可以。CPU“漏洞”是由于设计上的失误而造成,而“后门”则是专门设计的特殊功能。大多数“后门”本身只是用于CPU检测和调试的非恶意设计,但无法避免通过“后门”来达到恶意的目的。CPU的设计者可以设计出《指令集手册》中不存在的指令功能,只要保密做得好,正常情况下就没有人知道CPU是否存在一些功能特殊的隐藏指令。专业人士想要分析一款CPU中是否存在未公开的特殊指令,并了解指令的具体功能也是十分困难的事情。例如2001~2003年的威盛C3系列CPU中存在的超级后门,在2018年的一个安全会议上才得以披露。可以说CPU都存在后门,问题的关键不于后门是否存在,而在于后门是由谁在掌握。有人会愿意买一套不能换锁的房子,却没几人能忍受还有一道暗门的钥匙在别人的手里!
我们自己设计的CPU,性能上可以与进口产品有差距,但在必要的时候必须能够完成替代,如果要把替代扩展到各种行业,那么出于成本考虑,能够使用已有的操作系统和各种应用程序就是最佳选择,也就是要做到对某种流行的CPU指令集兼容。指令集是一种描述CPU行为规范的标准,针对不同应用场景的CPU可以有不同的指令集,不同的指令集也不能相互兼容。例如一款可编程的玩具汽车,其嵌入式CPU的指令系统甚至只需要“前进、后退、左转、右转、停止”这样的简单指令,根据指令让CPU的特定引脚产生电平变化就可以了,只需极少的晶体管和成本就可以实现功能,但却不可能用它来完成写文档、做设计等复杂任务。即便同为通用CPU的功能相似的指令集如x86和MIPS,由于指令规范定义不同,其二进制程序也不能相互兼容,因为相互之间(机器)语言不通。使用编译型编程语言编写的跨平台的应用软件,都是把源代码针对不同的指令集分别进行了编译。Java开发的应用程序不需要编译,但运行Java程序的虚拟机也仍然需针对不同的指令集进行修改适配和编译。如果在不同指令集的CPU间迁移应用程序,当应用程序的数量难以计数时,需要的资源也会难以计数。
“龙芯”项目的第一个问题就是使用什么指令集。自行设计一套新的指令集对于专业人员没有技术门槛,新手的设计也不过是可能在某些应用中性能低下,但并不是不能完成功能,但要想设计一套简洁高效的指令集,就需要长时间的大量实践,积累经验融会贯通。困难的地方不在于指令集设计,而在于兼容,在当时的技术条件下,要想完全兼容某种指令集而不侵权是不可能的,要想在全行业推广就不能忽视知识产权方面的问题。X86指令集的授权不可获取,当时MIPS虽略显颓势但仍在服务器领域与Intel战得如火如荼,且在通信设备中仍然被大量使用,而SPARC和Power这两种指令集的应用又太少,ARM当时还是幼儿,于是兼容MIPS就成为了最不坏的选择。由于MIPS在服务器、通信设备、工控设备等方面大量使用,至少可以保证当国外的CPU罢工时或被主动禁用时,这些基于MIPS的应用软件可以不需修改和重新编译,就能在龙芯CPU上直接运行,让“龙芯”承担起备胎的责任。至于让龙芯CPU进入普通用户的个人电脑,那需要大量的应用软件适配,这个周期可长可短,是远期目标,并不甚紧迫!
为各个行业提供自主设计安全可控的CPU,是“龙芯”项目的信念和目标。只是各行各业自有其运行的惯性,威胁尚未临身时,“龙芯”项目组的一些观点就如患了“被迫害妄想症”一般可笑。备胎在表现出自己独有的价值之前,必须沉下心来,做出看得到的成绩。想要替代谁,就先要模仿谁,别人能做的你也能做,别人不能做的你还能做,那样才能成为备胎的首选,逐渐完成渗透。“龙芯”首先要做到的就是用自己的设计实现MIPS指令集的全部功能,就像学生做题,解题思路可以学习,但只有自己把所有题目都正确地做过一遍,深入到所有细节,才能算是完全的理解和掌握。如果像六、七年后某单位直接使用Sun开源的UltraSparc T2 CPU源码“自主设计”CPU那样,真实的设计的水平就会远远低于产品表现出的水平,也许有人抄作业能抄成学霸,但绝不可能一个团体都抄成学霸。
当时的“龙芯一号”是“GODSON”,而不是现在的根据设计用途重新规划的低功耗“龙芯一号”系列,但当时的“龙芯二号”仍然属于现在的“龙芯二号”系列。在当时由于MIPS集中有几个指令存在关联的专利,于是在设计“龙芯二号”的过程中就没有去实现那几个指令,当年国外某研究报告中是这样说的:“由于龙芯2号只是没有实现MIPS公司申请专利的部分指令,因此龙芯2号的指令系统是95%与MIPS兼容的”。由于报道中提到的指令相关专利已于2006年过期,“龙芯”后来新增的型号就都实现了这些指令的功能,算是100%兼容了。
备胎要体现出价值,只是100%的能力模仿是不够的,还必须要做得更快更好,于是龙芯项目组不断提升CPU核心设计水平,凭此提高CPU的性能。2003年在“中芯国际”完成流片的“龙芯二号”是“龙芯一号”性能的3~5倍,已经超过了Intel 奔腾(Pentium) II,但与同时期的主流CPU仍然有很大差距。龙芯在艰难进步,而Intel等公司也在用更雄厚的资金投入、更完备的技术储备在以更快的速度进步。为了缩小与Intel的性能差距,并能相对其它MIPS兼容CPU具有独特优势,龙芯还在MIPS指令集的框架下增加并实现了许多自己设计的新指令。最开始实现的新指令大概是与Intel MMX相似的64bit向量计算指令集,名叫Loongson-MMI,使龙芯CPU的浮点运算能力大幅度提升,而当时原生的MIPS指令集中还没有成体系的向量加速指令。
龙芯项目组磨练设计能力和对各种新指令的实验一直在齐头并进,在“龙芯三号”的3A1000/3B1000中甚至加入为二进制翻译加速的专用指令,以及256bit的向量加速指令。遗憾的是龙芯无法公开提供这些新增指令的说明手册。因为这些指令一直处于研究和实验状态,在每个新型号的CPU中都会有变化和修改,达不到定型的要求,也就无法提供给普通开发者使用。还因为龙芯在对待CPU的专利方面有“洁癖”,无论是实现各种向量计算的高性能电路和算法,还是二进制翻译的目标指令和翻译方法都早已有了许多相关的专利,如果某些专利无法绕过,龙芯宁可等待专利过期。对于可以绕过的专利,绕过专利的各种方式是否能保证性能也需要通过实验一一验证,如果专利调查不全面,甚至可能出现与已有专利意外重合的情况。然而仍然有一些对专利问题不敏感的客户,由于对自主CPU的高性能向量运算能力有强烈需求,而在某些定型后就几乎不改动的特殊项目使用这些新指令,普通行业用户却并不能享受到新增指令集带来的性能提升和便利。
尽管我觉得龙芯过余谨慎,宁肯被开发者骂也不公开扩展指令集的细节,实在有些过分。但龙芯体量太小,确实经不起任何的知识产权诉讼,也只有完全自主研发才会产生这样的烦恼。只有不公开,让新增指令保持在科研实验的状态,才能杜绝一却意外侵权(根据我国《专利法》的规定:“专为科学研究和实验而使用有关专利的”不视为侵犯专利权)。因此如果以后龙芯公开了自己的《指令集手册》,那就说明所有专利都已经完美绕开,指令系统定型完成,以后只会增加指令而不会删改指令了,这一天已经不会太远。
由于2006年的龙芯2E性能达到了Intel 奔腾(Pentium) III@1.0GHz的水平,进入了性能可以实用的阶段,于是从龙芯2E/2F开始,使用了龙芯CPU的袖珍主机、一体机等开始公开销售(只能从龙芯的合作企业直接订购,电脑城中没有卖的),我就找到过几台二手的使用龙芯2F CPU的袖珍主机,查看里面的内容发现它们原本被用于某酒店大堂及各宴会厅的大屏幕,联网展示各种图片和资料,最晚淘汰的那台持续工作到了2016年。但是MIPS桌面生态的孱弱是不争的事实,且MIPS正在衰败,软件生态的发展趋于停滞,而龙芯的人力和资金又无法自己建立软件生态。因为桌面计算机上凡是有大量用户的软件几乎都是闭源的商业软件,国外的不提,即使国内的软件企业大多也不会在无利可图的情况下主动去做软件移植。CPU的用户数量决定了软件开发商的热情程度,而没有大量软件的电脑又不可能被普通用户所选择,龙芯的发展陷入了瓶颈!
龙芯往指令集中加入二进制翻译指令,应该就是为了摆脱这一困境。它的设计目标是在龙芯CPU上流畅运行基于x86指令集的应用程序,如果有方法能直接运行x86的应用程序,就能补充软件种类和数量的不足,甚至为替代Intel CPU这一长远目标打开局面。可惜这一项目才刚有雏形时,由于“汉芯”造假事件的影响,以及“方舟”溃败的余波,有关部门对全国的半导体设计项目均收紧了资金支持,龙芯、申威、飞腾都遭了无妄之灾。当时龙芯项目组处于最困难的阶段,“龙芯”新款CPU的研发进度严重变慢。3A1000设计完成后没钱流片,863计划才临时安排了专项资金,龙芯项目组还预支了计算所七、八千万的经费,而且这笔钱属于暂借,龙芯项目组必须要归还。
龙芯是成熟的备胎了,要学会自力更生
做芯片研究很费钱,越是高端的、复杂的、先进的芯片研究,就是越是费钱。CPU是最复杂的芯片,是最精细的人造物,集成晶体管的数量以亿为单位,当然就是最费钱的芯片。龙芯是在用很省钱的方式自主研究CPU,但每代CPU核心的研发成本仍然是以“亿元人民币”为单位,不过从一代核心衍生的同代其它型号成本会降低一些。Intel这样的巨头舍得花钱,每代核心的研发成本是以“十亿美元”为单位,比如6代酷睿的整体研发成本就达到了71亿美元。Intel 在2004年的研发费用是47.8亿美元,逐年上涨至2012年已达百亿美无,2017~2020每年的研发费用都超过130亿美元。如果说跟Intel不好比,那么小米用买来的CPU核心自己再做一些集成设计的“澎湃S2”,烧掉了20亿人民币后偃旗息鼓,也能证明CPU研究有多么艰难!
龙芯项目组是有收入的,863计划对CPU研发项目的补贴算一部分,一些单位和行业对龙芯CPU的采购是另一部分,参与各部委和单位的科研项目竞标,完成后得到的报酬也是很重要的一部分。但在具体的应用中,由于龙芯CPU性能与主流存在较大差距,软件生态也极不完善,在那时龙芯CPU的应用范围极小。比如保密单位的保密计算机、武器装备和工业设备的控制系统、教学用一体机、以及本文前面提到的挂在酒店大屏幕上展示图片和资料的终端等,大多数都用在大家看不到的地方。使用得少收入就少,所获资金明显无法保证CPU研发的进度,当年的“方舟”设计要简单很多,李德磊在有政府采购输血和863项目补贴的情况下也仍然感叹没有钱赚,从而放弃了继续研发,更何况龙芯当时已经是性能达到了奔腾4水平的通用CPU。研制的CPU越来越复杂,研发成本越来越高,资金缺口也越来越大,龙芯项目必须另谋出路。
在2010年的时候,龙芯课题组大多数骨干决定从计算所辞职,放弃体制内身份、放弃在学术界的地位和前景,把课题组转型成立“龙芯中科技术有限公司”,计算所占大部分股份。如果下海能捞到钱,龙芯CPU就能有足够的研发资金,如果失败了,那也不需要回去了!项目组十年来坚持研究,接来送走大量的年轻学子,培养了大量的CPU科研人员,人员的流动也算是传递了CPU技术的星星之火,薪火不灭,终会熊熊!
龙芯中科公司成立后,为了筹措资金承接了许多小项目小系统的定制,以养活自己为第一要务,同时也继续进行更高性能的CPU研制。可是,这群刚下海的科研人员,下定决心破釜沉舟的首个重大项目就遭受了巨大的挫折,他们以为Pentium III水平的单核性能已经够用,脱离了市场的实际需求,研究方向走上了“邪路”。或者他们想暂时忘记备胎的身份,想要在主角的舞台上光亮一次,却选错了方式。
在4核的龙芯3A1000成功后,研究方向调整为更多的核心、更强的浮点运算,以及研发片间多路互联技术,打破美国对多路CPU互联技术的封锁。为此龙芯规划了8核的3B1000和3B1500,并支持多路CPU互联。从课题组转向为企业之后,众多项目同时进行,以及科研人员的不适应造成了管理混乱,使CPU研制过程也频频出错,研发进度缓慢。直到2012年4月,3B1000才达到稳定状态,峰值浮点性能达到了128GFLOPS,处于世界领先的行列。这一成就的激励,也让龙芯在错误的路线上越行越远,2013年研制成功的龙芯3B1500在浮点性能上终于成功超越了同期的Intel CPU,峰值浮点运算速度达到160GFLOPS,高频版达到了192GFLOPS,这个成绩直到现在也不丢人。但是,普通的应用软件及操作系统需要的是单核通用计算性能,超强的浮点运算能力也无助于提高桌面软件的运行流畅性。由于数年来没有注重单核通用计算性能的研究,3B1500相对2006年的龙芯2E在单核通用计算性能方面仅有50%的提升。可是这6、7年来Intel的CPU单核通用计算性能提高了5倍以上,龙芯的对手从奔腾3和奔腾4变成了酷睿3代和4代之后,备胎与主角的差距突然变得令人绝望。
耗费无数精力研制的浮点性能超强的CPU市场反应惨淡,发育不均衡的CPU在实际应用中处处展现短板。龙芯痛定思痛,停止了正在研发中的16核CPU,决定把提升单核性能作为未来的主要研究方向。尽管我认为浮点性能和多片互联不是“邪路”,但在CPU通用性能差距还远的时候,就去研究浮点性能和多片互联确实不合时宜,如果这些技术晚几年诞生就能有用武之地了。备胎不能提供需要的能力,那么备胎就会失去存在的意义。在“核高基”看来,龙芯数年的时光也是做了无用功,判定了自主研发之路走不通,龙芯保底的项目补贴也断掉了。对在自主研发表现失望之后,引进吸收国外技术的想法占了主流,一时间各种暗流蠢蠢欲动。
国家养蛊计划,备胎们的混战
许多有识之士认为,保障信息安全是一项巨大的工程,各种软件硬件环环相扣,只要任何一个点出现纰漏,信息安全就是镜花水月。信息安全不只是信息本身的安全,还包括整个信息技术产业的安全,假如别人不卖内存颗粒给我们、不卖存储设备给我们、Windows不给我们用、工业和科研相关的软件硬件不给我们用,或者这些软硬件本身存在后门令我们不敢用、不能用,那么我国的信息技术产业就会立即崩溃。多少年来我们都是在沙上垒塔,看似壮阔,实则岌岌可危。国产CPU只能保障信息技术产业的一个环节,必须把信息技术产业中的各个环节都国产化,这样才能最大限度地保障整个信息产业的安全。
中国经济和社会发展的速度令美国越来越紧张,对于近几年国际上的形势变化,上层也是早有预见的,中国不能卑躬屈膝,就必须做好应对的准备。早在十年前,就在广东进行了国家核高基重大专项支持的国产化替代应用试点。现在正在进行的为保障信息技术产业安全可控的国产化替代,以及信息安全创新应用中对国产设备的使用,都是这一计划的沿续和扩展。国产化替代计划主要目的是保障信息产业安全,要想达成这个目的,就必须能有与进口产品性能和品质相当的国产替代品,这实际上是一个培养众多备胎,让备胎们在竞争中成长壮大的“养蛊”计划。
为何不能像两弹计划那样集中资源,而要让众多企业参与竞争?这是因为计算机与两弹的“用户”截然不同。所有人都会用到计算机设备,能不能用,好不好用,需要所有的用户共同检验。广大的用户选择计算机设备时,首要考虑的是性能和软硬件配套的生态,以及不超过预期的价格,还有良好的售后服务。这些方面的实力,与技术是自研还是引进无关,与企业自身的理念和目标无关,能否竞争中胜出,只能由市场自己选择。因为国外企业的先发优势,已经占领了信息技术产业的基础软硬件市场的绝对份额,国内企业大多只是硬件组装工厂,在基础软硬件方面技术不如别人,性能不如别人,也就无法从市场中得到足够的资金进行快速的技术升级、产品迭代,差距会与国外巨头越来越远。国家为了解决这个难题,划出一块特殊的市场,把进口产品挡在外面,让国内各家企业面对的都是实力可期的对手,在充分自由的又有有限的竞争中快速发展。
尽管看似信创用户花了更多的钱买到了更差的产品,但只要这些钱是在国内流转,在国家看来就只是左手到右手的算术游戏,资金在流通过程中不但没有变少,反而有大量的企业在这个过程中创造出大量的技术和产品。特别是CPU和操作系统的技术发展和规模化应用,还能促使整个产业链的规模扩大,催化整体的水平提升。国产化替代计划创造了需求,在执行的过程中,不但能提升信息技术和关联行业的科技水平,还能培养出大量的科研人才和科技企业,经济总量也得到提高。科技水平提高还能凝聚国人信心,整个社会都会受益。在竞争中脱颖而出的企业,将成为行业的领头羊,收获直面国外巨头的资格。
龙芯是做CPU设计的,当然也会参加国产化替代试点的工程,从2013年第一期试点正式开始后,使用龙芯3A1000这款CPU的台式机就少量地投入了党政办公替代。现在正在进行的党政办公和部分敏感行业的全面国产化替代,就是这次试点的后续。
在国产化替代第一期试点开始的那一年,“核高基”也在否定了“龙芯”的自研路线后,把扶持重点放在了引进技术的CPU上。同一年,一家早些年被Intel逼到穷途末路的台湾半导体企业VIA与上海政府合作,把它的大陆分公司与上海市政府合资,摇身一变成为了国资控股的CPU设计企业。这家新成立的“兆芯”公司拿着由VIA的美国子公司“Centuar”几年前设计的基于x86指令集的CPU,顺利通过了“核高基”验收。然后“兆芯”获得到“核高基”和地方国资委总共70亿人民币的资金支持,财大气粗到处送机器,说凡是现在用龙芯的,他们都免费替换。很明显,国产化替代必然在若干年后全面展开,当时的申威和飞腾在桌面计算机方面还没有任何表现,不足为虑,在国产化替代这个巨大的市场上,龙芯就是它的唯一对手。龙芯由于前些年努力的方向错了,当时的龙芯CPU在通用计算性能方面确实远不如VIA数年前的产品,再怎么说VIA也曾经是Intel的对手之一,仅次于AMD。
但是飞腾也不愿在将来的国产替代市场上只有兆芯一家独大,在2012年ARM开始对外授权ARMv8之后,飞腾的高层之间吵了一架,决定抛弃之前使用的SPARC开源方案,转投ARM阵营,并于2014年10月发布了FT-1500A,与兆芯一时瑜亮,性能也超过了当时的龙芯CPU。
申威和龙芯一样有从低功耗嵌入式到桌面和服务器全系列CPU,它最高性能的CPU是用于超算的260核的26010(4大核+256计算加速单元)。申威面对桌面替代的蛋糕则是不温不火,那时申威的精力全放在了“神威·太湖之光”上。再说申威的桌面生态不说与x86和ARM相比,就算与基于MIPS的龙芯相比也远远不如,趋近于0,对于党政办公的国产化替代暂时没有热情也在情理之中。在国产CPU的大家族中,申威与龙芯可谓英雄所见略同,它们的发展模式如出一辙,所以它们俩如果互称“友商”那绝对是纯粹的字面意思。比如下面这张PPT图片,如果把“申威”两个字改成“龙芯”,绝对没有任何不妥!
大概是因为国内企业短短两三年都没有做好国产化替代的准备,特别是信息技术产业中的一些关键产品需要很长的研发周期,之前没有准备,在一期试点结束结束后还没有达到全面启动国产化替代的条件。为了让竞争更加激烈,场面更加火爆,于是在2015年又启动了规模稍大一些的二期试点,龙芯才有了继续提高性能,迭代产品的时间窗口,同时也给了更多的“CPU企业”筹备的时间。从2010年到2015年,龙芯在市场中拼命打熬,终于从挺过了奄奄一息面临解散的困难时期,于2015年正式收支平衡,开始盈利。此时龙芯CPU的最新型号3A2000通用计算性能也有了较大幅度的提高,而性能更高的3A3000也在研制之中。
准备参与到国产替代这场盛宴的CPU企业,除了早已存在的龙芯、飞腾、申威、以及VIA支持下的兆芯之外,华为也加入了进来。另外还有许多国际巨头也纷纷或主动或受邀与国内地方政府及机构合作打出了“国产”招牌。比如IBM与江苏省合作的“中晟宏芯”、高通与贵州省合作的“华芯通”、AMD与中科曙光合作的“海光”、Intel与清华大学合作的“津逮”……只是由于国产替代的准备期有点长,一些合作项目还没有等到收获的时节就已经黄了。
前面说过高性能的自主CPU研发成本都是以“亿元人民币”为单位,这个成本还是建立在团队都是专家的基础上。像小米“澎湃S2”的研发团队远不如龙芯,只是买来别人设计好的核心做集成,就烧掉了20亿人民币还没个结果。那么国内突然集中诞生的那么多CPU企业打算怎么设计CPU?在我看来他们不是真的想要研究CPU技术,至少已经早夭的那些CPU企业肯定是打的“只引进不吸引”的主意,只是想方设法地要往CPU里面加一点“国产”的东西,才有由头打出“国产”的旗号空手套白狼。
因为CPU研发成本高,而自主CPU的市场容量有限。假设一款CPU的整体研发成本为2亿人民币,却预计只能售出一万颗,那么每颗CPU需要均摊的研发成本就高达2万,即使能够销售十万颗,每颗CPU的研发成本中也高达2000。在销量达到百万颗之前,成本均摊怎么都降不下来,价格就 会一直保持在高位。自主研发CPU的公司通过各项收入及社会投资补贴CPU研发,用赔本赚吆喝的方式扩大用户群体,已经坚持了很多年。如果是直接把进口CPU包装为国产呢?那么可能500元买来的进口CPU性能都比自主CPU高,只要包装成国产,不但自己几乎没有研发成本,甚至可以卖比自主CPU更高的价格。比如500的成本卖5000,2000的成本卖20000,只需要少量的真实投资把帐面做好,这要比真正的自主研发容易多了,也没有研发失败的风险,轻轻松松就能赚到大把的钞票。其实这还不是赚钱的主要方式,因为国产替代的市场容量是有限的,真正的销量不会太高,且随着销售规模扩大价格也会逐渐降到主流水平。更大的利润是长期的“研发补贴”,在有国外“技术支援”的条件下,出“成果”的周期是可以计划的,每次提高性能都准确击中“项目验收标准”,能得到丰厚的回报。只可惜申请补贴的时间拖得太长了,厂房道具要钱,群演工资要钱,如果没有意志坚定的金主撑腰,不长时间就会原形毕现,最后破产清算,留下一地鸡毛。
国产CPU众生相,谁能迎来胜利?
在党政办公的国产化替代全面启动的时候,已经是2019~2020年了。龙芯终于把它的CPU推进到了3A4000。据介绍说,在相同的工作频率下,3A4000的单核性能接近于AMD的Zen1,但由于3A4000的频率最高仅2.0GHz,因此实际性能仅相当于AMD的“挖掘机”。我认为3A4000的主频低还是因为龙芯中科太穷了,要想提高CPU的频率,除了修改结构设计外,还有一个烧钱的手段。就像设计发动机,在结构原理不变的条件下还可以做许多细微调整,首先使用更好的材料和生产工艺肯定能提高发动机的最高性能,然后对各个零件的位置尺寸进行调整,每次调整之后重新试制一批样品,从实践中总结经验,反复多次之后,最终成品的性能绝对与最初的样品不可同日而语!但是太费钱,龙芯中科才解决了温饱问题,没钱!龙芯寄予厚望的3A4000与前代产品使用的还是相同的生产工艺——来自意化半导体的28nm制程。而同为国产的兆芯、飞腾早就用上了14/16nm制程的工艺,华为甚至用上了7nm制程的工艺。
这段时间中,申威终于推出了性能不错的4核桌面版本和16核的服务器版本CPU,型号分别为“申威421”和“申威1621”。只是申威CPU性能相关的资料比较少,也找不到任何的用户体验报告,不温不火,神秘依然。申威和龙芯一样,也是完全自己设计的CPU,由于它的主要任务是超算,不用考虑桌面软件生态,因此比龙芯更早使用了自己设计的SW64指令集,早已与Power指令集无关。由于申威的路线与龙芯极其相似,相互可谓惺惺相惜,龙芯的胡伟武经常在公开场合夸赞申威,说申威是世界第一的CPU(260核的超算CPU浮点性能超群)。只是由于申威之前对桌面生态没有积累,对桌面环境中各种基础库的优化也不到位,它的桌面版本CPU用户比龙芯还少,几乎是没有人用的状态。除了软件生态之外,申威还有个重大的缺陷,那就是没有市场化运营的经验。产品要进入市场,对客户的服务很重要,而之前申威只需要服务于超算项目,当客户变成形形色色的单位、个人之后,申威还需要很长时间才能适应。我个人很希望看到申威与龙芯煮酒论英雄的场面,但是条件不成熟,申威对这次的国产替代的参与程度,大概是站在人群之外保持微笑。
飞腾从2014到2020间发布了数款CPU,把核心代号从“FTC660”编到了“FTC663”,各代CPU的产品频率和核心数量有一些变化,但在相同频率下的单核性能却出奇的稳定,6、7年来,飞腾各代CPU的IPC正负不超过10%,几乎没有提升。其最新的桌面CPU升级到了8核,但CPU的单核性能甚至不如它的前一款4核的FT-2000+/4,只是据说每核的平均功耗更低,更加省电!飞腾还有一款设计中的桌面CPU,PPT上说单核性能将会比当前产品提升一倍,希望到时候能够兑现承诺,实现质的飞越。
虽然飞腾是龙芯在国产CPU市场上的对手,但龙芯中科似乎并不把飞腾作为对手看待。龙芯胡伟武几年前的一篇文章中就写到:“我们必须认识到,飞腾是我们的同盟军,都是自主软硬件的重要力量。”看来龙芯认为只要是对自主软硬件发展有利的、有助于信息安全建设大局的、能够在对抗WinTel联盟垄断时形成合力的,那么就是天然的盟友,对自身的利益得失反倒不是特别计较。
兆芯当前的最新CPU,虽然有比龙芯3A4000更高的主频,量产版本为2.7GHz,但其相同核心数量下的绝对性能也不过与龙芯的3A4000持平,不过它也有8核的版本。兆芯从2013年成立以来,共推出了ZX-C/C+、KX-5000、KX-6000三个系列的桌面CPU产品,其服务器版与桌面版没有本质区别。 从兆芯官方的宣讲来看,以前2.0GHz/单核20分、现在3.0GHz/单核30分、未来4.5GHz/单核45分,性能和频率直接成线性关系,说明对CPU核心的修改只是为了适应更高频率,而与IPC无关。
并且,兆芯在2020年10月,再次向VIA购买了“知识产权(不含专利权)”,花了2.574亿美元,约为16.75亿人民币。在相关报道中VIA提到它在美国的子公司“Centuar”仍然会继续设计基于x86指令集的CPU。我有些不太明白,兆芯一直在宣传它的CPU都已经是由国内团队设计,那么它花了2.574亿美元向VIA购买的不含专利权的“知识产权”是什么东西?VIA也已在多年前就放弃了x86 CPU业务,那么它的子公司“Centuar”设计的x86 CPU怎么处理?
兆芯花的2.574亿美元这个价格,让我想起了海光购买AMD的Zen微架构花掉的2.93亿美元。但由于AMD的协议限制,海光的CPU只能用于服务器,不能用于桌面电脑,因此海光的直接对手不会是兆芯,要不然同为x86指令集的CPU,兆芯该如何竞争?
除了使用VIA技术的兆芯和使用AMD技术的海光,还有使用Intel技术的“津逮”也对国产替代很有兴趣。若干年前全世界有三大x86 CPU企业,如今这三家又以另一种方式重聚在另一个战场。如果说兆芯和海光是分别使用VIA和AMD提供的IP进行修改,那么来自“清华大学”、“澜起科技”、“Intel”合作的“津逮”CPU则是使用一种异常粗暴的方式披上了“国产”外衣——由Intel提供“至强”CPU的die(封装成芯片之前的祼片),加上一个“安全芯片”一起封装在CPU壳子里。“安全芯片的”具体作用是“实时采样处理器I/O和内存数据并进行指令重演,从而实现对内置的X86处理器的动态监控,发现并处理异常的处理器行为”。对于这一说法,技术方面我不作置评,Intel是不是“承认”自己的CPU确实存在“异常行为”我也不愿多想。只是有些问题不明白:为什么一定要封装在CPU里面和CPU一起卖?装在主板上做成“安全主板”不可以吗?使用Intel提供的die进行封装是否能提高我国的CPU设计和制造水平?对国内CPU技术发展的意义在哪里?
华为也携着鲲鹏920加入了战场,这一系列32至64核的CPU使用的是与飞腾相同的ARMv8指令集,但在性能方面远超飞腾。早在2014年年初的时候,华为就找龙芯合作开发基于ARM64架构的CPU核心,打算做成服务器CPU。龙芯的胡伟武觉得华为很靠谱,但觉得ARM的ARM64架构不靠谱,于是就婉拒了合作要求。后来华为直接与中科院计算所合作,用优厚的待遇从龙芯中科“借”走了一些技术人员!不过大家殊途同归,都是在为国产软硬件发展而努力,星星之火散播出去本就是为了风火燎原。华为无论是研发还是经济实力都很强大,从可以全世界聘请CPU技术专家,用海量的资金进行各种实验。鲲鹏920使用了最新的7nm制程,在当时的国产CPU中无论单核性能还是多核性能都是最强(排除海光和津逮,那分别是AMD和Intel设计的核心)。当外界谣传鲲鹏920是买ARM的A72/A75核心来魔改的时候,龙芯胡伟武在中央电视台的屏幕上明确说明“华为的鲲鹏也是自研核”,为华为站台。只是由于CPU的生产环节不可控,鲲鹏920出师未捷,飞腾在被惊吓一番后,得到了华为许多未完成的订单补偿了心理阴影。
说到CPU的生产环节,这是整个国产替代计划中最难以完成的项目。CPU设计对产业基础的依赖比较小,更重要的是研究人员的能力,但龙芯、申威、飞腾等花了十几二十年也培养出许多本土专家了,这方面已经不再是问题。而CPU的生产对工业基础的依赖太大,精密机械、光学器件、乃至化学工业……任何环节有缺失都会被美国卡住勃子。华为就是低估了风险,才导致鲲鹏920夭折,这本不是华为的错,但相对龙芯和申威的稳扎稳打,又显得国内其它的CPU企业都太冒进。这大概也是因为龙芯和申威与其它CPU企业目标不同,而造成了对生产工艺的选择标准上存在差异。申威的任务主要是保障超算CPU自给自足,龙芯则想要保证各行各业的服务器和台式机信息安全。对它们来说,赚钱是保障持续研发的手段而不是目的,故而它们在CPU制程选择上都极为保守。因为对于设计完成的CPU,相同制程下改换工艺容易,把落后制程改成先进制程也容易,但即便以华为的实力也做不到把鲲鹏920的制程从7nm改成28nm。
一个CPU核心的性能可以表示为IPC(Instruction Per Clock)×频率,IPC就是一个核心每个时钟周期执行的指令条数,但是因为这个单位太小,所以现在大家通常把Spec2006/2017测得的单核得分折算到1GHz后的结果称为IPC,即“分数/GHz”。频率不能单独表示性能,比如十几年前的奔腾4就有3.8GHz的频率,但与现在相同频率的CPU相比,单核性能根本不能同日而语。CPU的频率可以通过微调设计和更新工艺的手段得到提高,而IPC则只能通过设计得到。对CPU核心的设计能力是CPU性能不断提高的根本保证,CPU核心的设计水平决定了性能的下限,工艺和频率决定了性能的上限。如果一款CPU使用陈旧的工艺也能达到较高的性能水平,无疑说明设计了能力的优秀。在优秀的设计能力加持下,只要使用更先进的工艺就达到到更高的频率,得到更高的性能,当前的龙芯3A4000就是这样一款产品。3A4000和3A3000使用同样陈旧的28nm制程,但得益与设计水平的提高,3A4000的IPC大幅提升,频率也从1.5GHz提高到了2.0GHz。与AMD的28nm制程的“挖掘机”相比,3A4000核心更小,功耗更低,但却以一半左右的频率达到与了“挖掘机”相当的性能水平。而即将发布的3A5000,是对3A4000核心设计进行改进后使用14/12nm制程,IPC和频率继续提升,整体性能也能得到极大提高。
十多年前的“龙芯二号”系列在“中芯国际”、“台积电”、“意法半导体”都流过片,后来龙芯三号”系列主要在意法半导体流片。这也是有历史原因的——在“龙芯三号”研制过程中,作为中法两国在IT领域战略合作的一部分,科技部安排龙芯CPU在意法半导体流片——2006年10月26日,两国最高领导人在人民大会堂见证了中国科学院与意法半导体签署战略合作文件。
龙芯3A1000和3B1000都使用意法半导体的65nm工艺;
龙芯3B1500使用意法半导体与三星合作的32nm工艺,期间换成了28nm工艺后发现由于厂家问题导致良率极低,又改回了32nm;
龙芯3A2000是使用中芯国际40nm工艺生产,相对于之前使用的32/28nm工艺倒退了不少,CPU主频甚至低于意法65nm工艺的3A1000。由于磨合时间过长影响了3A3000的进度,期间某引进的CPU大肆攻击自主CPU性能不行,要求在已有的自主信息化应用验证中换掉龙芯,而且确实换掉了一些;
龙芯3A3000有两个版本,公开销售的版本使用意法半导体28nm工艺生产,主频1.5GHz,Jun用的版本在境内流片但主频仅1.2GHz;
龙芯3A4000仍然使用与3A3000完全相同的制程和工艺,但凭借快速提高的设计能力,把主频提高到了1.8~2.0GHz,尝试超频的爱好者在不附加额外散热的条件下,普遍能超到2.1~2.2GHz稳定运行;
龙芯3A5000最初计划使用16nm工艺,但随着境内工艺制程水平提高,计划被变更为14/12nm工艺。目前由于尚未发布,还不确定它是在中芯国际还是在南京台积电流片,只是据网友推测在南京台积电流片的可能性更大。目前发现了一些被无意中泄露的测试成绩,相对3A4000有很大的提升,部分测试项目目前来看提高了50%以上,但整体情况还是只能等到发布会之后才能知道。
在今年,国产替代的规模将会进一步扩大,各家CPU企业都会施展浑身解数,竞争更加白热化。由于华为提前离场,海光被AMD背刺一刀的影响还没消除,津逮直接使用Intel的Die换壳封装的国产化比例存在疑问,兆芯当前状态比较消极,申威继续保持微笑,剩下的有能力争得头筹的选手恐怕只剩下了龙芯和飞腾。龙芯的3A5000即将问世,预计单核性能再提高50%,飞腾PPT上单核性能翻倍的D3000还未见踪影,我觉得当了二十年备胎的龙芯最有可能成为今年国产CPU的销量冠军。
龙芯要给自己加加担子,超脱备胎身份
龙芯即将发布的3A5000有个最重要的特点,就是改用了自己设计的指令集——LoongArch。这是龙芯在备胎生涯中首次用明确的行动展露野心!
近年美国为扼制中国发展而采取的手段越来越卑劣,MIPS对龙芯在商业上的牵制和干扰也会随之严重,尽管它远比x86和ARM弱小。龙芯是以设计完全自主可控的CPU为目标,在二十年前选择MIPS是为了自主可控,在十年前购买MIPS指令集的商业授权也是为了自主可控,现在抛弃MIPS指令集也仍然是为了自主可控。在不同的历史阶段,根据当时的情况做出不同的抉择,都是为了最重要的那一个目标。
除了申威,国内其它CPU企业大多不会像龙芯这样偏执。通过购买知识产权的使用权或所有权来实现自主可控才是流行的做法。就像小服装厂老板找大厂买些淘汰款式的授权,照着图纸生产出来卖往落后地区,只要比当地土著自己设计的更加新潮,就不愁没有收入。当土著设计的服装达到了相当的水准时,小服装厂老板再去求购几套淘汰款式,就能周而复始。龙芯为了追求狭义上的自主,而令在市场上销售的难度增加,不一定就是正确的方式。
2019年初,与旧版指令集不兼容的MIPS R6指令集宣布开源,龙芯不加理会,明确表示会继续沿用MIPS R3/R5;2019年末,在龙芯3A4000发布前夕,MIPS又被闭源。龙芯LoongArch指令集的消息公开之后不过几个月,拥有MIPS版权的Wave Computing公司宣布破产清算,然后完成重组转向RISC-V指令集。虽然这些事件可能都是独立发生和发展,但时间顺序确实是这样的。既然Wave Computing都转向了RISC-V,为何龙芯不转向RISC-V而非要推出自己的指令集LoongArch呢?我认为有两方面原因,一是因为RISC-V指令集很小,可以用很少的晶体管实现指令集功能,CPU成本低,频率高。但也因此难以承载复杂的软件应用,无法在任何应用中都保持合理的性能。二是因为拥抱开源不等于完全自主,除非开源的是自己的东西,以自己为主。龙芯将会为LoongArch组建“自主指令系统联盟”,不但开放指令集,还会开源部分IP核源码,这才是完全自主可控的开源项目。
如果说在龙芯诞生之初就自行设计指令集,会像新手画画一样拙略粗糙,那么在对CPU进行了二十年研究之后,特别是对指令系统持续十多年的研究实验之后,龙芯现在已经成为了最高明的画师,能够胸有竹游刃有余地设计全新的指令集。MIPS指令集潜力已被龙芯挖尽,多年来自行扩展的大量指令也占光了MIPS架构预留的指令槽,MIPS本身的设计也已经陈旧,成了龙芯继续提高性能的阻碍。LoongArch在设计上比MIPS更加合理更加先进,在仿真测试中,相同的应用程序编译为LoongArch比MIPS有平均16%以上的性能提升。
也就是说即将发布的3A5000在相同的频率下也可能比3A4000提高16%以上的平均性能,这甚至超过了Intel每代CPU的花费数十亿美元研发费用带来的成就。Intel也曾经做过类似的尝试,为解决x86历史负担越来越重的问题,Intel研发了IA64指令集,但因不兼容x86在而在市场上没得获得成功。那么龙芯的LoongArch是否也会面对同样的问题呢?同样的问题肯定是会有的,但龙芯与Intel有个最大的区别,那就是体量,龙芯的体量恐怕比Intel的一个研发部门都小。
龙芯的桌面和服务器CPU在市场上的绝对数量本就不多,其中大多数还是用在长期不需更新软件的场合。龙芯的软件生态十分弱小,当前党政办公使用的大多数应用软件本来就是国内软件开发商的作品,参与国产替代的操作系统和应用软件项目本就需要支持x86/ARM/MIPS/SW64多个版本,再多一个LoongArch并不是多大的负担。龙芯可以为了推广LoongArch而停止生产销售MIPS兼容的CPU,可以放缓对原有CPU的软件更新而全力开展对LoongArch的软件支持,这样的事情Intel不可能做得到。Intel不可能为了推广IA64而全面放弃x86,龙芯却没有相同的负担,哪怕像申威那样从0开始重新积累软件生态,龙芯也不缺少勇气。何况龙芯专门扩展了二进制翻译指令集来应对新指令集生态真空的情况,不仅原本的MIPS软件可以高效运行,还能运行x86和ARM的应用程序。只是在初期可能对x86和ARM兼容性不好,因为龙芯的二进制翻译方案不是纯硬件也不是纯软件,而是软硬结合的方式,软件方面的调试可能需要花费较长的时间。
推广自主的LoongArch指令集,信创推广国产替代就是最好的时机,只要LoongArch在国产替代中得到大量的使用,就能够发展出基本的软件生态,能够满足普通办公和常规的服务器应用。有了这个基础,就算是取得了面向普通电脑用户推广的资格。等到了这个阶段,龙芯就不再是Intel/AMD的备胎,而是成为能够与Intel/AMD等同台竞技的角色。
本页面的文字允许在CC-BY-SA 3.0协议四和GNU自由文档许可证下修改和再使用。
转载请注明:《甘当20年备胎的龙芯能有什么坏心思呢》