個人資料
正文

胡偉武:我們的龍芯3號---致龍芯15周年   

(2016-10-26 02:47:23) 下一個

2016年是紅軍長征勝利80周年,2016年研製成功的龍芯3A3000處理器即以CZ80命名,每顆芯片的矽片上都刻有CZ80字樣。 1936年10月,紅一、二、四方麵軍經過艱苦卓絕的努力,三大主力會師,開創了中國革命的新局麵。它雄辯地表明,隻要堅持理想,實事求是,中國共產黨完全有能力摧堅於正銳、挽瀾於極危,從重大挫折中走出來。 2016年10月,以長征勝利80周年命名為CZ80的龍芯3A3000處理器研製成功。它雄辯地表明,隻要堅持自主研發,進行持續改進,自主研發的CPU性能完全可以超過引進技術的CPU,滿足自主信息化需求。 2016年10月7日,我懷著虔誠的心情走進毛主席紀念堂,向毛主席匯報龍芯3A3000的研製成功。步出毛主席紀念堂,我感慨萬千。當十年前我開始龍芯3號研製時,完全沒有想到龍芯3號係列CPU發展道路之曲折,奮鬥之艱辛,付出之巨大。

2006年9月13日,以長征勝利70周年命名為CZ70的龍芯2E通過科技部組織的驗收,時任科技部部長徐冠華親自參加了龍芯2E的驗收會。龍芯2E的研製是“十五”末國家863計劃緊急安排的一個任務。當時“漢芯”造假事件被曝光,加上“十五”863計劃早期支持的龍芯2C沒有達到合同要求的SPEC CPU2000分值300分的目標,自主處理器研發受到普遍質疑。2005年4月,科技部高新司領導把我叫到辦公室,問我到2005年年底前能不能完成863計劃“十五”初製定的主頻1GHz、SPEC CPU2000分值達到500分的目標。我說剩下不到一年時間,肯定來不及。他說根據有關規定,項目時間到期後三個月內(即2006年3月底前)提出驗收申請就算按時完成。我硬著頭皮接了該任務,因為我知道如果“十五”的任務完不成,那“十一五”國家是不是還支持自主CPU研發就成問題。經過艱苦的努力,龍芯2E在2005年11月底交付流片(把設計好的技術文件交給芯片生產廠家進行生產),2006年3月18日流片成功,達到了技術指標。雖然達到這些指標有些勉強(SPEC CPU2000分值達到500分是計算所的編譯組做了很多編譯優化實現的,但SPEC CPU的測試是允許進行編譯優化的),但畢竟完成了指標。龍芯2E的意義從徐冠華部長參加完驗收會後接受新聞聯播記者采訪時說的一句話可以看出:龍芯2E的成功表明,我國在“十五”期間安排的自主CPU研發是成功的。這也為“十一五”期間國家繼續支持自主CPU研發打下了基礎。

2005年深秋,利用龍芯2E流片後等待芯片回來的時間我帶著部分龍芯課題組的骨幹在香山別墅討論龍芯3號的結構方案。香山別墅和香山飯店一樣在香山公園內,但比香山飯店便宜而且清靜。香山別墅三天討論的成果是基本明確了龍芯3號係列CPU的可伸縮互連結構以及基於目錄的Cache一致性協議。龍芯3號的互連結構中,每個結點四個處理器核通過交叉開關進行全相連,結點間(不論片上還是片間)通過可伸縮的mesh網絡相連;多核的Cache一致性采用基於目錄的一致性協議,目錄設置在片上共享的最後一級Cache(LLC)上。上述結構有別於當時主流的環狀多核互連以及基於偵聽的Cache一致性協議。現在看來,該結構是成功的,目前商用主流處理器隨著核數的增加也越來越多采用可伸縮的互連結構以及基於目錄的Cache一致性協議。

在香山別墅的討論中還明確了龍芯3號片內集成內存控製器以及HyperTransport(簡稱HT)接口。HT是AMD主推的係統總線接口。當時計算所高性能中心與AMD合作緊密,希望我們使用HT接口。此外HT接口比較開放,隻要每年交5000美元就可以用於商業應用,但AMD開放的HT接口不支持多片互連的Cache一致性協議,我們自己進行了擴充。曾經有一段時間,我後悔選擇了HT總線,覺得HT總線不如PCIE總線普及,一是HT總線沒有現成的PHY(片內高速接口模塊)可以買到,每次工藝升級都需要定製HT的PHY,而PCIE的PHY有很多;二是PCIE接口的外圍器件很多,而HT接口的橋片隻有AMD有。但現在覺得選用HT是對的。HT是係統總線,協議簡單高效,相當於Intel的QPI係統總線,而PCIE是IO總線,通過HT總線可以方便地把多片龍芯3號直連起來形成多路服務器。雖然每次工藝升級都要定製HT PHY,但可以使龍芯CPU不依賴別人的IP,自主性強。龍芯3號所有CPU中,沒有一款CPU需要到廠家merge第三方IP。尤其是龍芯3A2000和3A3000,除了廠家提供的標準單元庫、單/雙端口RAM以及低速IO單元,每一行代碼(包括CPU核、內存控製器、HT控製器、互連網絡等)以及每一個定製模塊(包括多端口寄存器堆、鎖相環、HT PHY、DDR2/3 PHY等)都自主設計。至於外圍橋片,龍芯已經開始研製並提供外圍橋片,橋片上支持足夠多的PCIE接口。以後不論AMD是否繼續發展HT接口,龍芯都能自成體係往前走了。

香山別墅會議的另外一個成果是明確了龍芯抗輻照CPU的發展。有一天晚上8點左右,我們正在會議室熱烈地討論龍芯3號的結構,當時在計算所科研處工作的夏洪流和傅信國給我打電話說是要來跟我談一個項目的事。他們到香山別墅已是晚上9點多,我們就坐在香山別墅的走廊盡頭談,他們說科學院有一個抗輻照CPU的預研項目,希望龍芯課題組來承擔。我剛開始不願意做,結果他們好說歹說地讓我勉強答應了,當時的一個理由是領導每年對他們爭取的項目經費有要求,我如果不做這個抗輻照CPU項目,他們的任務就完不成了,我頭腦一熱就答應了。現在龍芯抗輻照CPU已經隨著以北鬥為代表的多顆衛星在天空翱翔,每年還為龍芯公司帶來較可觀的收入,成為龍芯公司的戰略產品並開始走向係列化。真是非常感謝夏洪流和傅信國那天晚上的苦口婆心。

在龍芯3號結構基本確定後就展開了龍芯3號CPU的研發。但當時“十五”863課題結束了,“十一五”“核高基”(即“核心電子器件、高端通用芯片和基礎軟件產品”重大專項)課題遲遲啟動不了。為此,科學院對龍芯3號的研製給了500萬元的前期經費支持(執行期限2007年1月到2007年12月)。科技部高新司馮記春司長得知龍芯3號的第一款芯片龍芯3A1000已經基本完成設計,但缺少流片費時,在863計劃內緊急安排了2000萬的經費支持龍芯3號的研製(執行期限2008年1月到2010年12月)。原計算所所長李國傑院士曾經在計算所中層幹部會上當眾點我的名說,“胡偉武,你不能以任何經費的理由放緩龍芯3號的研製,計算所就是砸鍋賣鐵也要支持龍芯的研發”,並在所內設立了一個經費沒有封頂的課題,到2010年龍芯第一筆“核高基”課題經費到賬時,龍芯課題組已經預支了計算所七、八千萬元經費。

