一、LoongArch發布
去年8月,在“2020年CCF全國計算機體系結構學術年會”在線會議報告中,龍芯中科的胡偉武老師講解了龍芯自主設計的CPU指令集——LoongArch,許多業內人士和國產CPU愛好者都非常關注。
2021年4月15日,經過大半年的等待,在山西太原舉辦的“2021年信息技術應用創新論壇”主論壇上,這款備受期待的CPU指令集終于正式發布。
從2020年二季度開始,龍芯與國內第三方知名知識產權評估機構投入上百人月,將LoongArch與ALPHA、ARM、MIPS、POWER、RISC-V、X86等國際上主要指令系統有關資料和幾萬件專利進行了深入的對比分析。針對被評估的基礎架構版本,評估機構確認了三個問題:
LoongArch在指令系統設計、指令格式、指令編碼、尋址模式等方面進行了自主設計。
LoongArch指令系統手冊在章節結構、指令說明結構和指令內容表達方面與上述國際上主要指令系統存在明顯區別。
LoongArch基礎架構未發現對上述國際上主要指令系統中國專利的侵權風險。
二、為什么要設計全新的指令集
CPU指令集也叫“架構”,它介于軟件與CPU邏輯電路之間,是對CPU功能及調用方法的精確描述,設計基于某種指令集的CPU 就是設計邏輯電路去實現指令集規范中描述的功能,CPU的邏輯電路名叫“微架構”。編寫匯編程序以及編譯高級語言源代碼,產生的是面向某種指令集規范的二進制操作碼,每條操作碼對應指令集中的一條指令。因此系統及應用軟件針對不同指令集的版本,就只能在相同指令集的CPU上才能運行。Java/.net和腳本程序雖然不限定指令集,但它們依賴的Java/.net虛擬機和腳本解釋器,也仍然是以二進制程序的方式存在,不同指令集的CPU就需要不同版本的二進制程序。操作系統和應用軟件以及各種硬件的驅動程序都與指令集深度捆綁,圍繞各種指令集構成相互依存的生態關系。雖然軟件可能會有多個版本去兼容不同指令集,但每種指令集的生態都各自獨立。X86和Windows、ARM和Android借助生態鏈中所有企業的合力,分別成就了桌面計算機和移動設備領域的霸主地位,掌控這兩種指令集的Intel和ARM也因此在生態中具有無上的權力,對依賴其生態的任何企業,都能夠一言決興衰、二言定存亡。
國內大多數CPU企業,為了追逐短暫的市場優勢,而去依附現成的主流生態,無論是購買流行指令集的授權還是購買成熟的IP(硅知識產權,例如設計完成的CPU核心),都是主動地給自己脖子上套上繩索,把自己的命運交托到對手的手里。自主與兼容是對立的關系,依附于美國主導的生態,也就喪失了自主的權利,無論為了維持美國的霸權還是企業自己的利益,Intel和微軟、ARM和Google隨時都會收緊這些企業脖子上的繩套,而這些企業對其生態的貢獻卻只會讓繩索更加結實,更加沉重,更加身不由己。無論何種商業合同,都可以因為觸犯某種“法律”而瞬間失效,當前的國際環境下美國玩出任何花樣都不稀奇。為了保障我國核心領域信息安全,也為了給整個信息技術行業兜底,龍芯中科與合作伙伴們一直在為建設不受美國干擾的自主生態而努力,取得了斐然的成績。龍芯基于MIPS指令集擴展的LoongISA指令集完成了獨立的基礎生態,在政企辦公和行業應用中顯現了優勢,但陳舊的MIPS基礎指令難以適應CPU理論和技術的進步,已經難以承載越來越豐富的應用。再加上中美關系的變化,永久授權也存在危機,于是龍芯在兩年前立項,開始設計全新的自主CPU指令集——LoongArch。LoongArch既更加適合現代CPU和操作系統技術,又更能保障自主生態的安全,是龍芯二十年來最重大的成果之一。
從電子計算機誕生以來,出現過許許多多的指令集,隨著CPU理論和技術的進步,以及用戶需求和應用領域的擴展,指令集也需要與時俱進。指令集落后會影響CPU對新技術和新理論的應用,使CPU在性能、功耗等方面也逐漸落后,也難以在新的應用領域中有較好的表現,會被用戶放棄,也被軟件開發者放棄。指令集的軟件數量與用戶數量相輔相成,不適應時代的指令集也終會被時代拋棄。例如POWER、SPARC、ALPHA、MIPS等等曾經風光一時的CPU指令集紛紛落幕,也許有無數種失敗的理由,但終歸結底還是因為使用這些指令集的CPU喪失了市場競爭力。
保持CPU指令集先進性的一般方式,是向指令集中添加各種新指令,這樣可以保證新設計的CPU仍然能兼容現有的各種程序,Intel/AMD對x86的擴展、龍芯對LoongISA的擴展都是基于這樣的考慮。但是隨著時間推移,雖然許多舊指令已經有了更加精巧的新指令代替,但為了兼容仍然不能從指令集中剔除,補丁摞得越來越多,整個指令系統也就越來越臃腫,對編譯器和CPU設計都是巨大的負擔。由于在設計指令集基礎架構時的歷史局限性,許多在當時很合理的設計在現在已經成了提高CPU性能的阻礙。龍芯十多年來累計增加了一千多條新指令,用光了MIPS預留的擴展槽,還要背負起MIPS的歷史包袱,許多問題已經積重難返,到了必須推陳出新的時候。Intel也曾一度打算拋棄x86指令集,設計了更加先進的“IA64(安騰)”,但IA64不兼容x86的程序,x86龐大的軟件生態反而阻礙了新指令集的推廣和應用。MIPS也曾推出重新設計的MIPS R6版,不兼容舊版的指令集,也遭到了一片冷遇。而ARM的ARM64也不兼容ARM32,卻仍然獲得了成功,并且在低功耗設備中打得臃腫的x86沒有還手之力,RISC-V作為后來者又從ARM手中搶奪了許多市份額,新指令集存活并壯大的也有許多實例。那么龍芯LoongArch如何才能保證推廣的順利?
三、龍芯LoongArch的特點
一種指令集想要得到成功的推廣和應用,先進性是必需的前提。設計能用的指令集并不困難,困難的要讓指令集盡量完美,這需要深厚的理論知識和豐富的工程實踐經驗,正好這兩種龍芯都不缺。
LoongArch是典型的RISC(精簡指令集),使用32位定長指令格式,包含32個通用寄存器、32個浮點/向量寄存器。龍芯以前的LoongISA是從MIPS擴展而來,MIPS R5本身只有279條基礎指令,只有三種指令格式。龍芯之前擴展的新指令有一千多條,已經用光了MIPS R5指令格式所支持的擴展位置。于是重新設計的LoongArch通過精打細算支持多達10種指令格式,在不影響譯碼效率的條件下擁有更多的指令槽,目前已有約2000條指令,但仍預留下了大量的指令槽便于以后繼續擴展。
LoongArch在設計之初128位和256位向量指令各有一千多條,在各種測試和優化之后已經縮減到了各700余條。
在理論上,只需要幾個邏輯門就可以完成任何類型的計算。早期的CPU甚至用若干個加法運算來代替乘法,現代的嵌入式CPU也有許多沒有設計浮點運算部件,需要計算有小數點的數據時都用整數運算來模擬。學生實驗設計的CPU有的只有十幾條指令也能完成一些任務,但商業化的通用CPU指令集通常都不下千條。因為CPU指令少時,仍然可以用軟件組合有限的指令來完成復雜的任務,比如只用整數加法也能完成帶小數點的矩陣乘法運算,但是如果CPU設計了矩陣乘法的電路,那么幾百條幾千條指令的軟件算法只需要一條指令就能完成,性能可能會成百上千倍地提升。另有一些功能卻不需要用硬件實現,比如統計字符串長度,用硬件實現也仍然需要循環。龍芯已有二十年的CPU設計實踐,對于哪些功能適合用硬件完成,哪些功能更適合軟件實現,都有細致的權衡。因此對LoongArch指令集的取舍展現了龍芯的工程師們二十年經驗的總結,對LoongArch的設計是對CPU和指令集深入理解后的具現。
RISC(精簡指令集)和CISC(復雜指令集)現在已經沒有了本質的區別,為了保證在越來越豐富的應用類型中都有卓越的性能表現,RISC也會為各種計算增加大量指令。x86指令集作為CISC的代表,在CPU在設計上,也會把指令譯碼為內部的微碼,微碼也是RISC的一種表現形式。只是它們仍然存在一些外在的差異,比如RISC都是定長指令格式,而以x86為代表的CISC是變長格式。指令定長的優點是可以簡化CPU譯碼器的設計,指令格式更加規整,但因指令長度限制,而無法使用較大的立即數,也不能在單條指令中支持長跳轉。MIPS最大只支持16位立即數,龍芯設計的指令格式把立即數范圍擴展到了25位,分支跳轉的范圍也從MIPS的±32K(16位)擴展到了±512K(20位),很大程度上避免了數據超出范圍時需要拆解為多條指令的情況。變長指令則沒有這樣的限制,而且可以把最常用的指令設計得很短,這樣相同的源代碼編譯之后的二進制文件往往比定長指令的小,程序中的指令數量一般也更少。假如每條指令的執行時間相同,實現程序功能的指令數量越少,程序的性能也就會越高。
不過LoongArch由于指令設計上更加優化,摒棄了傳統指令系統中部分不適應當前軟硬件設計技術發展趨勢的陳舊內容,吸納了近年來指令系統設計領域諸多先進的技術發展成果,在把源碼編譯為目標程序后的指令數量上甚至比x86略有優勢。在Coremark的測試中,程序運行過程中執行的指令總數LoongArch為MIPS的83%,相當于運行效率提高了20%。在類型更加多樣的測試中,綜合測試結果,LoongArch平均比MIPS快12%,說明全新設計的LoongArch是成功的,可以為CPU帶來大幅的性能提升。
龍芯的LoongArch指令集不僅在硬件方面更易于高性能低功耗設計,而且在軟件方面更易于編譯優化和操作系統、虛擬機的開發。
四、以自主為基礎,以兼容納百川
CPU指令集除了先進性,要是還具有良好的兼容性,就一定能使推廣難度降低。比如Intel對Itanium寄予厚望時,AMD自主設計了完全兼容X86的AMD64指令集,從而使Itanium一敗涂地。龍芯的LoongArch指令集也有同樣的考慮,二進制翻譯擴展就是用來解決兼容性的問題。二進制翻譯是把一種指令集的程序翻譯到另一種指令集的CPU上去運行,已有多種成功的案例。比如 Transmeta CPU在內部實現的是一種超長字指令集,但對外的指令集界面則是x86,可以兼容任何的x86程序。開源軟件qemu則是使用了純軟件模擬的方案,翻譯運行的效率遠遠不如Transmeta,但具有更高的靈活性,可以實現任何指令集互譯。蘋果曾兩次更換指令集,從Power到x86,再從x86到ARM,都是通過二進制翻譯繼承以往的軟件生態,實現軟件生態的平滑過渡。龍芯在十年就前開始了對二進制翻譯的研究和嘗試,從3A1000開始就在進行指令集翻譯的實驗,在3A1000上流暢地運行了Windows2000,但是由于種種原因而一直沒有推廣。現在經過全面的準備,龍芯把之前在LoongISA上對二進制翻譯的成果轉移到了全新的LoongArch上,除了繼承自己以往生態之外,也有收割x86/ARM軟件生態的打算。
LoongArch的二進制翻譯在設計思路上與現有的同類產品都不一樣,它是軟硬件結合的技術方案,通過提取主流指令集的主要特征,實現了高效的指令集“并集”,既有接近硬件翻譯的效率,又有軟件翻譯的靈活性,并以此達到以我為主,兼容并蓄的目的。Transmeta的二進制翻譯完全喪失了自我,如果通過它只能看到x86指令集,那么它就是x86指令集的CPU,其本質與國內一些兼容主流指令集的CPU沒有什么不同,當Intel認為它會與自己的產品發生競爭時,就可以用掌控了x86指令集的雙手舉起大棒,把對手從自己的生態中踢出去。蘋果及微軟實現的軟件翻譯,也僅僅針對自家的軟件生態,并不能對外擴張。龍芯的二進制翻譯以自主的LoongArch指令集為基礎,既不影響自主生態的建設和發展,又能吸收利用其它指令集的生態,實現全面兼容。
隨著跨平臺軟件開發的興盛,特別是為國產CPU開發軟件時,由于國內CPU企業收集了各種指令集,軟件開發者往往需要為每個目標平臺準備一套測試設備,開發調試都極度繁瑣。如果使用LoongArch指令集的CPU,就可以在一臺電腦上虛擬出各種常見指令集的硬件環境,可以提高開發效率,降低開發成本。不同指令集的程序甚至可以在同一個系統環境中運行,對開發工具的搭配也可以更加靈活多樣,各種生產力軟件也不再有指令集版本的區別,都可以自由運行。對開發者更加友好的工作環境,有助于豐富LonngArch指令集原生軟件的種類和數量,實現自主軟件生態的良性發展。
在行業應用方面,不但龍芯以往積累的軟件生態能夠通過二進制翻譯完美兼容,而且能以較高的效率運行其它指令集的軟件,x86和ARM的設備不再是不可替換。隨著國產操作系統和應用軟件的持續發展和推廣,大部分與國計民生相關的行業和單位都會陸續更換成國產的硬件和軟件,然而許多基礎軟件和外設的驅動程序尚未完成對國內各種指令集的全面覆蓋,造成電腦和軟件匹配上存在困難。龍芯的全兼容方案就可以解決這個痛點,常用的指令集都能兼容,不再需要等待軟件開商的移植進度,可以先用起來,解決迫在眉睫的問題。等軟件開發商推出了運行效率更高的LoongArch指令集原生版本的軟件之后,只需要對軟件進行更換就可平穩過渡。
對于普通用戶來說,LoongArch的軟件生態已經能夠滿足普通辦公和影音娛樂,只是專業應用和游戲軟件還有欠缺。但在二進制翻譯技術的支撐下,其它指令集的應用軟件雖然達不到原生的運行效率,但也可以正常使用。比如只是偶爾使用一下PhotoShop而不以此為主業,或者偶爾玩一下游戲而不追求3A大作,那么完全可以開始嘗試使用龍芯CPU的國產電腦。只有用戶基數增長到一定程度,軟件開發商才會正視用戶的需求,自主的生態建設才能夠越來越完善。
五、打牢自主CPU持續發展的根基
龍芯向來重視自主生態建設,與自主的信息技術產業鏈共同發展。
為了夯實國產生態的用戶基礎,龍芯一直積極地推動中小學使用國產操作系統和應用軟件教學。不但邀請各中小學校長參觀龍芯中科,了解龍芯在各方面的應用,還參與中小學信息技術課程的教材編寫,種下自主國產軟硬件的種子,為改變中小學是Windows和Office培訓班這一現狀而努力。
為了培養信息技術產業的人才,提升整個行業的技術水平,龍芯不但編寫了大量教學書籍,還與各個高校聯動以教會學生造計算機為己任。設計了大量教學用的CPU實驗工具,各種開發板,編寫了專業的計算機體系結構(本科/研究生)教材,融合教學與實踐。為培養和選拔CPU設計人才而舉辦“龍芯杯” ,讓學生自己設計CPU。現在還在設計只有幾十條指令的LoongArch子集,與RISC-V相當,供學生學習和實驗。
與龍芯有關的出版物(部分)
為了推廣LoongArch指令集,也為了提高合作企業在市場中生存和競爭的能力,龍芯將聯合產業鏈伙伴在適當的時間建立開放指令系統聯盟,在聯盟成員內免費共享LoongArch及有關龍芯IP核。像RISC-V這樣的開源指令集組織并不提供開源的CPU核心設計,而龍芯會向聯盟成員免費提供用于嵌入式CPU的高性能IP。
為了軟件生態的完善,龍芯積極投身國際主流開源社區工作,成為多款開源軟件MIPS分支的實際維護者,現在也是LoongArch分支的實際維護者。自己負責了龍芯版Linux系統核心的移植和維護,也開發和優化了大量的基礎模塊。比如實現了龍芯CPU上的Java虛擬機支持,對OpenJDK的貢獻度連續兩年名列前茅。對.net Core、瀏覽器的移植和優化也解決了大量應用依賴運行環境的問題。對UE4和ffmpeg等等的移植也為游戲及影音娛樂做好了準備。對各種開發工具和編譯工具的移植也實現了在龍芯平臺上軟件開發無障礙。2020年,龍芯完成了2萬個以上的軟件包向LoongArch移植的工作,后續還需要進行各種性能優化。目前正在游說各種開源軟件的上游,從上游推送支持LoongArch架構的軟件,接受所有開發者參與龍芯軟件生態的建設,結束以前某些項目只能自己挖坑自己填的局面。
除了各種開源軟件,龍芯也積極聯合國內各大軟件企業參與自主生態建設。比如WPS、永中Office等辦公軟件,比如億圖圖示、中望CAD等設計類軟件都有支持龍芯的版本。在發布LoongArch的展會上,還展示了在基于LoongArch的首款CPU(3A5000測試版)上運行UOS系統的情況,并演示了運行基于其它主流指令系統的復雜應用程序。
龍芯中科已經在一定范圍內發布了LoongArch的基礎架構指令系統手冊。待完成包括境外專利分析在內的進一步知識產權評估后,龍芯中科將在更大范圍內發布更完整的LoongArch指令系統手冊。在完整的LoongArch指令系統手冊正式公開后,必將吸引更多的對此有興趣的開發者,參與各種開源軟件的匯編優化和移植、進行原創軟件的開發和優化,投身于自主軟件生態的建設。
《龍芯架構參考手冊》
六、龍芯的未來會更好
我國有很多CPU企業,設計了自主CPU指令集的也不只一家,但能設計出LoongArch的只有龍芯中科一個。這不止與企業自身的技術水平有關,也與企業的目標和理念有關。早期的“方舟”是從日立的一個嵌入式CPU外包項目發展而來,設計指令集時不會考慮先進性、兼容性、擴展性,僅僅是為了免除指令集授權的成本。其它的各種嵌入式CPU指令集也不是以通用CPU為發展目標,沒有向著頂峰奔跑的勇氣。申威也是一家值得尊重的企業,但它的自主指令集是為了發展超算,權衡指令集通用性時不如龍芯全面,也不會考量與桌面計算機軟件生態的兼容性。龍芯中科以全面的信息技術產業自主為目標,把x86和Windows作為主要的對手,就必須時刻考慮如何建設一個完整的軟硬件生態,實現自主產業鏈對進口產品的全面代替。龍芯為了這個遙遠的目標奮斗了二十年,當年龍芯項目組的年輕人也都已經滿頭斑白。沒人理解時,他們堅持,被人辱罵時,他們沉默,發展完全自主的CPU技術已經成為了他們生命中的執念。直到近兩年,由于國際形勢的變化,“造不如買、買不如租”、“技術無國界”等論調遭人唾棄,才證明龍芯存在的意義。
相對來說,國內依附于主流生態的通用CPU企業,卻往往只把自主的國產通用CPU視為敵人,大有為虎作倀之意。但奴顏卑膝換不來尊重,犧牲自由換來的風光不能長久永續,人家施舍的殘羹剩飯反手就能打翻,所謂的融入國際主流只是自欺欺人而已。
龍芯二十年的苦熬沒有白費,堅持自主創新磨礪出了超群絕倫的CPU設計能力。在發布LoongArch指令集的展會上,龍芯3A5000(測試版)初露崢嶸,在操作系統和軟件環境尚未足夠優化的情況下,通過一些性能測試證實它已經達到了設計目標,與同樣4核4線程的主流CPU相比性能差距已經不大。待6月正式發布時,隨著軟件優化逐步完善應更接近主流水平,二十年累計的研發費用不及Intel一個月的研發成本,取得這樣的成績殊為不易。今年龍芯還會發布16核及64核的服務器CPU產品,已經具有了與Intel/AMD在服務器領域競爭的能力。下一代3A6000將會使用新的內核設計,預計單核性能會有50%的提升,屆時龍芯CPU的性能水平將真正能與主流CPU匹敵。
有了性能足夠的自主CPU,有了生態無憂的自主指令集,國內還欠缺的只有先進工藝CPU的生產能力。因為生產工藝無法一蹴而就,也超越了一家CPU設計企業的能力,龍芯只能把CPU的設計指標限定為境內基本可控的工藝。因為工藝選型必須保守,也促使龍芯只能盡力提高對CPU核心的設計水平。國內部分CPU只能依靠更新工藝降功耗提頻率,龍芯即使面對它們的競爭,也堅持使用相對落后的生產工藝,近期美國制裁引發的一些風波,也證明龍芯的選擇是正確的,生產環節至少保證了相對的安全。
晦暗的日子已經過去,只要龍芯繼續堅持自主發展的理念,龍芯未來的道路一定鋪滿陽光。
有志者事竟成,破釜沉舟,百二秦關終屬楚;
苦心人天不負,臥薪嘗膽,三千越甲可吞吳。
相關文章
「 支持烏有之鄉!」
您的打賞將用于網站日常運行與維護。
幫助我們辦好網站,宣傳紅色文化!