是的你沒有看錯!中國自己的龍芯指令集LoongArch!不再是MIPS!_風聞
和一先生-自由撰稿人-自媒体:史海密探2020-09-14 15:12
20年彈指揮間,中國龍芯終於脱胎換骨,破繭成蝶!
備胎終有轉正的一日,狗剩也有出頭的一天;配合NV收購ARM,以及米國商務部收緊華為芯片禁令的消息一起食用,味道更濃郁。
LoongArch 是全新的指令集,不是在 MIPS 上做的擴展。

LoongArch重新設計了指令格式 ,使可用的格式多達10種 ,其包含3種無立即數格式和7種有立即數格式。重新設計的指令格式可以包含更多的指令槽,有利於以後的長遠發展。LoongArch的指令系統在設計時,以先進性、擴展性、兼容性為目標,其中兼容性是指融合MIPS/x86/ARM指令系統的主要特點,高效支持二進制翻譯。
龍芯提供基於 LoongArch 的 Linux 操作系統,在此操作系統中除了運行原生的 LoongArch 程序,還能通過翻譯的方式兼容 MIPS、x86、ARM、RISC-V 這幾種指令集的 Linux 程序。使用LoongArch翻譯任何指令時大致流程都相同,只是隨着指令系統的差異而在效率上也會有所差異。其中MIPS儘管二進制編碼與LoongArch不同,但大部分LoongArch基礎指令仍與MIPS相似,因此翻譯開銷極小。對ARM和RISC-V的翻譯效率也比x86更高。龍芯還會提供以LoongArch為目標架構的編譯器,已知編譯器已經實現把 MIPS 彙編代碼編譯為 LoongArch 二進制,內嵌MIPS彙編的C/C++源代碼甚至不用修改就能編譯。
龍芯是軟硬件結合方式。龍芯的翻譯相對於 qemu 在整數運算方面有數倍提升,而在浮點運算方面有數十倍的性能提升,這都是CPU中增加專門的硬件處理帶來的性能改善。翻譯執行 MIPS 目標為 100% 的原生性能,翻譯執行 ARM 目標為 90% 原生性能,翻譯執行 x86 目標為 80% 原生性能,並可通過某種方式安裝運行 Windows,對 Windows 的整體翻譯執行目標為 70% 原生性能。
龍芯2020 年之後生產的 CPU 都不再原生支持 MIPS,但因為可以 100% 翻譯執行 MIPS,所以以前的 MIPS 生態仍然完全兼容,但以後會以發展 LoongArch 原生生態為主。將會組建自主指令系統聯盟,聯盟成員免費使用 LoongArch 指令集,聯盟成員可以免費獲得龍芯的低於 ARM A53 性能的那些CPU核心設計,聯盟成員之間不發生指令系統訴訟(防止Intel/ARM等擠進來,它們一旦加入就相當於x86/ARM指令集充公了)。

安全,是最大的考量。
龍芯推出LoongArch是有多年準備的,並非倉促而為,二進制翻譯部分和向量加速部分,都有10年以上的技術儲備。但以前並未下定決心設計自己的指令集,而是想以MIPS為基礎發展自己獨立生態。但隨着時間推移,各種情況發生變化,龍芯的發展路線也必須調整,從而利用多年的積累,推出了獨立的指令集LoongArch。不能因為龍芯現在使用LoongArch,就以當下的視角去否定龍芯曾經的MIPS路線,而應該以當時的實際情況去看待當時發生的事情。龍芯並未否定MIPS授權的積極作用,例如MIPS寬鬆的授權模式促進了龍芯的獨立發展,例如不需面對針對MIPS的任何知識產權訴訟。龍芯推出LoongArch也並非完全與MIPS分道揚鑣,而是以20年來對MIPS的實現經驗做到了平均100%效率的翻譯執行MIPS指令,以前及將來的MIPS軟件都可以完全兼容,不會因為更換了指令系統就出現生態真空的情況。令龍芯下定決心推出新的指令系統,個人認為有以下的幾點原因:

1、時至今日,MIPS的設計顯得有些老邁,不能完全適合現代的CPU設計和操作系統,例如對實現睿頻不友好、跳轉偏移量範圍小、部分老舊指令拉低性能等等。MIPS經過龍芯多年擴展,傳聞指令槽已經用完,會影響今後的發展。龍芯想要進一步提高性能,就需要對指令系統進行較大改動,並預留足夠今後繼續擴展的指令槽。事實證明,龍芯對指令系統的重新設計非常成功,在仿真測試中,只是修改了CPU譯碼部分,其他部分完全沒變,LoongArch就比MIPS平均提高了超過16%的性能;
2、MIPS再弱小,也會對龍芯造成很大的干擾。在使用原生MIPS指令集的時候,龍芯無法對外授權自己的擴展指令集,因為作為基礎的MIPS指令集龍芯沒有權利對第三方授權。龍芯甚至不能公開指令集詳細規範的手冊,因為會侵犯著作權。以MIPS為基礎時,龍芯指令集手冊大部分內容只能對着MIPS的指令集手冊照抄,即使只有擴展指令集的內容,也不可避免地會引用到MIPS基礎指令集的相關説明,這很為難。還有更深層的原因,龍芯大量的擴展指令被用在軍方項目中,會有保密的需要,甚至早年開放過的LoongMMI擴展,現在外界也沒有了詳細的資料。在常規項目中,大量的向量計算只能使用MIPS的MSA指令集,而MSA的詳細規範也只能去看MIPS手冊,龍芯不能越俎代庖。另外,在當前的國際形勢下,使用來自美國的指令集,也會引起客户的疑慮,很難向客户對CPU自主程度進行解釋;