不記得經曆了多少加班加點,龍芯3A1000於2008年底交付流片。隻記得流片前的幾個月每天晚上十點開例會安排工作。晚上十點例會是非常高效的一種工作方法,會後大家把有關設計在EDA服務器上跑起來再回家,第二天早上上班時剛好跑出結果來;如果是早上上班後開始在EDA服務器上跑,基本上大半天就在等待服務器運行出結果中度過。在此後龍芯CPU問題的攻關中,一直沿襲了晚上例會安排工作的方法。 2009年5月20日龍芯3A1000晶圓生產下線,9月28日樣片回來,成功啟動操作係統,主頻800MHz-1GHz。這是龍芯CPU第一次啟動多核操作係統,免不了調一通。印象最深刻的是10月2日晚上熬了個通宵,一起的有王劍等人,剛開始是挨個核跑單核操作係統,把每個核都跑一遍,再把多核操作係統搞穩定,一直到第二天早上才弄完。

中國科學技術大學的陳國良院士曾經在2007年用三百多顆龍芯2F搭建了峰值性能達到1TetaFLOPS的高性能計算機KD50。在龍芯3A1000出來以後又用80顆龍芯3A1000搭建了KD60高性能計算機。在KD60運行LINPACK過程中,總是出現偶發性錯誤。這個錯誤如果單個芯片跑一個月也碰不上一次,隻有像KD60這樣80多片一起跑才會一天碰到一次。有三個多月的時間,我們一直進行各種嚐試,試圖定位該錯誤並明確其機理。現在隻記得2010年春節的大年三十晚上還在跟當時負責軟件的高翔商量進行各種嚐試,縮小搜索範圍。一直到春節後才定位了這個錯誤,錯誤的原因是當訪問Cache失效,從內存回填(Refill)數據時,同時回填一級和二級Cache,通常為了提高性能,這是應該的。但在某種極端情況下出現了錯誤,即二級Cache的回填由於二級Cache忙需要等待,而處理器核得到一級Cache回填數據後繼續運行,該數據被修改後再從一級Cache中替換出來寫回二級Cache,替換回來的新數據寫到二級Cache後,從內存回來的老數據再回填二級Cache把新數據衝掉了,從而引起錯誤。這個問題以及其它的小問題導致龍芯3A1000進行了第一次改版並於2010年5月中旬流片,10月底第一次改版流片成功,然後開始了小批量生產。

龍芯3A1000在2012年又進行了第二次改版。第二次改版主要是雙路直連時在特定訪問序列下導致兩片間的互連網絡死鎖。大致機理是HT協議的虛通道隻有三個,分別是POST、NONPOST、RESPONSE,而龍芯的片上網絡協議AXI有五個實通道,分別是讀請求、寫請求、寫數據、讀響應、寫響應。於是在通過HT傳輸Cache一致性協議時,就將寫請求與寫數據合並一個通道,讀響應與寫響應合並一個通道傳輸。Cache一致性協議要求寫響應不能被堵,而讀響應通道發出的二級Cache給一級Cache的一致性請求有時會因為一級Cache處理不過來而被堵住,這時就會順帶堵死寫響應通道,導致死鎖。當時解決的辦法是在HT原有三個虛通道的基礎上增加了第四個虛通道並且允許寫命令與寫數據之間插入寫響應包。3A1000的第二次改版還解決了HT互連時一個異步握手的問題。3A1000的第二次改版於2012年2月下旬流片,2012年8月中旬流片成功。至此龍芯3A1000就很穩定了,至今還是龍芯銷售的一款重要芯片,尤其是在工控領域。

現在回頭看,龍芯3A1000的研製是成功的。3A1000是我國第一個四核CPU芯片。在3A1000的研製過程中,我們掌握了多核CPU的片內互連及Cache一致性技術,以及片間多路互連技術。直到今日,龍芯仍然是唯一能支持多路服務器的自主CPU。在最近國外CPU企業對中國企業的CPU技術授權中,支持多路服務器的技術受美國政府限製還是不能給中國的。龍芯3A1000的處理器核沿襲了龍芯2E和龍芯2F的處理器核結構,雖然在MIPS64兼容性方麵有較大改進,性能隻進行了局部優化。龍芯3A1000處理器核的性能略高於Pentium III的水平,在2006年龍芯2E剛出來時這個性能還說得過去。龍芯3A1000仍沿用該處理器核有點慢了,但在應用比較固定的很多領域還能用,按理說龍芯的下一款CPU應該致力於處理器核的性能優化,大幅度提高通用處理性能,但在學院派的思想主導下,隨後的龍芯3B走了彎路,使龍芯遭受了挫折。

龍芯3B的研發得到“核高基”重大專項的支持,是在龍芯團隊轉型成立公司(龍芯中科技術有限公司)以及有關部門大力展開自主基礎軟硬件應用試點的背景下展開研製的。2010年把龍芯課題組轉型成立公司是下了很大決心的,當時已認識到不能腳踩兩隻船,辦企業和做研究不一樣,即使嘔心瀝血,也是九死一生,因此一定要專心,要求絕大多數技術骨幹都從計算所辭職。像張戈25歲就已經是副高職稱,是學術上很有前途的苗子,也毅然從計算所辭職。下這麽大決心,與我當時擔任全國人大代表,對中央以企業作為創新主體,科技創新要為經濟社會發展服務的精神非常了解有很大關係。尤其是在“十七大”報告中,傳統的“科教文衛”不再單獨作為一個板塊,科技創新直接在經濟發展的第一部分來描述,對我觸動很大。龍芯公司的成立得到很多領導專家的支持。除了李國傑所長的大力支持外,路甬祥院長專門批示,要求科學院有關部門落實龍芯團隊的股權激勵。原國家外專局局長馬俊如從2006年起就曾多次對我說,龍芯在科學院裏麵已經做得很好了,不能再好了,要想更好,就必須下海辦企業;在成立企業後馬局長又給了我很多指導。工信部的電子司司長丁文武也給了我很多鼓勵。

龍芯3B的研發工作在2008年底龍芯3A交付流片後開始全麵展開。首款龍芯3B1000繼續基於65nm工藝,目標主頻800MHz-1GHz,八核結構,每個核包含兩個256位向量部件,峰值浮點性能達到128GFLOPS,這在當時處於世界領先行列。龍芯3B1000於2010年6月20日左右流片,2010年11月底回來第一批芯片。但第一批芯片回來測試並不順利,連操作係統都啟動不了。很快就找到了原因:由於芯片可測性設計部分的邏輯設計錯誤,在功能模式下誤把內存引腳置為測試狀態,導致芯片訪問不了內存,通過FIB(用離子束改變矽片上的連線)修複後功能正常。 這是一個重大的打擊,龍芯曆史上從來沒有犯過這樣簡單的錯誤,而且在同一時期流片的龍芯1A、龍芯2I等芯片也出現了由於簡單工作失誤引起的錯誤。究其原因,是龍芯團隊在2010年初從課題組管理機製轉向公司管理機製的過程中,原來“作坊式”的設計流程被打破了,“工業化”的設計流程沒有建立起來。在課題組階段,我作為課題組長,每顆芯片從結構設計、邏輯設計、功能驗證、可測性設計、定製設計、物理設計各個環節從頭盯到尾,及時協調各組的配合,關注每一個細節,因此沒有出現管理上的錯誤。而在3B1000的研製過程中,龍芯課題組轉型成立了龍芯公司,我的主要精力轉向公司,芯片研發的總協調人缺位,導致頻頻失誤。痛定思痛,從此我著手芯片研製的質量體係建設,建立了“五步法”(立項、方案、簽核、測試、結項)研製過程,並詳細規定了每個階段的研發和審核內容。在此後龍芯公司進行的幾十次流片中,沒有出現過嚴重的質量問題,而且比我作為課題組長天天盯著效率高很多。 龍芯3B1000首款流片不成功促使我們馬上進行改版,好在隻要改一層金屬,時間和費用上都比較省。3B1000的第一次改版2011年2月初流片,7月初回來,調試比較順利。但在壓力測試時又出現死機現象,經過幾個月的攻關發現又是死鎖問題。大致機理是一個處理器核訪問其它結點的內存時,寫地址和寫數據是分開發出的,結果在另外一個結點的處理器核也過來訪問內存,而且同時有幾十個這樣的互相訪問時,寫地址過去了但寫數據互相堵住,導致死鎖。避免死鎖的辦法是要求寫地址和寫數據保持原子性,即必須一起發出和傳輸。為此龍芯3B1000進行了第二次改版,於2011年12月初流片,2012年4月底回來。從此達到穩定狀態

