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

上回書說到CPU自主可控第一個層面的指令集問題。這回聊一聊接下來的設計問題。

第二篇 CPU設計篇

在設計層面,也有兩種路線:一種是自主設計,一種是拿來主義。

CPU自主設計的含義是,從目標需求和功能定義出發,完全正向設計CPU的每一個單元和模塊。說得白話一點,一針一線、一磚一瓦都是我自己的,里里外外、上上下下我都一清二白。這種設計思路顯然不會帶入任何主觀的「後門」(除非人都沒控制好,被惡意植入,這在後面的人才層面進行討論)。設計環節還包括所用到的工具和設備,一些流程需要藉助工具或者設備自動完成。要保障CPU設計上完全的清清白白,這些工具和設備也是要符合自主可控的條件,否則我們有理由懷疑在這些自動化過程中可能被混入非法邏輯。如果繼續追溯下去,生產、設計這些工具和設備的廠商在其整個流程環節上也要做進一步的檢查,在這些工具和設備的設計製造過程中是否保證可控……可能有人會說這是杞人憂天,但安全無小事,還是小心為妙。

拿來主義則是完全照搬照抄國外已有的設計,也就是一些專家口中的「馬甲」——本山小品深入人心,形象傳神。「馬甲」CPU的核心代碼或技術都是來自境外,而且本土沒有什麼有經驗的技術團隊來消化理解,裡面有沒有「後門」也搞不清,充其量只能算是國產品牌,供貨可能沒問題,但是技術保障和可持續發展能力就堪憂了。這種技術路線在設計層面顯然無法實現自主可控。

由於CPU的功能複雜、模塊眾多,以上兩種路線都顯得過於極端,現實中的國產CPU往往介於兩者之間,但區別在於是不是關鍵的模塊進行了自主設計,另外在關鍵環節上是不是使用了自主的工具和設備。至於哪些模塊關鍵、哪些模塊非關鍵,哪些環節關鍵、哪些環節非關鍵,就是見仁見智了。通常我們認為處理器核是關鍵的,畢竟它負責計算,沒他不行;存儲是關鍵的,畢竟他負責數據,沒它不行;互連也是關鍵的,畢竟它負責通信,沒它不行;IO好像也是關鍵的,畢竟……這樣排下去,好像一個都不能少,畢竟誰會閑著沒事放一些沒用的東西佔地方呢。所以,宣傳者往往自己能做哪個就說哪個是關鍵的。

所以現在的國產CPU基本都採用折中路線,畢竟自主可控不代表回到原始社會。如果真的回到了原始社會,就算是自主可控了,這仗可怎麼打?

國內做CPU的歷史其實應該是在90年代末才開始。如果再往上追溯一下,更早的104機、109、441B,以及銀河1、銀河2都自己做了中央處理機,而不是中央處理器。為什麼叫處理機呢?因為是用分離元器件或者小規模集成電路搭建的,而不是現代意義上超大規模集成的CPU晶元。如果在八九十年代大學上過計算機原理這一類課程,應該都有用74LS這類元器件搭乘法器、加法器、控制器的實驗課經歷。

國內真正講設計CPU這類晶元的緣起還是由於禁運引起的,尤其是軍用裝備里的CPU。當時不光是中國,美軍也講究COTS(Commercial Off-The-Shelf ),即儘可能採用成熟的商用貨架產品來滿足軍用裝備需求,最大好處就是節省時間和成本,但最大的問題是商用產品周期短,而軍用裝備周期長,供貨保障是個問題。中國的軍用裝備除了斷貨這個坎兒之外,還可能面臨被禁運。於是需求最先由軍方提起,指定國內一些企業和科研院所仿製當時市場上主流的CPU,以備不時之需,學名叫做反向設計。別小看這個反向設計,它可不是簡單的抄襲,而是將產品晶圓剖開,一層層打磨、照相,然後一個晶體管一個晶體管的進行功能分析、邏輯成圖,再進行可靠性加固、模擬驗證,最後到目標工藝線上的生產。這個過程對設計人員的電路能力、邏輯能力和結構能力都是極大的挑戰和歷練,據說哈軍工(現在叫國防科技大)的CPU和DSP團隊就是從這個過程中摔打出來的,深圳有家公司早期也是專門做反向,有個芯願景據說也是在這個過程中為反向設計做EDA從而成長起來的工具公司。國防科技大曾經反向的一款CPU是Intel x86,管腳級兼容,因為改了工藝、做了加固,性能和可靠性都比商用x86要好。後來據說國內還想反向其他高性能的x86,被國內的正向派給拍死了,說龍芯都出來了,還反向個球,上龍芯不就完了。說實話,十五六年過去了,現在幾家國產CPU的單核性能比PentiumIII也沒強到哪兒去,當年更是沒法看。有朋友可能會說:胡說,龍芯現在都PK酷睿i3、i5了。翻翻十年前龍芯就已經趕英超美的新聞報道,你就能夠深深折服於這種表演,如果你還沒看明白,請參考最近奧迪pk小龍蝦的戲碼。當年反向的晶元都用在了關鍵裝備上,現在正向的晶元卻沒有幾個敢真用的,這是不是有點諷刺?

