第一部分:龍芯在艱難困苦中茁壯成長
龍芯課題組成立于2001年,在課題組成立之初,龍芯只有十來個人和一間不到40平方米的辦公室。在人員方面,是中科院計算所唐志敏研究員、胡偉武研究員,和客座研究員張志敏等幾人帶著研究生在做,有很強的學術研究性質,大家也是邊做邊學邊研究,積累經驗,磨礪技術,培養人才帶隊伍。
由于在資金和人力上都非常匱乏,想要把CPU做出來,那就只能拿命去拼。龍芯課題組成員每周工作六天,每天加班到凌晨,以辦公室為家。不少技術骨干全年無休,甚至連春節都是守在單位做CPU。以龍芯首席科學家胡偉武為例,由于常年加班加點,以至于女兒說:“你就知道做你的破CPU不要我們了”,胡偉武的夫人為了支持丈夫,甚至還辭去了工作照顧家庭。
經過1年多的時間,辛勤的努力終于獲得了回報,龍芯課題組成功研發出了龍芯1號。由于龍芯1號的成功,龍芯也獲得了越來越多的國家資金支持,從2003年至2006年先后研發成功龍芯2B、龍芯2C、龍芯2E等數款芯片,龍芯課題組的人數也從當初的十幾人擴充到八十余人。就性能來說,龍芯2E達到了同時期美國Intel公司CPU百分之50的水平,雖然和美國的CPU依然有差距,但已經能夠滿足很多應用場景了。
正是因為龍芯2號在性能上已經具備了一定市場競爭力,意法半導體花3000萬買下龍芯5年的生產代工權,每生產一片給龍芯專利費。開創了中國在高端IT核心技術領域對外授權的先例。2006年成功流片的龍芯2E為龍芯課題組賺來第一桶金,這筆錢比當年國家給的研究經費還要多。
2007年,龍芯2F成功流片,這是龍芯第一款產品芯片,銷量達數十萬片。在龍芯2E和龍芯2F相繼取得成功之后,龍芯課題組啟動了龍芯3號的研發。正是依靠國家政策扶持,計算所的鼎力支持和龍芯團隊的“拼命三郎”精神,龍芯先后開發了3代CPU內核,近10款CPU,積累了CPU設計經驗,并且磨練出了一只能打惡戰,打硬戰的隊伍。
第二部分:龍芯產業化道路異常艱辛
過去幾十年,國外壟斷集團在中國不掌握技術時就封鎖技術,在中國剛剛取得一定技術突破之后就通過合資換技術合作的方式阻止自主技術發展。這方面,最典型的例子就是運10,被麥道公司的合資陷阱肢解,中國的民用航空產業和民用汽車都被國外公司借助合資陷阱扼殺。
隨著以龍芯為代表的自主技術進步,西方科技公司故技重施,一改過去嚴密技術封鎖的策略,轉而拋出橄欖枝,到中國大陸開始合資公司,或開展技術合作扶持代理人。雖然境外科技公司轉讓的都是在國際市場上缺乏競爭力的二流技術,而且境外公司基于“教會徒弟餓死師傅”的心理,技術轉讓或多或少都有一定保留,但經過精心包裝之后,具有非常強的迷惑性。加上國內有一批專家學者和產業界大佬對于中國做自主CPU一直持否定態度,這些因素共同導致國家政策扶持也從支持自主研發,變成了扶持技術引進CPU。
龍芯課題組過去一直是研究團隊,低估了CPU商品化、產業化的難度,導致起初的產業化道路并不順利。
首先,工業界產品需要的通用處理性能和穩定性,看重的是CPU的“短板”。但學院派搞研究擅長做“長板”,龍芯3B1000和3B1500保持著學院派導向,追求多核以及浮點峰值性能的單一指標,導致通用處理性能不足。雖然龍芯3B1500峰值浮點運算速度達到160GFLOPS,論文分別被國際頂級會議Hotchips和ISSCC錄用,美國麻省理工學院也發表評論,認為龍芯3B的浮點性能超過了同期的Intel處理器。但龍芯3B1500通用性能在產業化方面的表現不盡如人意。
其次,龍芯CPU產品市場化運作受限學院派體制。龍芯團隊技術骨干大多都是計算所的研究員或高級工程師,研究人員更加傾向于做開創性研究,龍芯做產品是要補齊短板,產品完善是非常枯燥乏味的,和研究人員做科研完全不同。
最后,軟件生態和產業聯盟成為龍芯產業化的最大障礙。美國Intel公司的CPU能夠壟斷市場,一方面是因為Intel CPU性能卓越的因素,另一方面也是因為Intel構建起了軟件生態和產業聯盟。具體來說,Intel公司只需要研發CPU,操作系統由微軟開發,主板由華碩、微星等臺系廠商完成,戴爾、惠普、聯想等公司做整機,甲骨文等一批廠商做數據庫、中間件,眾多軟件廠商做應用軟件。正是軟件生態和產業聯盟使Intel公司在個人電腦和服務器CPU領域稱霸全球。而龍芯在這方面,幾乎是一片空白,這使龍芯的產業化之路異常艱辛。
第三部分:破釜沉舟,明確方向,提升技術水平
面對困難,龍芯并沒有氣餒,而是迎難直上,見招拆招。
針對辦企業和做研究不一樣的問題,龍芯的解決之策是要求絕大多數技術骨干都從計算所辭職,像張戈25歲就已經是副高職稱,是學術上很有前途的苗子,也毅然從計算所辭職,大家必須嘔心瀝血,破釜沉舟做芯片。
在理順了體制機制問題之后,龍芯調整了研發導向,徹底從做研究轉變到做產品上:
一是龍芯1號系列結合特定應用,如石油、流量表等研制專用芯片,因為專用芯片產業鏈短,容易形成技術優勢并快速形成銷售。
二是龍芯2號系列SOC芯片不追求“大而全”的復雜度,而是重視結合用戶需求定義芯片,以及SOC片內互連的通暢性。
三是龍芯3號系列多核CPU不追求CPU核的個數,或某項特定性能,而是大幅度提高單核性能。放棄高性能機專用CPU的研制,暫停16核處理器研制,重點把雙核、四核處理器做精做透。
在2012年年底,龍芯開啟了3A2000 的研究,放棄了過去過于看重某項指標的做法,轉而專注于提升單核性能。
這里專門說明一下單核性能的重要意義。由于在桌面環境,程序大多是串行的,這直接導致如果單核性能上不去,堆核心數毫無意義,即便做出了八核CPU,往往會導致“一核有難,七核圍觀”的情況。
AMD的CPU過去幾年一直被壓著打,就是因為單核性能明顯遜色于Intel。在銳龍CPU和新內核Zen問世之后,之所以AMD的市場份額有所回升,也是因為單核性能上縮小了和Intel的差距。
提高處理器單核性能,提高主頻和優化芯片微結構不可偏廢,只把主頻做高,而忽視芯片微結構設計是會出大問題的,這方面最典型的案例就是Intel的奔騰4處理器,雖然擁有很高的主頻,但在微結構設計上存在很大不足,因而獲得“高頻低能”處理器的稱號。
而要提升主頻,一方面可以通過物理設計優化實現,另一方面可以通過采用更好的制造工藝提升晶體管集成度來實現。
而優化芯片微結構設計,實現CPU性能的飛躍,就非常考驗一個CPU設計團隊的功底了。微結構也就是CPU的內核,現在大家經常聽到的四核、八核CPU,就是把四個、八個CPU的內核集成到一片硅片上。
處理器的核心技術在于:cache一致性協議,存儲一致性模型,可擴展性結構,多核的片上互連結構,多路的互連結構,訪存的通路,IO的互連結構等等。
從處理器核的設計角度,多端口的訪存,低延遲高帶寬的cache,高精度的分支預測器,高效率的預取機制,用于挖掘指令級并行性的大框架,用于挖掘數據級并行性的高寬度simd,用于挖掘線程級并行性的多線程機制,處理器低功耗技術,以及各種處理器設計涉及到的電路技術和工藝磨合等技術都是非常關鍵的。而這些技術細節則是龍芯攻關的重點方向。
第四部分:龍芯長期堅持芯片中的核心技術自己掌握
在“十一五”期間,多核CPU成為國際學術界的熱點研究方向。學院派思想主導的國內CPU在“十一五”期間都放松了單核性能的提高,而是轉做多核,而且核數做得比國外還多。這直接導致龍芯的單核通用性能提升只有50%。
相比之下,在此期間市場主流X86處理器的單核通用處理性能提高了5倍以上。也就是說,“十一五”期間我國CPU通用處理性能被國外大幅度拉開。
而要彌補這種差距,就必須重視單核通用性能,設計新一代CPU核。此前,龍芯2F、2H、3A1000、3B1000、3B1500等都基于GS464微結構。而龍芯3A2000則采用了新一代內核GS464E。
不過,自主研發之路頗為艱難,龍芯GS464E讓龍芯技術團隊又愛又恨。
GS464E雖然只比GS464多了一個字母E,但對GS464的改造是全方位的。
在指令系統方面,龍芯CPU在MIPS指令集上進行擴充,增加了MIPS中不具備但X86和ARM具備的對二進制翻譯影響很大的核心功能,形成了龍芯指令系統LoongISA。
在微結構方面,除了把訪存功能部件從一個增加到兩個外,還把Cache行大小從256位增加到512位,最后一級Cache從四路組相聯提高到16路組相聯,增加了多個層次的預取,把重排序緩存ROB從64項增加到128項,重命名寄存器個數從64個增加到128個,亂序發射隊列由原來的定點和浮點各16項增加到定點16項、浮點24項、訪存32項,重新構建了整個轉移猜測模塊等等。
此外,龍芯還用大量的測試程序對微結構進行了細節的磨合,局部優化達到三十多處。龍芯3A2000的多核互連模塊和內存控制器也進行了性能優化。尤其是內存控制器的優化,可以大幅度提高訪存頻率和效率。
龍芯3A2000的物理設計采取了很多優化措施,初步建立起一套在主流EDA工具基礎上的In-House的流程和工具,包括統一數據庫支撐的設計平臺,基于觸發器聚類的定制時鐘設計,深度層次化設計等。這套In-House的流程和工具比純粹依賴EDA工具的單元級設計流程提升性能20%左右。
2014年11月初,3A2000交付流片。2015年4月10日,龍芯終于拿到了3A2000的盲封樣片,連夜進行調試,到第二天早上三點多成功運行操作系統。隨后的測試一切順利:在運行了包括SPEC CPU2000、SPEC CPU2006、Unixbench等大型程序后,功能未見異常;主頻可以達到1GHz;SPEC CPU2006單核分值達到6-7分,是3A1000的3倍左右,尤其是以STREAM測試表征的訪存帶寬大幅度從3A1000的不到1GB/s上升到10GB/s,與市場主流處理器基本持平。在基于龍芯3A2000的桌面終端上進行各種辦公應用,覺得流暢了許多。
不過,最早批次的3A2000有部分芯片在較高電壓下運行不穩定,之后經過了測試,發現部分芯片通過ATE測試后功能還是不正常。為了解決這個問題,龍芯耗費1年多時間進行排查,終于解決在2016年初解決了問題。2016年7月,最終版的3A2000完成流片,芯片回來后經測試,原來的定制模塊問題不復存在,芯片功能正常,而且ATE測試與功能測試一致性好。
龍芯3A2000最大的特點就是高度自主化——除了使用流片廠家提供的標準單元庫、Memory Compiler生成的RAM、低速IO單元以及efuse單元以外,包括鎖相環、HT PHY、DDR2/3 PHY、多端口寄存器堆、CAM、溫度傳感器等宏單元都是龍芯自己定制的,沒有使用任何第三方的宏單元模塊。
為何龍芯長期堅持芯片中的核心技術自己掌握呢?
不是吃飽了飯沒事干,而是龍芯使用別人的IP吃過虧。
2003年龍芯剛開始研制龍芯2號時委托一個很有名的EDA和設計服務公司定制一個3寫6讀寄存器堆,在交付流片后發現其中的電源地嚴重缺失,跟他們交涉時他們說這個不會有問題,導致龍芯2號系列的第一款芯片龍芯2A流片失敗,后來龍芯自己定制了該寄存器堆才使龍芯2B流片成功。龍芯3A1000剛開始研制時曾經使用過商業DDR2/3 PHY,龍芯團隊在檢查中發現了很多問題,但廠家覺得沒有問題不愿意修改,后來下決心自己做,從3B1500開始自主設計內存控制器。
正是因為吃過虧,加上龍芯覺得洋鬼子干得還不如自己干得好,所以就自己干。
從實踐上看,雖然nVidia幫Intel做配套GPU,Intel還是堅持自己做GPU;雖然Imagination幫ARM做配套GPU,ARM也堅持自己做GPU;雖然開源的火狐瀏覽器很不錯,谷歌還是堅持自己做Chrome。他山之石、可以攻玉。只有技術上不受制于人,才有產業上的主動權。
從實踐上看,龍芯GS464E內核設計非常成功,就性能來說,已經優于同時期從境外廠商引進的X86和ARM CPU核。雖然龍芯GS464E內核在性能上超越了技術引進的CPU核,但由于技術引進的X86和ARM CPU基本采用了臺積電28nm工藝,優于龍芯采用的中芯國際40nm工藝,因而在主頻上明顯處于優勢。
為了在技術上超越技術引進CPU,龍芯基于GS464E內核開發了龍芯3A3000。3A3000主要通過工藝優化提升性能,對龍芯3A2000的CPU核略作修改:
一是結合3A2000的性能瓶頸分析把定點/浮點發射隊列從16/24項增加到32/32項;
二是把最后一級Cache從4MB提高到8MB。
因此,CPU內核設計的工作量較小,很快就完成了RTL源代碼修改,全面展開物理設計階段。
3A3000物理設計中繼續需要定制包括HT-PHY、DDR-PHY、鎖相環、多端口寄存器堆、CAM等全定制模塊。
3A3000物理設計中另一個難點是時序收斂。3A3000使用的28nm FD SOI工藝晶體管確實比3A2000使用的40nm LL快60%左右,但連線延遲大,而且互相干擾也大,廢了很多周折。由楊梁率領物理組在2016年春節期間也沒有休息,終于在2016年2月中旬交付流片。
2016年9月,龍芯3A3000成功流片,很快就運行了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有顯著提高。
3A3000研制成功對自主CPU來說具有里程碑意義。3A3000的通用處理性能已經跨過了國際通用處理器性能的第一個門檻,其單核SPEC CPU2006性能已經不低于ARM用于服務器的高端處理器、Intel的低端系列(凌動系列)處理器以及威盛處理器,而且3A3000的訪存帶寬已經與AMD以及Intel的高端酷睿系列持平。這樣的性能玩復雜的3D游戲可能還有差距,但對于辦公場景應用是足夠了。
第五部分:產業報國,未來可期
在2016年,使用申威處理器的“神威太湖之光”高性能機取得世界第一的好成績,充分說明不論是通用CPU還是高性能機專用CPU,自主研發的道路都是走得通的,不僅安全性好,性能也高。尤其是通過自主研發形成持續改進能力后,未來的后勁更足。
2019年4月,龍芯3A4000樣片流片成功,同年12月正式發布。同時還搭配龍芯自研的7A系列橋片,提高整機的自研水平。龍芯3A4000/3B4000一如既往地強調“完全的”自主研發。芯片中的所有功能模塊均自主設計,所有電路設計源代碼均為龍芯團隊從零開始自已編寫。同樣的,整個芯片的電路版圖均為龍芯團隊自主設計。
龍芯設計團隊嚴格遵循“實際應用需求牽引CPU發展”原則,未來方向是在龍芯3A4000/3B4000基礎上繼續提升處理器主頻、提升內存控制器頻率、降低功耗、提高核數。
目前,正在研發中的龍芯3A5000將通過12nm工藝改進提高主頻,單核性能達到25-30分。龍芯通過20年積累完成CPU性能“補課”。龍芯3A5000與龍芯3A4000在引腳上兼容,實現在同一主板上“原位替換升級”。
同時,定位于服務器CPU的龍芯3C5000主要是增加核數,采用12nm工藝,每芯片包含16核,支持4至16路服務器,具備高端服務器的商業競爭力。
就發展路線來說,龍芯走“市場帶技術” 的道路,堅持自主研發掌握CPU的核心技術。隨著龍芯CPU性能的不斷提升,越來也多的企業也開始加入龍芯產業鏈中。目前,已有數千家企業,數十萬名研發人員加入了龍芯產業鏈,基于龍芯開發產品。
除了與國內企業通力合作之外,龍芯也在自力更生建設軟件生態,像幾個重要的API,以及MIPS的JAVA虛擬機、GS引擎等都是龍芯貢獻的,而且龍芯還是實際的維護者,像MIPS的GCC編譯器、Linux內核等,龍芯也貢獻了大量的代碼。
可以說,龍芯的道路之所以這么難,是因為龍芯選擇了建設中國版Wintel這條最為崎嶇的道路。這條道路需要龍芯自己設計CPU,自己建設軟件生態,自己構建產業鏈,技術門檻搞,資金門檻搞,工作量巨大。雖然這條道路異常坎坷,實現的難度極大,但一旦做成了,無論對于國家信息安全,還是產業的可持續發展,意義都非常巨大。
相關文章
「 支持烏有之鄉!」
您的打賞將用于網站日常運行與維護。
幫助我們辦好網站,宣傳紅色文化!
歡迎掃描下方二維碼,訂閱烏有之鄉網刊微信公眾號