在掌握65nm工藝的基礎上,我們於2009年11月開始評估32/28nm工藝,並準備把它作為龍芯CPU的下一個工藝結點。2010年12月選定意法半導體與三星合作的32nm工藝並開始八核3B1500的設計。3B1500基於3B1000的設計,主要通過工藝升級提高性能,同時做了局部的性能優化,尤其是在處理器核中增加了私有二級Cache。2012年1月中旬完成3B1500的設計並交付流片。2012年8月底拿到樣片,初步測試正常,頻率從3B1000的900MHz提高到1.25GHz(最高可達1.5GHz)。在經過測試後對該芯片進行了萬片規模的小批量生產。在應用驗證過程中,出現了在很大的應用壓力下個別芯片不穩定現象。剛開始覺得是個體問題,後來出現的次數多了,開始於2013年1月31日組織人員攻關定位問題,查找機理。也是每天晚上召開例會討論,安排各種嚐試,在這個過程中發現了幾個軟硬件磨合的問題並通過軟件調整後,出問題的概率小了很多,但問題如幽靈般還在。直到2013年4月12日,才抓到了該問題。這個問題是從3B1000到3B1500改版過程中引進的,為了提高性能,處理器核收到多個維護Cache一致性的無效請求時,原來每兩拍才能處理一個,改成可以連續處理,導致清除LL/SC同步指令的同步位llbit時錯了一拍,誤把IO DMA引起的Cache無效請求當作0號處理器核的Cache無效請求(IO DMA的編號剛好為0,與0號處理器核區分不開),通過軟件調整可以規避此問題。經過批量測試,原不穩定現象消失。 為了從根本上消除該問題和其它一些小問題,我們對3B1500進行改版。改版時根據生產廠家的建議,工藝從32nm遷移到28nm,於2013年4月底流片,10月底收到樣片,功能正常,但成品率極低,與廠家確認後明確是廠家生產問題。廠家又建議我們恢複到32nm工藝流片,並以某種方式補償此次流片費用,於是又再次改版,於2015年1月底流片,2015年6月下旬收到樣片,測試後功能正常,而且成品率正常,目前已經量產。 龍芯3B的研製過程真是一波三折。出現過龍芯從課題組向公司轉型過程中的管理問題,生產廠家引起的問題,多核互相訪問引起的死鎖問題,處理器核Cache一致性引起的問題。在解決了一個個問題後總算取得了成功。 但龍芯3B的主要問題不在研製過程中,而是剛開始定方向就出了很大偏差。主要問題在於雖然龍芯團隊從課題組轉型成為了公司,但龍芯3B的研發還保持著學院派導向,過度追求多核以及浮點峰值性能的單一指標,通用處理性能不足,滿足不了在“十一五”期間展開的自主CPU應用和試點對性能的要求。 龍芯3B在學術上是成功的,3B1500峰值浮點運算速度達到160GFLOPS,現在拿出來也不丟人,當時在國際上算高的。論文分別被國際頂級會議Hotchips和ISSCC錄用,龍芯3B的報告引起了很大反響,美國IT Times對此專門進行了報道,MIT也發表評論,認為龍芯3B的浮點性能超過了同期的Intel處理器。但3B1500的通用處理能力比3A1000提高得不多,通過每個處理器核增加128KB的私有二級Cache以及主頻及內存頻率的提高,3B1500的單核通用處理性能比3A1000提高了30%-50%,但與國外主流產品的性能差距還很大。 SPEC CPU是一組國際上公認的測試通用處理器性能的測試程序。2006年SPEC CPU2006剛出來時,廠家公布的SUN的blade服務器單核性能為2-4分左右,高端Pentium IV的分值是10來分。2006-2013年是國外主流處理器通用處理性能高速增長期,在主頻不怎麽提高的基礎上,通過微結構優化,廠家公布的SPEC CPU2006單核分值提高到50分左右,平均提高了5倍以上。當然廠家公布的分值都是經過精雕細刻編譯優化(包括使用向量和多核加速)的,一般我們使用gcc編譯出來的單核分值需要把這些廠家自己公布的分值打7折左右,大致是20-40分。2013年以後,國際單核性能的提高趨緩,每代提升5%就不錯,已經到了天花板。SPEC CPU先後發展了1989、1992、1995、2000、2006五個版本,開始時每三年更新一版,後來五、六年更新一版,到2006年後就沒有更新。從中也可以看出,CPU的通用處理性能到2010年前後已經到了天花板,運行SPEC CPU2006的時間就夠長了。

“十一五”期間,多核CPU成為國際學術界的熱點研究方向。因此,學院派思想主導的國內CPU在“十一五”期間都放鬆了單核性能的提高,而是轉做多核,而且核數做得比國外還多。2006年研製成功的龍芯2E的通用處理性能與市場上主流X86處理器差1-2倍(與龍芯2E微結構相同的龍芯3A1000在900MHz時SPEC CPU2006單核分值為定點2.4分,浮點2.3分),但龍芯CPU的單核性能從2006年的龍芯2E到2013年的龍芯3B1500隻提高了50%左右;而在此期間市場主流X86處理器的單核通用處理性能提高了5倍以上。也就是說,“十一五”期間我國CPU通用處理性能被國外大幅度拉開了距離,從相差1-2倍到相差一個數量級。 技術上的差距體現在市場上就是不好用。“十一五”期間,國家有關部門在涉及國家安全的領域開始了自主CPU應用試點,大量的應用往基於自主CPU和操作係統的計算機上移植。在2011-2013年的三年中,以嵌入式計算機為代表的裝備類應用取得了不少成功;而以通用PC和服務器為代表的信息化類應用雖然通過基礎軟硬件的磨合優化取得了較大進展,但由於自主CPU的性能基礎與國外產品有數量級差距,在很多應用中遭遇性能瓶頸。 由於自主CPU的通用處理性能不夠,2013年起,“核高基”基本上放棄了CPU自主研發路線,轉而支持引進國外CPU技術的路線。以IBM、AMD、威盛、ARM為代表的國外/境外CPU趁虛而入,紛紛尋求與國內企業合資或開放技術授權的方式,把原來的產品搖身一變成為自主CPU(操作係統和數據庫也有類似情況)。這使得主要靠國家支持進行研發的龍芯CPU陷入了巨大困境。 雖然當時對“核高基”支持引進CPU不滿,但究其原因,還是我們自己在“十一五”“核高基”支持的龍芯3B上沒有擺脫學院派的慣性,走了彎路,滿足不了當時迫切的自主信息化市場需求。問題還是出在我們自己身上。“十五”期間負責863計劃的科技部高新司領導在龍芯2C沒有達到預期技術指標,龍芯2E立項專家提出19條反對意見的情況下作為非共識項目支持龍芯2E的研發,給了我們一次改進的機會。而這次,機會沒有了,需要我們自己想辦法。