反向設計是CPU打破禁運實現國產化的一種途徑,但卻不是國產CPU產業發展的可行之路,在軍方用用可以,在商用領域顯然是不能拿出來賣的。所以現在大家講國產CPU都是指正向設計,都是放在產業層面來考慮的。如果只是軍用,仿製和偷制(不拿授權)都是可行的解決方案,就那麼點量,影響不了他的利益,美帝也懶得管你。

正向設計國產CPU始於新世紀之初,2001年8月,龍芯基於MIPS 32用了3個月的時間改了一個Godson1出來(小名「狗剩」),在FPGA上boot了OS,並寫了篇雄文《我們的CPU》(有興趣的可以去網搜看看),點燃了民眾對國產CPU的熱情。幾乎同一時間,被20多個專家鑒定為「國際先進水平」的「方舟一號」也橫空出世,但「方舟」嚴格來講還是嵌入式CPU,而龍芯1號卻是瞄著通用CPU去的(雖然現在的龍芯1號定位為嵌入式解決方案,但當時是準備跟intel對標的)。那時候「方舟」已經是樣片了,龍芯1號只是在FPGA上boot了操作系統,到2002年才流片。所以,我覺得算第一個正向還得是方舟,^_^。

從那時起,國家開始逐步重視國產CPU的發展,從863計劃立了幾個課題來支持。除了龍芯、方舟之外,國內幾家有晶元設計底蘊的單位都得到了課題,北大眾志、國防科技大、上海高性能、中天微等等,當然還有漢芯。與龍芯類似,北大眾志、上海高性能分別在AMD的x86處理器和DEC的Alpha21264處理器的基礎上進行改進設計,很快就拿出了第一代產品,但國防科技大走了一條完全不同的路。可能是因為自己的超算技術路線,國防科技大決定設計兼容IA-64的CPU。但大家都知道IA-64是當時Intel和HP最新開發的指令集,產品是安騰Itanium,號稱最牛B的伺服器CPU。與其他路線不同,這個CPU的設計代碼是無法拿到或買到的,有的只是IA-64指令集架構手冊。所以,實際上國防科技大選擇了一條最難的路,完全從指令集手冊開始正向設計當時世界上最炙手可熱的IA-64處理器。這個項目的結局也頗具悲劇色彩,課題延期兩年才驗收,最終的晶元雖然達到了項目驗收要求的指標,但離真正的商用還有很長的路要走。在這個階段,國防科技大就像一個革命的理想主義者,懷著一腔熱血奔赴最前線。但事實證明,John Hennessy和David Patterson的柱書與算盤書吃得再透,也不如下海真正游兩個來回。據說讓國防科技大踩雷的,不是分支預測、流水線控制、運算器、訪存這些標準件,而是DFT。聽說由於DFT沒做好,這款兼容IA-64的國產CPU花費了很大的精力才定位幾個bug,最終得以用軟體的方法workaround。項目雖然不算成功,但國防科技大在這個過程中卻收穫頗豐。一方面,國防科技大正向設計的團隊已經初具規模,另一方面,在這個過程中一些小的衍生成果也有驚喜。一個課題組設計了自定義指令集的銀河騰越32位嵌入式處理器,一個課題組設計了兼容ARMv7指令集的nnARM處理器,性能跟ARM9差不多,而且把源代碼放到了開源社區供人免費下載。本著八卦到底的精神,據說這個nnARM還引來了ARM法務的律師函,可是國防科技大置之不理,至於為什麼你懂的。腦補一下課題組的表情,應該是:x86、IA-64我都做了,你個ARM沒人要的指令集牛逼啥?

