https://zhuanlan.zhihu.com/p/36391482
(2018年的4月16日,美国商务部发布对中兴通讯出口权限禁令,禁止美国企业向其出售零部件,史称“中兴禁运事件”。马上中兴事件就要一周年了,在这一年内,中国上上下下都知道了芯片这个东西,自主可控已经成为大家的共识,但是如何实现自主可控却存在着五花八门的看法。值此一周年之际,特地写几篇文章说一说芯片的自主可控。首先从CPU这个关键的芯片说起。)
中兴事件之后,国家对自主可控的关注度空前高涨,官方、民间都以谈论自主可控为己任,热度一时无两。虽为草根工程师,但位卑未敢忘忧国,也对国家信息系统领域的自主可控技术非常关注,每天推送的各种谈论自主可控的宏篇大论都要学习一下,耳濡目染嘛。但令人遗憾的是,网络的讨论往往说着说着就变成了互相攻讦,陷入极端对立的两极,鲜有能够客观科学地把一个具体的事讲清楚的。
2018年5月,中国工程院副院长陈左宁院士在网络安全自主可控发展与推进研讨会上作了题为《我国自主可控发展的对策建议》主题演讲,对我国自主可控产业发展提出了比较科学、中肯的对策建议。陈院士认为:我国网信领域的发展不能简单的照搬某个行业、某个国家的发展经验。这个领域是一个全球化的产业格局,你中有我、我中有你、密切协作是常态;也存在着别人离得开我,我离不开别人的安全风险。面对这种在开放环境下的挑战,我们要大力弘扬“两弹一星精神”,充分发挥社会主义市场经济条件下新型举国体制优势,加强顶层设计和统筹规划,坚持目标导向,全球视野,统筹布局战略性核心产业,形成国内、国外企业分工协作,组成相互连接的产业链条,保证供应链的可控。一方面要放眼全球,利用好全球的产业资源,产业链、技术链按级分段统一布局,分清楚哪些可以依赖全球市场,哪些必须立足国内;哪些技术和产品可以合作开发,哪些必须自己完全掌握;另一方面,对必须要抓住关键领域的核心技术和产业,要立足自身组织力量集中攻关,并在资金、人才和其它配套政策方面给予一整套的支持,力争早日取得突破,尽快解决当前国家安全所需,并为网信领域的长远发展夯实基础。
院士、专家一般站在比较高的层次来谋划整体战略的发展,小草根则更希望能在具体的问题上聊一聊自己的一些看法。
自主可控的定义
中国工程院卢锡城院士认为,自主可控的根本目标是安全可控,而安全可控至少应包括三个方面的涵义:
一是信息系统的软硬件在设计或制造阶段不会被对手插入恶意功能,导致潜在的不安全隐患;
二是无论平时、战时都能按需提供相应的软硬件产品,供应保障不受制于人;
三是不存在受制于人的技术“命门”,能自主修补产品缺陷和进行换代升级。
倪光南院士曾多次表示:“自主可控不等于安全,但没有自主可控一定不安全。”因此,自主可控是实现安全的必要条件,但不是充分条件。自主可控可以避免恶意植入的安全漏洞,但无法避免由于经验不足和能力不够带来的安全漏洞。
CPU是信息系统的核心,是驱动现代信息社会运转的大脑,其重要性无需多言。然而,我国关键核心CPU严重依赖国外进口,对于国家信息安全是重大隐患。同时,CPU对于国家产业安全也至关重要,一纸禁令就可以让中兴这样的一家市值千亿的行业巨头瞬间休克,足以说明问题的严重性。
CPU自主可控的技术路线
目前,国内对于CPU自主可控的求索已经走过了二十多年,国产的CPU也做出了不少,然而思路却并没有逐渐收敛,反而是技术路线越来越发散。行业前辈们踩过的坑儿、吃过的亏没有变成指引我们前行的经验,反而变成了用来互相攻讦的斧钺钩叉,着实令人哭笑不得。因此,作者认为有必要循着前人的脚步,来重走一遍国产CPU的自主可控之路,希望能够得出一些不一样的结论。(郑重声明:本文虽然是一本正经地八卦,但还是八卦,如果不小心冒犯到了哪个利益群体,请一笑而过。)
国内对于实现CPU自主可控的思路讨论很多,大致上可以归纳为四个层面的问题,一个是指令集层面,一个是设计层面,一个是制造层面,还有一个是人才层面。
今天聊一聊指令集的话题。
第一篇 指令集篇
一、什么是指令集
指令集严格来说叫指令集体系架构(或者指令集架构,Instruction Set Architecture,简称ISA)。教科书上说,指令集是计算机的抽象模型,它定义了计算机软硬件之间的界面。作者上学时刚看到这个定义的时候,一脸懵逼,这定义也太TM“抽象”了吧,还不如指令集仨字容易理解好不好?但是随着学习的深入,深刻感受到了这个定义的牛掰,简直不可能有更好的定义来描述ISA了。
没错,指令集就是一个“界面”,在它之上是软件,在它之下是硬件。软件和硬件约定好,软件写出来的程序(指令),硬件能够识别并按事先约定的语义执行。指令集就是这个约定,就是一套规范、规则。有了指令集,遵守同一套指令集规范的软件和硬件就可以跨平台执行,从而彻底地分割了软件产业和硬件产业,大家各司其职,各赚各钱,只要遵守这个规范就好了。所以,虽然指令集一般都归某家硬件设备提供商所有,但却都是公开可获取的,目的就是让大家都来给它的硬件设备设计软件,使它更易用、更好用,销量自然就会更好。当然,也有人表面上遵守这套规范,但是藏了私货——比如在硬件中实现了规范之外的功能,或者实现了跟规范不一致的功能——这就是“后门”。要避免这种主观植入的“后门”,则需要对硬件的设计全权掌控。有的时候,漏洞是不经意间引入的,这就是能力和水平的问题了,2018年初的CPU漏洞证明,就算是Intel这种经历过大风大浪的,也可能在这里翻船。软件设计同理也是如此。一句话,最关键还是“人”啊。
因此,指令集本身并没有安全或者不安全之说,关键在于如何实现:硬件实现时不要植入“后门”、不要留下漏洞;软件设计时不要植入“木马”、不要留下隐患——指令集作为一个“界面”,我很无辜,你俩的锅我不背。
如果要做一下类比,指令集更像是一种自然语言规范,比如英语、汉语等等。每个中国人都是遵循汉语这种“指令集”的一个“硬件实现”——计算机或CPU,每篇用汉语写就的文章就是一个个的“软件”。只要你是中国人,你就能读懂用中文写就的文章。语言规则的相对稳定是我们国家文明生生不息的重要源泉,这也就是指令集兼容的重要性。
指令集最重要的价值在于它所代表的生态。生态的成熟完善是一个过程,等于活跃度X时间。活跃度代表它的广度,表示同一时刻参与其中的人、企业、资金等投入的量;时间代表它的厚度,表示积累的过程。生态的比拼就是各项投入在广度和厚度上的比拼。
与指令集相关的一种CPU商业模式是指令集授权,被授权方拿到指令集授权后可以自行设计与这套指令集规范兼容的CPU产品,而该生态内所有配套软硬件都可以与该CPU产品搭配使用,可以节省自建生态的人力成本、资金成本和时间成本。由于指令集本来就是公开的,指令集授权不存在技术上的让渡或转移,因此其本质上是一种市场许可。如果不打算投放商业市场,指令集兼容的CPU可以随便设计,也不会有人找你麻烦,人家就当你自嗨了。当前,有的指令集授权费用比较高昂,说明它的市场价值比较大,像x86压根就不开放指令集授权,毕竟垄断的市场赚钱更容易嘛;也有一些价格低廉甚至于免费的指令集授权,说明它的市场价值已经消失或者暂时没有,希望通过价格因素来吸引关注,但生态建设就需要买家来自行投入了。
由于指令集的生态价值和市场属性,各指令集体系之间的竞争并不是纯粹技术上的竞争,更多的是经济和市场层面的竞争,所以我们在历史上看到了很多优秀的设计被糟糕的生态拖后腿的例子。
二、历史上的指令集与现状
历史上跟指令集有关的最著名的话题就是CISC与RISC的斗争,这场斗争现在还在继续,只不过已经跟最初的初衷不一样了。
CISC(Complex Instruction Set Computing,复杂指令集计算)与RISC(Reduced Instruction Set Computing,精简指令集计算)在字面上都是关于指令集的计算技术。在计算机技术发展的早期,程序员直接以机器码(或操作指令)进行计算机管理和编程,而指令集也通常是各个公司或机构按照应用和市场需求定制开发,没有明确的兼容性和技术风格要求,计算系统趋向于用硬件系统直接支持复杂的高级语言需求,为新的语言特性和应用需求增加新的指令,用额外或者特殊的硬件设计来实现这些指令,导致指令集设计越来越复杂。在70年代初期,CISC技术风格逐渐形成。当时典型被认为是CISC设计代表的计算机系统包括:IBM System/360大型机和PDP-11小型机。
随着计算机系统越来越普遍,对性能要求逐渐提高,竞争加剧,同时系统更新速度加快,不断增加新指令添加新硬件逻辑的CISC技术风格遇到了诸如开发周期长、技术验证困难、难以保证新旧产品兼容性、硬件逻辑复杂性与成本激增等问题。在CISC设计模式中,大量硬件逻辑和电路被用于实现复杂指令和特殊功能,而这些指令和功能仅在少数情况下被使用——二八法则。1980年加州大学伯克利分校David Patterson教授主持了Berkeley RISC项目,首次提出了RISC概念,最后衍生出MIPS、SPARC等处理器。IBM 801项目则成为后来Power和PowerPC处理器的原型。
CISC和RISC各有优缺点,也各自都有自己在市场上非常成功的代表。CISC现在最成功的代表莫过于x86,而RISC最成功的莫过于ARM,但双方在技术上都向对方有所借鉴和学习,形成了在微体系结构实现技术上的融合和统一。X86和ARM现在的竞争也不再聚焦于CISC或者RISC技术本身,而是双方所代表的通用CPU生态的竞争。
接下来我们先看看这两大指令集的发展情况,然后再来回顾一下另外几家曾经辉煌一时的指令集。
1、x86
Intel的x86现在大家都耳熟能详,但是在初期x86是被其他CPU大厂严重鄙视的指令集,只能蜗居在低端的PC和嵌入式领域,那时的殿堂级架构是MIPS、SPARC、PA-RISC、Alpha这种做小型机的。PC的爆发以及Wintel联盟给Intel带来了丰厚的利润,但IBM等整机厂对供应链保障的担忧以及一系列反垄断的诉讼让Intel不得不分一块蛋糕给AMD和Cyrix(后来被VIA收购)。自此,三家拥有x86的格局形成,再没有第四家能够进入这个圈子分钱了。真正让x86大杀四方的杀手锏是其兼容策略,依托于之前的CPU研发的软硬件产品,在更新换代的x86 CPU上依然能够完美运行,这特性对于个人计算机用户以及后续的通用服务器用户来说简直太美妙了,大大降低了更新换代的成本。而帮x86打开服务器市场的却是他一直看不上的AMD,当时Intel仗着财大气粗玩鹰去了,AMD老老实实搞x86 64位扩展,正是凭着这一设计切入了此前从未染指过的服务器和工作站市场。等Intel明白过味儿来,才匆匆推出IA-32e、EM64T,最终以Intel 64重新占据主动,直到占据99%的市场份额。
个人认为,x86的成功除了几家企业的技术底蕴外,更得益于两个重要的机遇,一个是踩准了PC机发展的浪潮,另一个是把准了用户的脉搏,也就是走了一条兼容发展的技术道路。而另一家当红的指令集ARM则是靠一套全新的商业模式获得了颠覆既有霸权的机会。
2、ARM
与许多其他RISC指令集一样,ARM诞生于剑桥这样学术氛围浓厚的大学城。最初的二十多年,ARM发展的不瘟不火,一直在嵌入式领域维持,为一些移动和手持设备供应芯片和解决方案。在1990年代初期,ARM开始尝试授权业务,把自己设计的处理器内核授权给芯片厂商集成使用,如GEC Plessey、TI和三星等。同时把指令集授权给DEC等这种公司,让他们设计跟自己兼容的CPU。DEC基于指令集授权开发了StrongARM(卖给Intel后改名XScale),比ARM自己的处理器核性能还高,但这也没有动摇ARM走授权商业模式的决心。到2007年,采用ARM核心和ARM指令集的芯片出货量已经超过100亿颗。苹果曾在智能手机大热后试图以80亿美元收购ARM,遭到拒绝。时任CEO表示“ARM作为一家独立的公司更有价值”,捍卫了自己作为一个中立的商业授权公司的地位。正是这种独特的商业模式,使它在移动计算的浪潮中抓住机遇,逆袭CPU霸主Intel,成为移动领域新的霸主。
在固守住自己移动计算的阵地之后,2010年,ARM推出了64位指令集ARMV8,开始向高性能领域进军,对x86发起挑战。这种老二挑老大的戏码本来无他,拉开架势干就行了。但是ARM商业模式决定了他一直是站在背后的那个,冲锋陷阵的是苹果、三星、高通、华为这种量级的。群狼pk巨象,究竟鹿死谁手呢?个人认为,结局不会是你死我活。因为ARM出击的根本就不是x86已经站稳的市场,而是在新兴的云计算、数据中心这样的市场,或者说创造一个市场出来玩。这样的市场上x86并没有占据压倒性的优势,用户还希望有更好的选择。你走你的阳关道,他走他的独木桥,或者说你出关公,他出的是秦琼。当然在自主可控市场那又是另外一番景象了,诉求不一样,后面会讲。
3、MIPS
MIPS可以说是RISC指令集的鼻祖,最初的版本简洁高效,跟现在炙手可热的RISCV好有一比,毕竟都是出自斯坦福轩尼诗和帕特森老先生团队之手。曾经的MIPS红极一时,就是小型机的代名词,国内的多家超算都用过。但接连遭受x86和ARM的冲击,逐渐退出服务器、小型机市场,退守嵌入式市场,近年来嵌入式市场也逐步被蚕食,生态日益萎缩,已经多年没有更新。近年,MIPS接连被收购,先是2013年核心专利被ARM/Intel/IBM等瓜分,剩余价值被Imagination以6000万美元收购,进而2017年又被美投资公司Tallwood Venure Capital收购,直到2018年又被美国AI创业公司Wave Computing收购。
指令集的市场起起伏伏,但大佬的陨落总让人唏嘘不已。然则,MIPS即使穷途末路也没给中资收购的机会,Imagination都卖给中资凯桥了,还要把MIPS CPU的相关业务分割出售给美国公司,里面的门道可想而知了,有根小辫总要抓住啊。
4、Alpha
曾经惊天地、泣鬼神的Alpha是指令集长河里一道炫目的流星雨,但大家一致认为Alpha指令集其实没什么值得称道的,让他名垂青史的是它的芯片设计——Alpha21x64系列。1992,DEC把之前撤销的一个项目Prism重新拾起来研发一种新的处理器,跟SPARC竞争。这个处理器代号命名为AXP(据说是Almost eXactly Prism的缩写)。Alpha处理器只推出了三代,DEC公司1998年就被康柏收购,康柏后来又推了一代21364就彻底取消了这条产品线。
Alpha处理器的市场一直做得不好,可谓叫好不叫座,也常被大家用来作为技术被市场打败的反面典型。Alpha在市场上存在时间比较短,厚度和广度的积累都不够,生态没有真正建立起来,被x86打败也就不足为怪了。Alpha相关的专利辗转被Intel收购,被用在多款x86处理器中,也算是死得其所了。
5、Power
我一直认为IBM是CPU市场上比较高冷的玩家,一生只做牛掰的事,好像从来不差钱儿。从1980年代到现在Power指令集也走过了30多个年头,中间有一段时间叫做PowerPC,现在统一叫做Power ISA。IBM基于Power处理器的高端服务器(p/i/z系列)一直是大型行业应用领域的宠儿,可靠稳定。system x系列卖给了联想,但基于Power处理器的高端系列打死也不卖。同时IBM Power还是超算领域的超级玩家,曾经创造过多个第一。
即便如此高冷范的玩家,也绕不过生态这道门槛。为了挽救日益萎缩的Power生态,IBM在2013年成立了OpenPower联盟,推动围绕Power处理器的生态环境建设,Power指令集仍由http://Power.org来控制,但开放了Power处理器的授权业务。目前国内也有中晟宏芯取得了授权,研发国产Power CPU和服务器。
6、SPARC
SPARC的最初设计也深受伯克利RISC项目的影响,后来成立Sun公司将其商业化。SPARC可以说是开放指令集的先驱,早在1989年,Sun就将SPARC指令集、商标委托给SPARC International这个组织进行授权管理,通过免费授权(仅象征性收取99美元)、免版税的方式来做大做强SPARC生态系统。在2006和2008年,更是开放了UltraSPARC T1/2的设计代码,进一步增强开放性,吸引生态伙伴。富士通基于SPARC的开放性授权研发了SPARC64 VIIIfx处理器,帮助京计算机夺得2011年TOP500冠军。由于生态的萎缩,Sun最终也难逃被Oracle收购的命运。近年,Oracle宣布终止SPARC处理器的研发,这一经典的指令集也画上了句号。
7、IA-64
1994年,在Intel想向64位架构进军的时候,它首先想到的不是在x86基础上进行兼容扩展,而是跟惠普一起搞了一套全新的指令集IA-64(相对于IA-32即x86来命名),并为这个架构取了一个史诗般的名字——EPIC。但其实本质上EPIC还是RISC的理念,只是糅合了超长指令字VLIW显式并行的软硬件协同优化技术。由于Intel和惠普的号召力,大厂纷纷跟进(其实也间接导致了MIPS和Alpha的没落)。当然,Intel并没有忘记自己向下兼容的法宝,在第一代处理器Itanium中集成了一个二进制翻译引擎来支持IA-32应用(性能可想而知)。但Itanium连续跳票不说,到2001年终于出来的时候性能却被同期的其他处理器秒成渣。好在2002年紧接着推出的Itanium2稳住了军心,不过IA-64没有取得意料中的成功已是不争的事实。行业软件大牛也出来diss:IA-64的编译器根本没法写!而AMD在此期间锲而不舍的走兼容x86的道路,推出的皓龙迅速占领了服务器市场,狠狠地打了Intel的脸。等Intel回过神儿来,重新祭出x86兼容的大旗时,IA-64的生命无疑也就进入了倒计时。不过,Intel凭借着顽强的毅力,愣是把这个产品线维持到了2017年,推出了Itanium9700。
三、自主可控CPU的指令集面面观
如前所述,指令集是软硬件之间约定的接口标准,它代表一种广度和厚度上的生态(活跃度X时间),它所隐含的三要素可以归纳为“三个一”:一个市场、一批人才、一系列软硬件。所以,国内CPU相关生态的建设也要从市场、人才和软硬件积累几个方面来着手,在广度和厚度上部署资源。
国产自主可控CPU的技术路线体现在指令集层面可以有两种路线,一种是完全定义全新的指令集,一种授权已有主流指令集。
1、完全定义全新的指令集
完全定义自己的全新指令集可以从根本上解决指令集层面的自主可控问题,自我定义、自我发展,不受掣肘。但是,其问题也是显而易见的。首先就是无法借力成熟生态,市场/人才/软硬件这三要素都要从零开始,在广度和厚度上会跟主流生态的差距越拉越远。指令集本身受制于人的问题可能解决了,但是在应用过程中产业链各个环节受制于人的程度却加剧了。
另外一个关键问题是知识产权。我国在CPU这一领域的积累比较薄弱,特别是相关专利的积累,不可避免地会遇到专利大棒的骚扰。不要想当然地认为自己定义一套指令集就可以轻而易举地绕开已有的专利。当前关于指令集的专利(指令编码没有专利保护,但是一些指令集架构技术还是受到了专利保护,比如存储管理、向量处理等等)是比较难以绕过的,需要经受专利战的考验。国际上已有的指令集如x86、MIPS、ARM、POWER等也都互有侵权行为,但凭借自身在专利上的积累,通过交叉授权可以达到一个动态的平衡,“你中有我,我中有你”,免受专利官司的侵扰。当年,MIPS被收购的时候,ARM联合其他家赶快收了MIPS,就是因为MIPS作为现代通用处理器的奠基者拥有很多核心专利,如果落入专利流氓之手,处理器江湖将是一片腥风血雨。而MIPS再怎么拆都不卖给中国,这个道理你也懂的。
完全定义自己的指令集国内也有先河,比如建国初期的103/104、109乙/441B等电子管、晶体管计算机肯定都是自定义指令,改革开放之后的银河1、银河2中的向量处理机(当时还不是处理器这样的超大规模集成电路,而是用分离的小规模集成电路元器件设计的处理机)也是自己定义指令集,国防科大自定义过流指令集、DSP指令集,北大众志定义过Unicore指令集等。在一些嵌入式领域或新兴市场领域,很多厂商比如中天微也是自定义指令集,目前寒武纪等一些AI处理器也是定义自己的指令集。
在通用CPU领域,目前国内完全自定义指令集的情况还没有。神威、龙芯、飞腾在十一五期间曾讨论过设计一个全新的、统一的国产指令集,但在当时的环境下没有成功。申威在自定义指令集上进行了有益尝试,在Alpha基础上进行了重新定义和设计,推出了SW64指令集,算是半个。Alpha指令集目前已经没有商业实体来声索其权利,所以修改alpha指令集不会带来法律上的麻烦,但是原有alpha生态下的工具链(编译器、开发环境等)无法再利用,需要进行指令的映射和转换的工作。由于alpha已经停更了近20年,一些新的软件或开发环境均需要重新开发、调优,短时间内与国际先进水平差距较大。另外,正如前述,alpha一些指令集体系结构的思想和技术是有专利保护的,相关专利已被Intel收入。SW指令集目前在网上并没有公开发布,如果公开发布,未来会不会带来专利方面的麻烦还有待商榷。
在通用领域这个市场重新定义全新的指令集并不是一个好的解决方案,一方面是因为通用领域需要背负的软硬件遗产太多,重新定义等同于重新建立软硬件生态。另一方面,中国本身在IT领域与国际先进水平差距就比较大,如果还要在对安全性无关紧要的指令集上重新进行定义、重新构建生态,差距只会越来越大,自主可控并不等于要回到“解放前”。
在一些与国际水平并跑或领跑的领域,则可以主张抓住市场切换的重大历史机遇自定义指令集、自建生态,通过技术竞争和市场竞争确立主导地位。
但有一点需要提醒大伙儿的是,在ARM成为移动通信市场老大之前,中国已经有了国产CPU,虽然比intel差老远,但比ARM并没有弱多少。但移动生态建设时,中国在哪里?为什么不是国产CPU成为霸主,而是弱鸡ARM成为霸主?这里面的教训是什么,值得我们深思。
2、主流指令集授权
通过指令集授权兼容已有主流指令集的好处是可以借力成熟生态,通过设计层面的自主来解决可控问题。另外,不用担心专利问题,ISA层面的专利风险指令集所有者已经解决了。但指令集授权的发展却不是随心所欲的,为了保持已有和未来生态的兼容性,就需要遵守规则,仅在允许的范围内扩展。此外,一些指令集架构授权价格也不菲,是一笔不小的开支。
采用授权已有的指令集(并基于已有指令集改编扩展)的方式是目前国内CPU厂商普遍采用的一种方式。与大部分人说相同的语言容易沟通和交流,同理,兼容已有指令集有利于已有生态系统的继承和使用,直接进入已经经营培育了多年的市场。
目前国际上能够获得授权的指令集在国内都有涉及,包括alpha、MIPS、arm、Power、SPARC等。X86虽然通用领域生态最好,但是它的指令集并不开放授权,所以国内做x86兼容的自主可控CPU在指令集层面必然是个伪命题,不管股份变换如何眼花缭乱,都解决不了指令集授权的问题。
龙芯走的是兼容并扩展的路线,指令集核心是MIPS,MIPS没有的功能则在私有空间扩展指令支持。MIPS曾经是一些大型机用的CPU指令集,后来市场被x86挤压后,转战嵌入式领域,之后被ARM挤压后,市场逐步萎缩,最终被收购,相关专利已经落入ARM和一些投资公司之手。龙芯在2000年代刚开始推出的时候宣传是自主知识产权处理器,但是后来遭遇了MIPS诉讼,先是通过意法半导体的授权曲线解决了授权问题,最后是在2009年选择了向MIPS公司付款来解决MIPS指令集的授权。虽然需要几年交一笔钱,但这种授权也等价于一种永久授权。这不能不说是非常明智的选择,也是市场化的必由之路。当年这件事还引起了不小的信任危机,网上对龙芯一片骂声,被划归“汉芯”之流,计算所废了好大的劲才解释过去。回到MIPS授权,龙芯谋求合法授权的决定虽然正确,但由于MIPS的日薄西山,发展动力不足,架构相关扩展与软件更新都非常缓慢,不能满足龙芯向现代服务器、桌面等领域发展的需求,因此龙芯只得自己来扩展。如果这种扩展在公共空间又未经MIPS审核和合并,带来的后果是与MIPS主干标准的冲突,新的MIPS标准软件在龙芯新的处理器上无法正常运行,比如java、虚拟机等等。其扩展出来的LoongISA指令90%的情况下不会使用,而且多数指令在MIPS标准的扩展中已经有了,有点为了扩展而扩展的意思。另外,龙芯扩展的LoongISA手册也没有在网上公开发布,与其他自定义指令集一样,未来会不会带来专利方面的麻烦还有待商榷。总的来说,龙芯的做法让人看不太懂,兼容了一个不活跃的生态,又通过野蛮扩展亲手毁掉了这个生态,在类似于禁运这种极端情况下,MIPS核心指令集也受制于人,无法继续使用。因此,龙芯的这种指令集技术路线既没有获得类似于完全自定义的可控性,又没有获得兼容成熟生态的便利,颇有点不伦不类。
华为、展讯、飞腾、华芯通等走的是兼容ARM指令集的路线,这几家加起来涵盖了从高性能计算机、数据中心到服务器、桌面、移动,再到嵌入式的整个IT市场。ARM是现在与x86一样活跃的指令集,与x86霸占服务器和桌面、逐步向移动渗透相对应的,ARM是霸占移动、逐步向高端计算领域渗透。这两大指令集还代表了截然不同的两种商业模式:x86是intel一家独大(AMD、威盛市场份额已经很小),垄断经营,掌握定价权和发展权;ARM则是拉帮结伙玩社区,成员共同制定指令集的发展路线,共同制定标准,共享市场,鼓励百花齐放、百家争鸣。ARM将自己定位成一个生态经营商,在社区里面更像一个召集人,苹果、三星、高通、华为都比他强大。兼容ARM指令集可以借力成熟生态,从指令集三要素上来考虑,软硬件、人才和市场都是实实在在摆在那里的,做出芯片直接就可以拿来投放应用,比起Alpha和MIPS的生态强得不是一星半点儿。但ARM的授权费用并不低,有钱的可以拿个永久授权,钱少的只能分期付款,先试试水,赚了再续。另一个问题是ARM指令集的扩展在商业市场下的扩展并不是随心所欲的,只能在预留的接口下扩展。ARM作为生态维护者,肯定不想看着一手培育起来的生态分裂、产生多个分支,那样ARM的价值就不存在了,ARM生态也会步MIPS的后尘。ARM希望的升级方式是大家坐下来提各自的需求,只要有道理、符合技术发展趋势,它就接受,但必须由它来统一协调寄存器和指令的定义和扩展,然后发布新版本,社区伙伴步调保持一致。相比来看,兼容ARM指令集的这种方式目前看来更有现实意义,国内的几家需要进一步在ARM生态体系中逐步提高自己的话语权。
目前,还有一种近期讨论比较多的兼容路线是兼容RISC-V。RISC-V是由计算机体系架构殿堂级人物David Patterson教授团队开发出来开源指令集,除了要交点会员费之外完全免费(具有发展决定权的会员费要高一些),而且可自由扩展。这些特征使得国内有一大批研究人员认为中国应该像印度那样把RISC-V定为“国家指令集”,基于RISC-V来解决我国通用CPU的自主可控问题。印度国家指令集这个事其实是一种误读,事实是有几家印度公司在做RISC-V处理器,而且拿到了几千万美元的国家资助。如果按这个标准,中国好几家都已经是国家指令集了。RISC-V技术路线的最大好处是在授权方面没有限制,解决了我们的一个心结,但其在通用领域的应用还有一些掣肘。首先,RISC-V在核心指令集之外扩展没有任何限制,但这种遍地开花式地扩展会导致生态碎片化。如果是不被纳入核心标准的扩展,标准的RISC-V生态是不支持的,需要自己打造生态,与自定义指令集存在同样的生态和专利问题。如果是要纳入核心标准的扩展,那么谁的扩展被列为核心标准就存在一个谁的话语权大的问题。设想同以RISC-V为“国家指令集”的中国和印度是否要进行一场中印“指令集之战”来争夺RISC-V的主导权呢?其次,RISC-V目前仍缺乏一个合理的商业模式,参与其中的企业如何获利?如果一切都是免费的,生态系统中的开发人员的动力从何而来,如何能够保持持续不断的、高质量的投入?因此,指令集的免费可能带来的是应用推广每个环节上的收费。此外,由于生态刚刚起步(RISC-V上的PC、移动和服务器生态还没有起步),RISC-V在通用领域的应用性能与主流生态上的应用性能存在较大差距,这与完全自己定义指令集、从头到尾自建生态的弊端是一样的。虽然并不看好RISC-V在传统通用CPU领域的愿景,但是RISC-V在一些新兴应用领域,尤其是微控制器、物联网,甚至是超算等对生态不是很敏感的场景,以及领域定制体系架构的兴起,是绝对可以有所作为的。其实,历史上开源指令集并不缺乏,SPARC就是早早做了开源,但最终还是没能翻身。时也?运也?其中的经验教训,值得RISC-V爱好者仔细研究一下。
结束语
国产CPU如果要做大,必须要有一个能做强的生态,指令集是绕不开的话题。完全定义一套全新的指令集显然是最可控的方式,但只适用于大家在同一起跑线上的蓝海市场,而且需要在投入的广度与厚度上领跑同类才能站稳脚跟。随着领域定制体系架构(DSA)和敏捷硬件开发的发展,在未来的市场上新诞生一个大一统的生态几乎不再可能,更多的细分市场将依托应用兴起。中国是应用大国强国,对市场的深切感知应当帮助我们洞悉新兴计算革命的浪潮,抓住历史的机遇,构建全自主的指令集生态。
那么在已经是红海的通用CPU市场,目前国内CPU企业普遍采用的主流指令集授权的方式能否解决安全可控的问题呢?让我们回到卢锡城院士关于安全可控的三个内涵。指令集本身与安全无关,基于指令集授权自主设计能够避免恶意后门。选择生态产业链丰富、供货有多重保障的指令集授权能够解决供应受制问题,美国自己在保供应问题上也选择有多家供货商的技术方案,把供应可控绑定在一颗独苗上的危险性显而易见。而且指令集本身不是技术壁垒,前面说了,即使没有授权,做着“玩一玩”还是可以的。最后,自主设计的权利掌握在手里,修补缺陷和升级换代显然也是水到渠成的事情。