痛定思痛,知恥後勇。2013年5月,龍芯公司結合市場需求對CPU的研發路線進行了認真調整。一是龍芯3號係列多核CPU不追求核的個數而是大幅度提高單核性能,放棄高性能機專用CPU的研製,暫停16核處理器研製,重點把雙核、四核處理器做精做透。二是龍芯2號係列SOC芯片不追求“大而全”的複雜度,而是重視結合用戶需求定義芯片,以及SOC片內互連的通暢性。三是龍芯1號係列結合特定應用,如宇航、石油、流量表等研製專用芯片,專用芯片產業鏈短,容易形成技術優勢並快速形成銷售(如麵向宇航應用的龍芯1E和1F已經為龍芯公司帶來持續穩定的銷售收入)。種瓜得瓜、種豆得豆。從2014年下半年開始,龍芯研發和市場結合的作用開始顯現,2014年龍芯公司銷售收入比2013年增長51%;2015年在2014年基礎上再增長57%,為龍芯公司的可持續發展奠定了良好的基礎。龍芯公司逐漸擺脫國家項目的支持,能夠主要通過市場銷售養活團隊和產品研發。

基於上述對龍芯CPU研發路線的調整,2013年5月,我們暫停了已經完成主要設計的16核龍芯3C處理器流片,開始四核3A2000處理器的研發。核多了沒有用,單核必須要強。就像體育比賽,靠人多取勝的隻有拔河(相當於計算機中的高性能計算機),絕大多數項目要靠運動員個人素質。3A2000主要目標就是大幅度提高單核性能,使單核通用處理器性能提高3倍以上。當時龍芯公司承擔了基於某境內40nm LL工藝的高可靠嵌入式CPU研製項目,雖然工藝性能不高,甚至比我們原來用的65nm GP工藝還慢30%,但至少流片的錢有地方出了,我們就基於該工藝研製3A2000。當時還有一個重要決定就是保持3A2000與3A1000的引腳兼容,這樣龍芯客戶中基於3A1000研製的已有上百種板卡解決方案可以直接通過換焊3A2000來提高性能。基於境內工藝、通過微結構優化大幅提升性能以及與3A1000引腳兼容說明3A2000開始擺脫了學院派慣性,走出結合用戶需求研發CPU的關鍵一步。 2013年初,在龍芯最困難的時候,中科院計算所孫凝暉所長在所裏資金本身就很困難的情況下,拿出500萬元支持龍芯3A2000處理器核GS464E的前期研發。雖然與研製3A2000所需要的上億元經費相比,500萬顯得很少,但在龍芯最困難的時候得到來自龍芯“娘家”計算所的支持,覺得非常溫暖。

事實上2012年初龍芯公司在香山飯店召開年度規劃會時就決定對GS464處理器核(龍芯2F、2H、3A1000、3B1000、3B1500等都基於GS464微結構)進行優化,形成新一代龍芯微結構GS464E。GS464處理器核一直是我自己維護,其中有一半左右代碼(包括流水線控製部分如寄存器重命名、亂序發射隊列、寄存器堆控製、重排序緩存,以及訪存部分如地址運算、一級數據Cache、TLB、訪存失效隊列、最後一級共享Cache)是我自己寫的,2012年上半年我在機房中花了整整兩周時間為GS464升級為GS464E打好必要的基礎(我當時說要把馬的架子變成駱駝的架子,先要把一個訪存部件升級為兩個訪存部件)後,把維護和升級處理器核的任務移交給汪文祥和吳瑞陽。這很可能是我最後一次有機會寫龍芯CPU的代碼了。現在回憶起來,能夠在機房中心無旁騖地寫代碼真是莫大的幸福,有無比的成就感,但我不能讓自己成為龍芯CPU發展的瓶頸。而且經過多年實踐的鍛煉,龍芯的年輕人已經充分地成長起來了。龍芯3A1000、3B1000和3B1500都是我自己當技術負責人,3A2000開始由年輕人擔任芯片的技術負責人,3A2000的技術負責人是王煥東,3A3000的技術負責人是楊梁。承擔國家項目也主要由年輕人作為項目負責人。 GS464E對GS464的改造是全方位的。在指令係統方麵,我們在MIPS64 R3的基礎上進行了擴展(MIPS指令係統的授權允許用戶進行擴展)並形成龍芯指令係統LoongISA,除增加一些基礎指令外,還有支持雲計算的虛擬化擴展,以及加速X86和ARM二進製翻譯的擴展。在微結構方麵,除了前述的把訪存功能部件從一個增加到兩個外,還把Cache行大小從256位增加到512位,最後一級Cache從四路組相聯提高到16路組相聯,增加了多個層次的預取,把重排序緩存ROB從64項增加到128項,重命名寄存器個數從64個增加到128個,亂序發射隊列由原來的定點和浮點各16項增加到定點16項(3A3000增加到32項)、浮點24項(3A3000增加到32項)、訪存32項,重新構建了整個轉移猜測模塊。此外,用大量的測試程序對微結構進行了細節的磨合,局部優化達到三十多處。3A2000的多核互連模塊和內存控製器也進行了性能優化。尤其是內存控製器的優化,可以大幅度提高訪存頻率和效率。2014年7月,RTL代碼凍結。

3A2000除了使用流片廠家提供的標準單元庫、Memory Compiler生成的RAM、低速IO單元以及efuse單元以外,包括鎖相環、HT PHY、DDR2/3 PHY、多端口寄存器堆、CAM、溫度傳感器等宏單元都是我們自己定製的,沒有使用任何第三方的宏單元模塊。因此,全定製工作量也不小。 3A2000的物理設計采取了很多優化措施,初步建立起一套在主流EDA工具基礎上的In-House的流程和工具,包括統一數據庫支撐的設計平台,基於觸發器聚類的定製時鍾設計,深度層次化設計等。這套In-House的流程和工具比純粹依賴EDA工具的單元級設計流程提升性能20%左右。 2014年11月初,3A2000交付流片。這次流片共有龍芯的三款芯片一起拚了個全掩膜。由於流片前的功能驗證非常充分,尤其是在3A2000驗證過程中,王朋宇負責的驗證組完善了龍芯指令級隨機驗證環境,從原來隻覆蓋用戶態指令到覆蓋核心態指令以及例外處理,大大提高了3A2000的功能驗證覆蓋率。物理設計和檢查也精雕細刻,我們對3A2000流片成功很有信心。