第一階段的這幾家國家支持的團隊裡面還有一個比較牛逼的,那就是上海高性能的申威。除了它的背景牛逼,這裡說他牛逼是指他在第一階段所採取的設計方法很牛逼,而且也帶有比較大的理想主義色彩。雖然它的邏輯設計來自alpha 21264,但他採用的物理設計方法不是拿現成的單元庫來綜合和優化,而是直接跟Foundry合作定製優化的CPU單元庫。這樣做的好處是顯而易見的,能夠提高晶元頻率、優化功耗,2008年申威2在0.13um工藝上就做到了大約1.4GHz,成為國內翹楚,當時國內其他同行還停留在幾百MHz(當然這裡面有流水線等微結構設計的差別,並不代表它們之間的差距。比如,採用比較深的流水線就容易把頻率坐上去,但性能不一定高)。但這樣做的問題也是顯而易見的,這意味著申威必須付出巨大的精力去研究Foundry的工藝參數,然後定製出符合自己需求的標準單元。不管這個工作是Foundry做還是申威做,都意味著研製周期的加長以及雙方利益的捆綁。申威不是IDF,所以Foundry願不願意合作取決於申威能提供多大的量,當時顯然沒什麼量;另一方面,申威的付出是否是值得的?耗費巨大精力定製單元庫大大延長了產品研製周期,而且每換一代工藝就定製一套單元庫對於申威的規模顯然是不現實的。因此,到第三代,申威放棄了定製單元庫的做法,改為直接採用foundry標準單元庫,升級了兩代工藝,晶元頻率卻只提高到1.6GHz。所以,申威早期的做法也帶有些許悲劇的理想主義色彩,方法是對的,但現實是殘酷的。但無論如何,這種物理設計的方法是解決當前工藝落後條件下提升晶元性能的路徑之一,希望還能持續下去。

這幾家後續的發展都是近十年的事,這一波搞自主可控的應該都了解,信息就比較多了,我想八卦點兒網上沒有的(壞笑~~)。龍芯在產業化後迫於知識產權和市場的壓力購買了MIPS的授權和技術(期間還有一段時間是通過購買ST的技術來解決的),但由於核高基項目的失利轉戰中低端市場。雖然技術上略遜一籌,但機制體制靈活一些,在目前幾家通用CPU裡面市場化宣傳做得最好,產業化也領先一步,無奈人才流失的有點多(後面講人才再詳細說)。申威繼續著alpha處理器的研發,而且一直是國家項目的寵兒,但出於多種原因,再也沒有採用第一代的設計方法。申威處理器的架構經過多代的更新,也已經與原始的alpha差別很大,通用CPU已經是16核的1621,工藝28nm,但頻率還是停留在1.8GH左右,同時衍生了桌面和嵌入式的晶元,應用在太湖之光中的HPC專用的申威21060更是為國人長了臉,產品線算是很全了,可惜產業化沒法推,除了生態的原因還有體制內的人無法言說的痛楚。國防科技大在後面幾年雖然成功設計了流處理器FT-64(當年拿下了大陸第一篇ISCA論文,算是超算加速器的先驅或先烈),但只在超算上作為加速器用了一下,並沒有引起太大的波瀾。國防科技大在IA-64上的失利,再加上IA-64本身的日漸頹敗,促使國防科技大轉向SPARC,陸續推出了兩款面向超算的SPARC晶元。不知道是不是屬地偏遠的原因,感覺在拿國家項目上總是差那麼一口氣。方舟的折戟沉沙可以參見梁寧紀念文《一段關於國產晶元和操作系統的往事》。眾志在經歷了核高基產業化項目的失敗後,也已經不再沾惹通用CPU這個領域,轉戰其他應用領域。

無論是CPU的反向設計還是正向設計,只要是全面掌控了其功能設計,都可以滿足自主可控對於安全這個目標的主要訴求——無主觀惡意的後門。當然,安全還有另外一個隱患,也就是設計能力有限引入的無意漏洞,這就跟設計能力息息相關了,君不見Intel玩了一輩子鷹,都被鷹啄了眼(參見2018年初的幽靈和熔斷漏洞),更不用說國內這些才蹣跚學步的了。所以,國產CPU設計要學的還有很多,千萬別太自負了,該交的學費還是要交。

在國產CPU的第一個十年,到處是荒蕪與野蠻,一個失敗接著一個失敗,有激情燃燒的歲月,也有欲說還休的嬌嗔,有明修棧道的剛猛,也有暗度陳倉的齷齪,但毋庸諱言,中國CPU設計的火種埋下了,CPU對於中國人而言不再遙遠,不再只是一個黑盒,不再是霧裡看花,中國開始了奔向星辰大海的征程,更關鍵的是有了自己的一撥人馬。心若在、夢就在,人在,希望就在。

推薦閱讀:

相关文章