一本正經地八卦一下CPU的自主可控

(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指令集仍由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企業普遍採用的主流指令集授權的方式能否解決安全可控的問題呢?讓我們回到盧錫城院士關於安全可控的三個內涵。指令集本身與安全無關,基於指令集授權自主設計能夠避免惡意後門。選擇生態產業鏈豐富、供貨有多重保障的指令集授權能夠解決供應受制問題,美國自己在保供應問題上也選擇有多家供貨商的技術方案,把供應可控綁定在一顆獨苗上的危險性顯而易見。而且指令集本身不是技術壁壘,前面說了,即使沒有授權,做著「玩一玩」還是可以的。最後,自主設計的權利掌握在手裡,修補缺陷和升級換代顯然也是水到渠成的事情。

推薦閱讀:

相关文章