經過幾個月的焦急等待,2015年4月10日晚飯後,終於拿到了3A2000的盲封樣片,連夜進行調試,到第二天早上三點多成功運行操作係統。隨後的測試一切順利:在運行了包括SPEC CPU2000、SPEC CPU2006、Unixbench等大型程序後,功能未見異常;主頻可以達到1GHz;SPEC CPU2006單核分值達到6-7分,是3A1000的3倍左右,尤其是以STREAM測試表征的訪存帶寬大幅度從3A1000的不到1GB/s上升到10GB/s,與市場主流處理器基本持平。在基於龍芯3A2000的桌麵終端上進行各種辦公應用,覺得流暢多了。有部分芯片在較高電壓下運行不穩定,當時並沒有引起重視。 2015年5月,經過ATE測試台成測的一批芯片回來測試,發現功能測試結果與ATE測試台測試結果不一致,即部分芯片通過ATE測試後功能還是不正常,這是3A2000完成產品化的嚴重障礙(即通過測試後提供給客戶的芯片中有一部分可能是壞的)。通過調整ATE向量,ATE測試與功能測試的一致性增強,但還有部分芯片不完全一致,總體感覺N管偏快的工藝穩定性明顯增強。為了更好地分析原因,6月初請廠家把第一次流片中6個hold的晶圓調整工藝角開始生產。

經過繼續深入的分析,發現兩個明顯現象:一是N管偏快的芯片穩定性好很多,ATE測試和功能測試比較一致;二是通過改善主板電源穩定性,有利於芯片穩定。雖然機理不是很清楚,但在當時巨大的市場壓力下(采用引進技術的CPU到處攻擊龍芯性能不行,要求有關自主化應用放棄龍芯,使用引進技術的CPU),決定結合已有的現象進行改版流片,一是更換定製的電容更大的DECAP替換廠家提供的DECAP以抑製動態壓降(定製的DECAP電容比廠家提供的DECAP電容提高一個數量級),這會帶來抗ESD能力下降的風險,但我們經過分析覺得風險不大(事後流片回來進行了ESD實驗,抗2000V人體模型沒問題);二是根據負責全定製工作的鍾石強的建議調整了定製寄存器堆的字線和位線配合時序(增加了20ps左右的裕量),因為仿真發現N管偏快有利於定製的寄存器堆字線和位線時序配合,與實驗現象符合。3A2000的第一次改版隻改了6層掩膜板,於9月初完成改版設計並交付流片。 2015年11月初,6個調整工藝角的芯片回來,經過大量的ATE測試和功能測試,確定寄存器堆是部分芯片功能不穩定的主要原因。ATE測試發現不同工藝角芯片的寄存器堆MBIST測試在1.30V到1.50V的不同電壓下出錯,功能測試出錯電壓則比寄存器堆低100-150mV,有較強的一致性,但機理仍不清楚。

2016年1月11日下午下班前,我跟範寶峽、蘇孟豪在討論蘇孟豪通過JTAG通路(這是預留的除了正常的ATE測試外的另外一條測試通路)以Scan Collar方式測試寄存器堆沒有發現錯誤的問題,並了解到楊旭審查版圖發現寫端口的位線的延遲在其它端口寫相反值及讀端口旁路讀時是最差情況,我馬上叫蘇孟豪用最差情況向量通過JTAG端口進行測試,很快就複現了寄存器堆出錯的問題並經過進一步分析搞清楚了寄存器堆寫出錯的機理:在寄存器堆寫端口寫入過程中,要求位線比字線先到,字線與位線之間保持必要的延遲差才能保證寫入的正確性,但在位線負載大時(其它寫端口寫相反值及其它讀端口讀旁路)位線延遲變大,字位線延遲差太小,導致寫寄存器堆出錯。提高電壓會進一步減少字線與位線的延遲差,因此更容易出錯。 真是柳暗花明,困擾我們大半年的3A2000產品化問題終於搞清楚了,尤其是這說明我們在2015年9月份在機理不清楚情況下的改版是正確的。而且這個測試向量提供了一種在已有芯片中把不穩定的芯片篩選掉的辦法,這是龍芯3A2000產品化過程邁出的重大一步。

2016年2月8日是春節,3A2000第一次改版的芯片在2月4日完成封裝,為了在春節前完成3A2000第一次改版芯片測試,孫凱軍專門到封裝廠等待封裝好的芯片,拿到芯片時已經是下午6點多,直飛北京的飛機已經沒了,半夜到上海倒了一次飛機,5日上午到北京,馬上安排測試,確實寄存器堆的問題大大緩解了,穩定性大幅度提高。春節上班後我們又組織攻關解決了一個軟硬件磨合的問題,到2016年2月22日,完成3A2000的初步產品化工作,開始對外銷售芯片(原來一直隻能以樣片方式贈送給客戶試用)。 2016年3月中旬,3A2000進行再次改版,這次改版是全掩膜改版(原來是三個芯片拚了個全掩膜),除了進一步增加寄存器堆字線和位線的延遲差以外,還修改了其它幾個小問題。2016年7月下旬,芯片回來後經測試,原來的定製模塊問題不複存在,芯片功能正常,而且ATE測試與功能測試一致性好。目前3A2000已經進入量產階段,其中經過測試支持通過直連形成多路服務器的芯片成為3B2000。 在隨後的應用推廣中,3A2000與3A1000保持引腳兼容以及軟件兼容體現出巨大優越性,很多客戶直接在原來3A1000的主板上換焊3A2000芯片,隻需通過簡單的BIOS和內核調整,就可以大幅度提升性能。龍芯的整機廠家迅速升級了部分原來基於龍芯3A1000的計算機並進行了應用試點。在2016年6月進行的某辦公應用試點驗收會上,有關部門和專家認為,基於3A2000的計算機使自主化辦公應用從“基本可用/可用”提高到“基本好用/好用”。

龍芯3A3000是在2015年5月臨時安排研製的。2015年5月初,我去常熟跟龍芯夢蘭公司的張福新、吳少剛等人討論3A2000整機解決方案的研發。大家對3A2000大幅度提升性能都很高興,大大增強了信心。同時張福新他們提出,由於我們使用境內的40nm低速工藝,而引進ARM和威盛的CPU都使用境外28nm高速工藝,雖然3A2000在微結構上已經超過了引進的ARM和威盛的CPU,由於主頻偏低,3A2000在綜合性能上還是吃虧(1.0GHz的3A2000處理器核SPEC CPU2006分值為6-7分,而1.6-2.0GHz的ARM和威盛處理器核SPEC CPU2006分值達到8-10分),建議龍芯也盡快使用境外工藝提升頻率。經過認真討論,我們認為如果我們采用Intel的Tick-Tock(嘀嗒)研發策略,應該可以很快推出主頻1.5GHz以上,綜合性能超過2GHz的ARM和威盛的處理器。Tick指的是結構不變,通過工藝優化提升性能;Tock指的是工藝不變,通過結構優化提升性能。Tick-Tock策略可以把兩個芯片流水推進,加快進度的同時降低技術風險。

3A2000主要是通過結構優化提升性能,屬於Tock;3A3000則直接采用3A2000的源代碼,通過工藝優化提升性能,同時繼續保持與3A2000的引腳兼容,屬於Tick。因此,3A3000在功能上沒有什麽風險,主要是工藝移植的風險。當然,3A3000在微結構上還是做了適度增強:一是結合3A2000的性能瓶頸分析把定點/浮點發射隊列從16/24項增加到32/32項,二是把最後一級Cache從4MB提高到8MB。到6月底,完成了RTL源代碼修改,隨後全麵展開物理設計。 3A3000物理設計中繼續需要定製包括HT-PHY、DDR-PHY、鎖相環、多端口寄存器堆、CAM等全定製模塊。由於3A2000中的全定製模塊出過問題,3A3000的全定製模塊檢查特別嚴格。除了加強設計仿真外,還讓原龍芯全定製組的組長楊旭(現在是龍芯中科公司全麵負責生產的副總)重新披掛上陣,進行背靠背的複查。緊趕慢趕,於2016年1月底完成了全定製設計的簽核和複查評審。 3A3000物理設計中另一個難點是時序收斂。3A3000使用的28nm FD SOI工藝晶體管確實比3A2000使用的40nm LL快60%左右,但連線延遲大,而且互相幹擾也大,廢了很多周折。楊梁率領物理組在2016年春節期間也沒有休息,終於在2016年2月中旬交付流片。