3、雖然開源社區對MIPS的貢獻越來越少,但相對於龍芯,開源社區更認可MIPS是不爭的事實。儘管各種重要的基礎軟件項目的MIPS分支,幾乎已經是龍芯和其合作伙伴們在維護,但使用到龍芯擴展指令的代碼卻很少。當然這也這龍芯無法公開自己的擴展指令集有很大關係,不能公開指令集的原因上面有提到。總之龍芯用於提升性能的擴展指令幾乎沒有用武之地,影響了性能的發揮,這也是民間測試往往達不到的龍芯官方分值的重要原因。而使用自己重新設計的指令集,就不需要再考慮代碼是否與MIPS標準兼容,也與某些保密項目沒有直接關係,不再有其它的顧忌,只要完成了知識產權風險評估,就可以開放完整的指令集手冊,易於社區開發人員的參與,形成合力。對開源項目建立新架構的分支,對任何開源項目都能擁有極高的自主權,可以毫無限制地優化代碼性能,減少因為軟件優化不夠而導致CPU性能發揮不好的問題;
4、當年美國寧願把MIPS剝離,也不準賣給中國,在當時可以理解為美國限制中國發展的常規手段。但近年國際情況的變化加劇,中美對抗已經明朗化,MIPS所有權不在中國,就可能隨時變成會爆炸的暗雷。儘管龍芯擁有MIPS的永久授權,但以美國現在不要臉的程度,有可能以龍芯參與軍用設備研製為理由,單方面宣佈授權取消,那麼龍芯的合法性在中國之外就會受到質疑。龍芯必須未雨綢繆,消除隱患;
5、提高獨立性,龍芯的核心設計都是自己完成,如果指令集也完全是自己完成的獨立系統,加上較老的工藝製程,那麼就完全杜絕了被人卡脖子的可能。龍芯長期依賴提高核心設計能力來提高單核性能,能使用老工藝就不使用新工藝 ,這種策略 不但節省了有限的資金,也一定程度上保障了生產製造環節的安全;
6、自建獨立軟件生態,龍芯的操作系統還是Linux,基礎庫雖然和其它的Linux一樣來自開源,但龍芯上許多的辦公軟件都是來自國內企業的開發和移植。龍芯以兼容方式保留現有生態,鼓勵合作企業把軟件編譯為LoongArch,就可以得到更高性能的原生程序。且不會出現ARM桌面生態建設的尷尬——國內企業的努力,都是為ARM添磚加瓦,一旦國產ARM無法生產,那麼就容易被國外的ARM產品替代,之前的勞動就都成了資敵的笑話。
7、更好的為中國信息安全兜底。保障中國信息安全是龍芯的初衷,也是龍芯20年來堅守的底線 。從3A1000開始,龍芯的新款CPU生產工藝,都堪堪壓着國內當時生產能力的底線,可能不完全是因為缺錢 。當前美國越來越瘋狂,如果因為某些原因,導致很多部門單位不能再使用x86和arm處理器,那麼只要換成可以兼容各種指令集的龍芯,就可以做到連軟件都不用修改,工作生產繼續進行 ;

8、龍芯開放指令集,並免費提供相當於ARM A53以下性能的IP,既為了助力聯盟內企業嵌入式芯片的發展,也能對自己的生態建設起到良好的推動作用。免費IP的舉動也會對ARM形成衝擊,因為中低端嵌入式CPU用量遠遠超過手機中用的中高端CPU,ARM的很大一部分收入來源於授權中低端IP。龍芯也是國內唯一一家,能夠對外授權指令集和IP的通用CPU企業 ,龍芯的自主可控程度是國產的其它CPU無法企及的 。
9、龍芯翻譯執行其它指令集程序的穩定性及性能即使達不到預定目標,也不需要擔心。只要能保證對MIPS的兼容性沒有問題,那麼龍芯的軟件生態就與當前沒有任何區別,龍芯仍然能在保持現有生態的同時,慢慢建立獨立的軟硬件生態。因此懷疑指令集翻譯的穩定性和效率根本沒有意義,即使不兼容x86/ARM或者翻譯效率低下,在最差情況下,也可以把使用LoongArch的新款CPU當作一次常規的性能升級。如果指令集翻譯基本有效,只要能在龍芯上正常運行部分x86和ARM軟件,哪怕只是兩三款,也是對龍芯軟件生態的有益補充。就算翻譯效率低於50%也沒有關係,Intel Atom CPU 的性能要比 i3 還低幾個等級,它們之間還有奔騰和賽揚,龍芯新款CPU如果性能接近相同核心數量的 i5,那它的 50% 性能肯定比相同核心數量的 Atom 高得多,運行常規辦公軟件沒有壓力。何況指令集翻譯本身只是過渡的手段,為了增加用户羣體,隨着龍芯的獨立軟件生態逐漸強大,指令集翻譯就會越來越邊緣化,成為錦上添花之舉。

一腔熱血一顆心,精忠報國龍芯人。
誓把強國當己任,敢用青春鑄忠魂。
十年礪刃度清苦,一朝亮劍破敵陣。
待到中華騰飛日,且讓世界聽龍吟。