2016年6月端午假期期間,龍芯3A3000完成晶圓生產並進行了中測,剛開始比較順利,已經調試完成大部分向量,隻是測試我們自己研製的鎖相環時發現鎖相環輸出時鍾有不穩定現象。6月中旬拿到盲封芯片,測試發現隻有在低於0.8V的低電壓下芯片才能正常工作,經過兩周的分析發現還是寄存器堆的問題,這次是讀出電路的問題,讀電路譯碼時產生了毛刺,把別的字的內容耦合到讀出字內容來了。好在該問題隻需要修改一層掩模版。 2016年9月13日,修改寄存器堆問題的改版芯片回來。這次測試非常順利,很快就運行了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有顯著提高。 2016年10月17日,龍芯3A3000通過了龍芯公司質量體係要求的商業級產品的鑒定檢驗摸底測試(工業級產品鑒定檢驗工作正在同步展開),表明龍芯3A3000可以進入批量生產狀態。目前3A3000已開始小批量生產,其中經過測試支持通過直連形成多路服務器的芯片成為3B3000。

龍芯3A3000運行SPEC CPU2000定點分值1100多分,浮點分值1700多分,運行一遍不到一個半小時(如果使用計算所的編譯器進行優化,定點和浮點分值還分別可以提高15%和30%以上)。回想2002年龍芯1號剛誕生時,運行一遍SPEC CPU2000需要近三天時間,龍芯2C由於SEPC CPU2000分值沒有達到863課題合同要求的300分而沒有完成驗收,龍芯2E費了九牛二虎之力才勉強達到500分,真是“向來枉費推移力,今日中流自在行”。

3A3000研製成功對自主CPU來說具有裏程碑意義。首先,3A3000的通用處理性能已經跨過了國際通用處理器性能的第一個門檻,其單核SPEC CPU2006性能已經不低於ARM用於服務器的高端處理器、Intel的低端係列(淩動係列)處理器以及威盛處理器(這些處理器在1-4核環境下2GHz時單核SPEC CPU2006性能一般在8-10分之間,如果核數更多,由於最後一級Cache巨大,性能會有所提高),而且3A3000的訪存帶寬已經與AMD以及Intel的高端係列(酷睿係列)持平。這樣的性能玩複雜的3D遊戲可能還有差距,但對於以黨政辦公為代表的事務處理應用是足夠了(如果軟件做適當磨合優化,3A2000就夠了)。龍芯3A3000跨過了國際通用處理器性能的第一個門檻後,也為下一步跨越第二個門檻(即達到Intel和AMD主流處理器的性能)打下了堅實的基礎。其次,3A3000的通用處理性能超過了目前靠引進ARM和威盛技術發展的國內同類(四核)CPU。“十一五”開始的自主信息化應用試點發現第一代自主CPU通用處理性能不夠的問題後,國內CPU研製單位均展開了第二代CPU的研發,並衍生出三條不同的技術路線。第一條是以龍芯和申威為代表的“研”的路線,即通過分析第一代產品應用中發現的問題進行自主研發升級。第二條是“攢”的路線,即使用國外的處理器核“攢”SOC,並在此基礎上對處理器核進行局部優化。第三條是“O(ODM)”的路線,即中國人掏錢請外國人幹,目前主要是把國外/境外已有的現成設計直接拿過來換成中國的品牌。由於自主研發路線在“十一五”期間走了彎路,很多人對自主研發路線產生了疑慮,覺得此路不通,因此“核高基”在“十二五”期間主要支持以ARM的處理器核“攢”SOC的路線和“O”威盛的路線為主。一是錢多,二是引進別人的產品省時間,加上龍芯3A2000與境內工藝磨合,在產品化方麵花了較多時間,從2014年年底到2016年年初大約一年半的時間,采用引進技術的CPU大肆攻擊自主CPU性能不行,要求在已有的自主信息化試點中換掉龍芯(而且確實換掉了一些),給龍芯造成很大壓力。

3A3000的通用處理性能超過引進的ARM和威盛技術的CPU,加上前些日子使用申威處理器的“太湖之光”高性能機取得世界第一的好成績,充分說明不論是通用CPU還是高性能機專用CPU,自主研發的道路都是走得通的,不僅安全性好,性能也高。尤其是通過自主研發形成持續改進能力後,未來的後勁更足。可以說,在與引進CPU的技術路線的鬥爭中,龍芯3A3000是抗日戰爭的石牌保衛戰,是解放戰爭的濟南戰役,拉開了自主CPU戰略反攻的序幕。尤其值得指出的是,龍芯3A3000的研製沒有得到任何國家項目的補助,是完全由企業自己掏錢研製的自主通用CPU,也具有裏程碑意義。

根據Tick-Tock策略,我們製定了龍芯3號係列下一步研製計劃。四核龍芯3A4000為Tock,繼續使用目前的28nm工藝,爭取主頻達到2GHz以上,SPEC CPU2006單核分值達到20分以上。3A4000的主要結構優化包括:增加256位的向量指令,增加片內安全機製,以及進一步通過微結構優化提高流水線效率,爭取每GHz的單核SPEC CPU2006分值達到10分(目前3A3000每GHz的單核SPEC CPU2006分值為7分,ARM的高端處理器為5-6分,X86主流處理器為10-15分)。目前3A4000的研製工作已經展開。在3A4000之後將研製Tick階段的新一代處理器,初步考慮使用16nm或14nm的工藝以及3A4000的處理器核研製16核的龍芯3C。經過3A4000的又一輪優化,龍芯的處理器核微結構已經基本到位,是時候把2013年5月暫停的16核龍芯3C重新提上日程了。

十年以來,我們先後研製了龍芯3A1000、3B1000、3B1500、3A2000/3B2000、3A3000/3B3000五款龍芯3號係列芯片,大的流片版本12個,小的流片版本(隻改幾層掩膜板)6個,碰到了各種各樣的問題,經曆了很多坎坷。為什麽龍芯CPU的研製經曆這麽多坎坷呢?除了龍芯的質量流程需要持續改進以外(最近結合3A2000和3A3000的全定製問題正在舉一反三,並完善全定製流程),究其根本原因,是因為我們堅持芯片中的核心模塊自己研製。前麵提到的龍芯3號研製過程中碰到的問題,都是包括CPU、HT控製器、內存控製器、全定製寄存器堆、全定製鎖相環等核心模塊內部的問題,並不是把這些模塊“攢”在一起產生的問題。這些問題,如果購買商業IP(如ARM的CPU,Imagination的GPU等)來“攢”芯片一般不會碰到。自從2001年開始研製CPU以來,我直接或間接負責了近百次流片,流片後碰到的問題除了極個別外,都是核心模塊內部的問題。

長期堅持芯片中的核心IP自己掌握。這些核心IP包括CPU核、內存控製器、DDR2/3/4的PHY、互連網絡、HT控製器、HT PHY等,最近還展開了GPU的研發,隻有少量的外圍IP使用商用IP。不是吃飽了飯沒事幹,而是我們使用別人的IP吃過虧。2003年我們剛開始研製龍芯2號時委托一個很有名的EDA和設計服務公司定製一個3寫6讀寄存器堆,在交付流片後發現其中的電源地嚴重缺失,跟他們交涉時他們說這個不會有問題,導致龍芯2號係列的第一款芯片龍芯2A流片失敗,後來我們自己定製了該寄存器堆才使龍芯2B流片成功。龍芯3A1000剛開始研製時曾經使用過商業DDR2/3 PHY,我們在檢查中發現了一些問題,但廠家覺得沒問題不願意修改,後來3A1000流片時同時流了使用商用DDR2/3 PHY和自主研製DDR2/3 PHY的兩個版本,並在使用自主DDR2/3 PHY的版本流片成功後確定使用自主DDR2/3 PHY的版本進行量產。龍芯3A1000和3B1000曾經使用過商業的內存控製器,但商業的內存控製器滿足不了高性能CPU的帶寬要求(使用商業內存控製器的SOC在雙通道下不可能做出龍芯3A3000 的13GB/s實測帶寬來),因此從3B1500開始自主設計內存控製器。龍芯2H集成了商用的GPU核,該GPU核有 Android操作係統的驅動程序,但我們需要Linux的Xserver驅動,廠家自己開發不了,我們希望廠家把內部配置寄存器如何使用的手冊給我們,我們自己開發,可是廠家說這是商業機密,不願意給,至今龍芯2H隻有在Android上有3D驅動,Linux的Xserver驅動隻有2D的。

一是吃過虧,二是覺得洋鬼子幹得還不如我們,所以就自己幹。在國際上,雖然Nvidia巴心巴肝地幫Intel做配套GPU,Intel還是堅持自己做GPU;雖然Imagination巴心巴肝地幫ARM做配套GPU,ARM也堅持自己做GPU;雖然開源的火狐瀏覽器很不錯,穀歌還是堅持自己做Chrome。蘋果和高通公司都是在ARM的架構授權下自主設計處理器核,其性能遠高於ARM的處理器核。他山之石、可以攻玉。隻有技術上不受製於人,才有產業上的主動權。

做任何事情,依靠別人總是容易一些,完全靠自己則困難得多。但依靠得多了,吃過虧後才明白還得靠自己。毛主席在青年時期也沒有想過要革命,想著改良主義可以救中國,後來才覺得馬克思主義是“山窮水盡諸路皆走不通了”的選擇;建黨後在陳獨秀領導下在湖南搞工人運動,光大的罷工就舉行了十多次,結果是罷工受鎮壓,工人領袖被殺;國共合作期間依靠國民黨的武裝幹革命,結果蔣介石發動“四一二”政變殺共產黨人;好不容易上井岡山建立了自己的軍隊,找到了武裝奪取政權、農村包圍城市的道路,卻被那些在上海租界呆不住跑到井岡山避難的書生們輕鬆地奪了權,不得不進行兩萬五千裏長征;經曆千難萬險與四方麵軍會師了,還差點被貪心不足的張國燾武力扣押。吃了這麽多虧後,毛主席在以後的革命和建設中就牢牢掌握了主動權,包括國共第二次合作時堅持獨立自主的山地遊擊戰,反對共產國際的“一切通過統一戰線”的錯誤主張;重慶談判堅持保留邊區和軍隊;建國後先是抗美援朝,後是中蘇論戰。等等。

在中國的近代史上,我們有三次向外國老師學習的經驗,每次都是受老師欺負吃了虧後走上自力更生的道路。第一次是洋務運動,晚清時期中國海關關長都是英國人擔任的,是中國曆史上最開放的時期,卻被西方列強欺負得水深火熱,毛主席領導共產黨推翻了三座大山,解放了中國人民。第二次是建國後向蘇聯學,一邊倒,結果蘇聯在中國的土地上又想建聯合艦隊,又想建長波電台,毛主席拒絕後蘇聯又撤專家又逼債,毛主席還是領導中國人民自己搞了“兩彈一星”,建立了自主可控的工業體係。第三次是改革開放,我們學習西方的管理理念和科學技術,剛開始覺得挺好的,現在有點覺得吃虧了(像我這樣氣性大的覺得忍無可忍了,很多人覺得還可以再忍忍)。2011年我國IT產業百強企業的利潤總和是蘋果公司的40%(我剛開始覺得華為是通信企業,可能不算在IT百強裏麵,後來查到華為也算在這裏麵時很有挫折感)。總是聽專家說,我國跟美國的經濟互相依賴,美國也不敢把我們怎麽樣,可是當美國製裁中興時,我們不得不認慫,中興公司定期向美國商務部報告工作,以獲得延期製裁。美國可以通過不賣元器件在三個月之內把國人引以為豪的華為、聯想、中興等企業搞死,十大軍工集團有大半開不了張,我們有哪種產品不賣給美國企業,會把美國的Intel、IBM、穀歌、微軟、蘋果搞死呢,我們頂多能把沃爾瑪搞得比較難受。現在想想,毛主席周總理帶著全國人民勒緊褲腰帶煉鋼鐵、打油井、發展兩彈一星,建立起自主可控的工業體係真是無比英明。

正如改革開放進入深水區,容易改的都改完了,剩下都是難改的;創新也進入深水區,容易創新的都創完了,剩下難創新的,需要十年磨一劍的積累。我們的IT產業先學會了用國外的芯片在主板上“攢”係統,後來又學會了用國外的IP在矽上“攢”係統。掌握這些簡單技術後,下麵該深入到CPU、GPU這些複雜的核心模塊中去了。這些複雜的創新不是領導重視、錢多、人多就能一下子幹出來的,還需要時間來磨,在探索和試錯過程中不斷演進。領導重視、人多、錢多可以加速探索和試錯的過程,但不能消除這個過程。中國航天建空間站,先來個天宮一號試試看,再來個天空二號(還分兩期)接著試,最後再發射正式空間站,也是這個演進的道理,不是缺錢,也不是領導不重視。CPU是超複雜係統,超複雜係統隻能走進化論的道路,在產業化實踐中通過長期演進發展起來。即使在這個過程中,得到別人的源代碼,也隻能加速自主研發的進度,取代不了自主研發的工作。更何況複雜係統是很難消化吸收的,即使拿到國外CPU的源代碼,每一行都看得明白,但把幾百萬行代碼拚在一起就不知道是幹什麽的,就像我們可以打開一頭豬的大腦看得清清楚楚,但不知道豬在想什麽。很多人現在還寄希望於引進國外技術發展我國的CPU,那是因為吃洋鬼子的虧沒吃夠。須知天上是不會掉餡餅的,要發展以自主CPU和操作係統為代表的基礎軟硬件,我們必須克服急躁情緒,克服崇洋情緒,發揚愚公移山精神,堅持實事求是作風,在自主創新實踐中不斷發現問題,在解決問題過程中不斷提高能力,才能保障國家安全和支撐產業發展。

龍芯今年15歲了。中國共產黨在15歲的時候完成了舉世矚目的萬裏長征,建立了陝北根據地,取得了生存的基礎,但共產黨長征的目的決不僅僅是建立一塊根據地活下來,而是以此為基礎解放全中國。龍芯在15歲的時候完成了3A3000的研發,跨越了國際上通用CPU的第一個性能門檻,性能超過了引進設計的CPU,龍芯公司實現盈利,取得了生存的基礎,但龍芯的目標絕不是為了生存和掙錢,而是為了建立自主可控的信息產業體係。目前我國的信息產業主要建立在以Wintel體係(Intel的CPU和微軟的Windows操作係統)和AA體係(ARM的CPU和穀歌的Android操作係統)為代表的國外基礎軟硬件平台上。要改變我國信息產業和信息安全受製於人的局麵,不能隻著眼於單項技術的突破和產品市場占有率的提高,必須建立起自主可控的信息技術與產業生態體係,形成與Wintel體係和AA體係“三足鼎立”的局麵,才能掌握產業發展主導權,消除安全隱患。如果我們沒有建立起自主可控的IT產業體係,繼續在已有的Wintel體係和AA體係中當“馬仔”,是難以實現中華民族的偉大複興的“中國夢”的。反之,隻要我們堅持自主創新,打通技術鏈,完全可以在局部指標不如國外產品的情況下,建設出優於國外產品的應用係統。須知判斷技術是否先進的標準,不是看其跟美國人跟得緊不緊,而是看其跟應用結合得緊不緊。

古人說“事非經過不知難”。但隻要認真去做,也有“事非經過不知易”的道理。龍芯3號係列CPU通用處理性能在從2013年起的不到四年時間提高到了原來的五倍以上,充分說明了這個道理。2001年我們開始研製龍芯CPU的時候,很少人相信我們能夠做出來,在整個“十五”期間,網絡上“龍芯打假”的言論層出不窮,但我們堅持做出來了,方法是在別人都不信的情況下,做給他看。2006年我們開始推廣龍芯CPU應用的時候,也很少有人相信龍芯能用起來,不知受了多少奚落和冷嘲熱諷,甚至有人說,如果龍芯能夠賣得出去,他就從此倒立著走,但龍芯公司現在能夠通過龍芯CPU的銷售養活自己了,方法還是在別人都不信的情況下,做給他看。今天我們說要建立自主可控的信息產業體係,還是多數人不信,無非是認為做生態太難,自己肯定做不好,不如跟著別的老大當個馬仔,所以總說與X86和ARM兼容生態好,總之是一種畏難情緒。對付信心不足,我們還是老套路,做給他看。世界上做CPU的企業中,凡是不做生態(DEC、IBM、HP、SUN、SGI)或者跟生態(AMD、威盛)的CPU企業都活不好。八十年前幾萬衣不蔽體的紅軍剛到陝北時有誰相信這幫泥腿子能解放全中國?改革開放初期以能買到日本彩電為榮的中國人有幾個相信今天中國的製造業產值已超過美國加日本的總和?在建立自主信息產業體係方麵,我們要在自己內部肅清一切軟弱無能的思想,就像毛主席說的:“我們的同誌,在困難的時候,要看到成績,要看到光明,要提高我們的勇氣”。

八十年前,當衣不蔽體的幾萬紅軍完成兩萬五千裏長征時,他們是中國最生氣勃勃,具有百折不撓的獻身精神,真正的民族精英。他們是懷著對革命的堅定信念,在崇高理想的指導下走完長征的。同樣,自從2001年開始龍芯處理器研發以來,龍芯人也是懷著堅持自主創新、保障國家安全、支撐產業發展的堅定信念走了一條別人沒有走過、多數人不信能走通、非常艱難的“長征”。十五年來,很多龍芯的技術骨幹都把人生最美好的青春獻給了龍芯的“長征”。加班加點仍是龍芯研發人員的常態,而龍芯的薪酬長期低於同行業水平,有些人三十多歲就出現了各種健康問題。不少龍芯的技術骨幹都接到過獵頭公司百萬年薪的電話,但龍芯團隊的核心骨幹非常穩定。為了龍芯的產業化,很多技術骨幹都毅然放棄中科院的事業編製,辭職到龍芯公司。人都是有私心的,但我敢保證龍芯人的私心相對少一些;大家離毛主席要求的“一個高尚的人,一個純粹的人,一個有道德的人,一個脫離了低級趣味的人,一個有益於人民的人”都有差距,但我敢自豪地說龍芯人的差距相對小一些。後之視今,尤今之視昔。我相信,我們的後人會像我們今天崇敬長征的英雄、崇敬抗美援朝的英雄、崇敬兩彈一星的英雄一樣,來崇敬今天在建立我國自主可控的信息產業體係道路上曆經艱難險阻完成新長征的我們。

龍芯十五年的堅持來自中國科學院的光榮傳承。中科院計算所是我國計算機事業的搖籃,經曆了“完全自主但沒有市場化”的第一個三十年,為兩彈一星做計算機;也經曆了“完全市場化但喪失自主性”的第二個三十年,創辦了聯想和曙光,為了與市場接軌,研發工作忍痛從CPU和操作係統中退出。我們是中國第三代計算機人,任務是在市場化條件下實現自主性,保障國家安全和支撐產業發展。我的導師夏培肅院士是我國計算機事業的重要奠基人,她多次對我說過,這輩子最大的心願就是把中國的計算機事業搞好,她們這代人沒搞好,希望我們搞得比她們好。李國傑院士曾經在一次自主可控行業的大會上動情地說:我的導師夏老師(李國傑院士也是夏培肅院士的學生)已經九十歲了,幹不動了;我也七十歲了,快幹不動了;如果到胡偉武這一代我國的CPU和操作係統還沒有發展起來,中國的IT產業就沒戲了。龍芯團隊有一個老研究員黃令儀老師,今年八十歲了還天天在屏幕前拖著鼠標查版圖。有一次我請黃老師參加某用於安全領域的芯片研發工作時,黃老師脫口而出:胡老師,我這輩子最大的心願就是匍匐在地,擦幹祖國身上的恥辱;我是親眼見過我的同胞被日本鬼子的飛機炸死的。前輩的精神感染了我們,前輩的榮光照亮了我們前進的道路,讓我們咬著牙關,勇往直前!

龍芯十五歲了。2001年8月19日清晨當屏幕上第一次出現“godson login”時的那聲歡呼已經遠去,在雨中登黃山的台階上高唱《真心英雄》時的那種豪情已經消退,夜深人靜時在計算所北樓長長的走廊盡頭泡方便麵記憶已經模糊,但龍芯人“為人民做龍芯”的初心未改,“十年磨一劍”的執著依舊,“人生能有幾回搏”的奮鬥長在。我們已經走在“以安全可控為主題、以產業發展為主線、以生態建設為目標”的新長征道路上。迷失方向時,堅持從國家和人民的角度(而不是自己的角度)做出選擇就是我們心中的“北鬥星”。長征的道路蜿蜒曲折,不僅有芳草鮮美、落英繽紛,更有沼澤沙漠、雪山草地、豺狼虎豹,因此前進的路上就要苦我們的心智、痛我們的體膚。龍芯走自主研發道路,比直接引進處理器芯片或者引進處理器核的道路見效慢一些,在路上會被別人暫時超過心裏著急;走市場化道路,要結合客戶需求把短板補齊,比起在計算所做研究時隻關注幾個有顯示度的指標來,在顯示度方麵差一些;要建立自主軟硬件體係,比隻在單一領域做單一產品難度大很多。這就要求我們在前進的道路上不僅要有衝天的豪情,艱苦奮鬥、奮勇爭先,而且要有鋼鐵般的意誌,做到專心致誌、持之以恒、精益求精,直至取得最後的勝利。我們是“苦命”而光榮的龍芯人,雖千萬人吾往矣。

"我們正在前進。我們正在做我們的前人從來沒有做過的極其光榮偉大的事業。我們的目的一定要達到。我們的目的一定能夠達到。"

[ 打印 ]
閱讀 ()評論 (0)
評論
目前還沒有任何評論
登錄後才可評論.