【知乎】龍芯發(fā)布的LoongArch到底是一套自研全新架構(gòu)還是一套基于MIPS魔改的指令集?
?龍芯發(fā)布的LoongArch到底是一套自研全新架構(gòu)還是一套基于MIPS魔改的指令集?
Morris.Zhang

2022 年度新知答主

283 人也贊同了該回答
從起源談起,過(guò)去的龍芯指令都是在MIPS上擴(kuò)展,包括傳統(tǒng)的LoongISA添加了很多擴(kuò)展,比如為了二進(jìn)制翻譯擴(kuò)展了157條指令,以及還有額外的向量擴(kuò)展;還包括很多內(nèi)核級(jí)加解密指令(早期龍芯是用于信息安全可控)。從自主可控的角度,顯然其基于MIPS擴(kuò)展的產(chǎn)業(yè)基礎(chǔ)不夠牢靠,有些細(xì)節(jié)是積重難返,很難改掉,而且如今Wave Computing也不在了,對(duì)MIPS家族的商業(yè)化演進(jìn)也成為問(wèn)題,以及Wave歷來(lái)一些核心技術(shù)改進(jìn)都是供應(yīng)美軍方的,并不會(huì)付諸商業(yè)化;于是,這成為龍芯決定自定義一個(gè)LoongArch自主指令系統(tǒng)的起因;
LoongArch相較MIPS和RISC家族的差異和優(yōu)勢(shì);坦率講,龍芯在大宗商業(yè)場(chǎng)景的技術(shù)優(yōu)勢(shì)并不存在,三者同屬于RISC體系,在生態(tài)建設(shè)和技術(shù)擴(kuò)展方面各有千秋,其中誕生了幾個(gè)百億晶體管設(shè)計(jì)的、縱貫前后道生態(tài)的、擁有數(shù)個(gè)垂直品類的ARM更是笑傲江湖;但倘若拋開(kāi)大宗商業(yè)場(chǎng)景不談,回到【自主可控、信創(chuàng)】的主題上,龍芯則是短期在PC和IDC側(cè)唯一可商用的產(chǎn)品,LoongArch也是一個(gè)【有限借鑒了MIPS架構(gòu)、進(jìn)而推翻大量MIPS設(shè)計(jì)、且不受其授權(quán)限制的全新RISC架構(gòu)】,它的優(yōu)勢(shì)可以包括幾個(gè)方面:
1、基于自主可控/可信指令系統(tǒng)的基礎(chǔ)軟件:從核高基立項(xiàng)開(kāi)始,近15年里出現(xiàn)了兩個(gè)課題方向的爭(zhēng)論:自主和兼容。兼容的好處是有生態(tài),比如Wintel和AA;但兼容的弊端,就是受制于人,X86是不授權(quán)的,ARM是嚴(yán)格授權(quán),MIPS是授權(quán)較寬松的(可以超長(zhǎng)期,且可以自主加指令),但追求兼容卻是阻礙了以O(shè)S為代表的自主基礎(chǔ)軟件的發(fā)展,如果走兼容路線,自主可控/可信的軟件必然發(fā)展不起來(lái),不可能基于敵國(guó)的指令系統(tǒng)建立自主可信生態(tài),基于X86/ARM/MIPS/RISC-V都不行,即使對(duì)方的社區(qū)即使再小,也會(huì)為可信系統(tǒng)以及自主商業(yè)化帶來(lái)干擾。而LoongArch的第一步是從指令層做到的自主可控+可信。
2、基于BT引擎的兼容性:除了做到自主可控/可信,龍芯還在自主指令系統(tǒng)上做到了基于BT翻譯的兼容性,包括針對(duì)BIOS,內(nèi)核,編譯器和匯編器以及應(yīng)用程序:避免了自主重要還是兼容重要的爭(zhēng)吵。關(guān)于二進(jìn)制翻譯:龍芯基于LoongArch的LinuxOS,其中除了運(yùn)行原生的LoongArch應(yīng)用程序,還能通過(guò)二進(jìn)制翻譯的方式兼容MIPS/RISC-V/ARM/x86這幾種指令集的Linux程序;使用LoongArch翻譯任何指令時(shí)大致流程都是相同,只是隨著指令系統(tǒng)的差異而在效率上也會(huì)有所差異。
核心態(tài)方面:硬件能夠支持兩級(jí)地址翻譯,x86到LoongArch+虛地址到物理地址(通過(guò)改造內(nèi)存快表TLB,做到兩級(jí)虛地址映射以減少映射開(kāi)銷,以及減少指令使用/指令翻譯開(kāi)銷,即X86虛地址直接翻譯成龍芯物理地址),面積和延遲開(kāi)銷都不大;以及,地址空間、中斷處理等方面支持OS跨主板和對(duì)升級(jí)后的CPU兼容;
用戶態(tài)方面:功能上針對(duì)MIPS、X86、ARM、RISC-V的特征,絕大多數(shù)指令可以做到1對(duì)1或1對(duì)2翻譯;還包括對(duì)X86的EFLAGS支持、RISC-V的原子同步指令支持;以及,ABI方面支持X86/MIPS系統(tǒng)調(diào)用兼容,支持MIPS匯編碼直接翻譯成LoongArch二進(jìn)制。
3、生產(chǎn)級(jí)的向量指令擴(kuò)展:LoongArch原生帶著128和256位向量指令集(并非基于MIPS的MSA指令),已交付流片的LoongArch處理器均具備向量指令功能(128bit向量擴(kuò)展1024條 & 256bit向量擴(kuò)展1018條)。相比RISC-V的向量指令,RVV僅用于研究/教學(xué)和社區(qū),還沒(méi)有生產(chǎn)級(jí)應(yīng)用實(shí)例;而SIMD指令,只能使用一個(gè)開(kāi)源的Hwacha指令集,本質(zhì)上還是一個(gè)協(xié)處理器,連亂序執(zhí)行流水線也整合不進(jìn)去,更不用說(shuō)做編譯器層的優(yōu)化了。這算是相較于RISC-V的一點(diǎn)微末優(yōu)勢(shì)。
【BTW - 1:LoongArch是自定義全新的指令集,并非基于MIPS的擴(kuò)展】;LoongArch包括基礎(chǔ)指令337條、虛擬機(jī)擴(kuò)展10條、二進(jìn)制翻譯擴(kuò)展176條、128位向量擴(kuò)展1024條、256位向量擴(kuò)展1018條,共計(jì)2565條原生指令。相對(duì)于MIPS,摒棄了部分不適合現(xiàn)代CPU的指令,又做了大量和擴(kuò)展,例如單條指令支持的立即數(shù)從MIPS的最大16位擴(kuò)展到最大24位,分支跳轉(zhuǎn)偏移也從64K擴(kuò)展到1M字節(jié),以及尋址空間從固定分段改變?yōu)閱我黄矫娴?,算是有效的減少了編譯結(jié)果的目標(biāo)指令條數(shù)和訪存次數(shù),效能就提高了。此外,雖然仍為RISC指令集,32位定長(zhǎng)指令、32個(gè)通用寄存器、32個(gè)浮點(diǎn)/向量寄存器;但不同的是MIPS只有3種指令格式,而LoongArch重新設(shè)計(jì)了指令格式 ,可用的格式擴(kuò)大到了10種 ,包含3種無(wú)立即數(shù)格式和7種有立即數(shù)格式,重新設(shè)計(jì)的指令格式的優(yōu)勢(shì)是,可以包含更多的指令槽,有利于以后的長(zhǎng)遠(yuǎn)發(fā)展。【注:有些指令要長(zhǎng)立即數(shù),LoongArch最長(zhǎng)的立即數(shù)擴(kuò)增有25位,尤其是跳轉(zhuǎn),相對(duì)跳轉(zhuǎn);另外,還十分節(jié)省指令槽,現(xiàn)在定義完2500多條指令,還預(yù)留了一半的一級(jí)指令槽;要知道所謂一級(jí)指令槽就6位,這前6位呢,原來(lái)是有64個(gè)槽,LoongArch只用了32個(gè),剩下的未來(lái)可以繼續(xù)擴(kuò)展】。

【BTW - 2:有質(zhì)疑LoongArch加了許多用于二進(jìn)制翻譯支持的指令,面積和開(kāi)銷會(huì)很大】;這里辯證的是,你的基礎(chǔ)指令才337條,二進(jìn)制翻譯指令加了176條,這個(gè)面積代價(jià)并不意味著會(huì)增加50%,因?yàn)槲覀冎劳ㄓ肅PU中幾乎80%的面積都在為ALU提供足夠的數(shù)據(jù)和指令,還有多級(jí)的高速緩存cache、轉(zhuǎn)移猜測(cè)表、動(dòng)態(tài)調(diào)度的那么多隊(duì)列,那些微架構(gòu)的東西和開(kāi)銷是跟指令系統(tǒng)無(wú)關(guān)的,都是微架構(gòu)的開(kāi)銷;所以指令系統(tǒng)即使有限度的擴(kuò)大一些也不會(huì)占太多面積和開(kāi)銷。另外在運(yùn)算器里面,80%的面積都在浮點(diǎn)運(yùn)算(浮點(diǎn)運(yùn)算器更占面積),浮點(diǎn)運(yùn)算方面大家基本都差不多是比較完備的,龍芯的二進(jìn)制翻譯主要是涉及定點(diǎn)運(yùn)算和訪存地址的運(yùn)算這兩個(gè)方面;所以從這個(gè)角度上,龍芯的二進(jìn)制翻譯支持,它硬件的面積開(kāi)銷應(yīng)該就是1%-2%,對(duì)延遲的開(kāi)銷也會(huì)很低。
【BTW - 3:關(guān)于BT引擎的知識(shí)產(chǎn)權(quán)風(fēng)險(xiǎn)】;用胡偉武老師的話講,二進(jìn)制翻譯是一個(gè)向死而生的設(shè)計(jì);大都為了新架構(gòu)鋪路而臨時(shí)使用,IBM/HP/INTC/Apple/Transmeta/Qcom/NV都在推出新架構(gòu)的時(shí)候用過(guò)這項(xiàng)技術(shù);70年代迄今一直在發(fā)展,出現(xiàn)數(shù)十種不同的BT翻譯系統(tǒng)和無(wú)數(shù)研究論文。關(guān)于跨指令二進(jìn)制翻譯的知識(shí)產(chǎn)權(quán)風(fēng)險(xiǎn),最典型的就是Transmeta與INTC的官司判例【Transmeta CPU特點(diǎn)是可以執(zhí)行X86指令,也是用一個(gè)DBT動(dòng)態(tài)翻譯引擎 來(lái)編譯或模擬X86指令,然后翻譯到它私有的VLIW指令集上;因?yàn)槭且揽寇浖M瓿?,如果INTC/AMD更新X86指令擴(kuò)展,那全美達(dá)更新軟件棧就行,就不用重新設(shè)計(jì)硬件了,有些性能和功率方面的差異會(huì)導(dǎo)致訪存取指和執(zhí)行有問(wèn)題,全美達(dá)通過(guò)軟件棧也能夠多少去調(diào)節(jié),甚至硬件設(shè)計(jì)問(wèn)題和制造瑕疵也可以通過(guò)軟件棧來(lái)應(yīng)急修正一下,比如制造瑕疵導(dǎo)致個(gè)體功耗過(guò)大,那么也可以調(diào)節(jié)一下功耗和核心性能;全美達(dá)最初基本專注在低功耗X86市場(chǎng),這個(gè)尤其體現(xiàn)當(dāng)時(shí)的多媒體指令的支持比如X87和SSE,那個(gè)年代對(duì)于指令效率相關(guān)于性能的要求不苛刻】,這在Intel看來(lái),Transmeta并未向Intel購(gòu)買X86授權(quán),卻正在做X86兼容的CPU;但最終Intel敗訴,Transmeta的DBT引擎在北美商用不違法。只不過(guò),當(dāng)時(shí)Transmeta是軟件虛擬機(jī),而LoongArch是硬件譯碼。
【總結(jié)】:LoongArch當(dāng)下的設(shè)計(jì)是指向自主可控、可信的相關(guān)行業(yè),并達(dá)到核高基設(shè)計(jì)要求;至少中短期的數(shù)年內(nèi)不會(huì)影響大宗PC/IDC商業(yè)市場(chǎng)。全新的自主指令系統(tǒng)的初衷,是旨在發(fā)展我國(guó)自主可控/可信的基礎(chǔ)軟件生態(tài)(含OS內(nèi)核/編譯器/應(yīng)用軟件等),因此所作出的犧牲是,一方面通過(guò)BT/LAT二進(jìn)制翻譯引擎實(shí)現(xiàn)三方應(yīng)用兼容,需要跟隨友商的版本迭代且不斷后進(jìn)的調(diào)整兼容性,消耗指令/面積/開(kāi)銷,就意味著相比竟品總是斷代;以及,由于指向信創(chuàng)、可信行業(yè),必然沒(méi)有競(jìng)爭(zhēng)力與飛騰/HW等廠商分享大宗PC/IDC市場(chǎng)的增長(zhǎng),兩者生態(tài)建設(shè)方面也不能相提并論;雖然胡老師稱龍芯和LoongArch會(huì)爭(zhēng)取適用更多商業(yè)機(jī)型和應(yīng)用場(chǎng)景,但依然是通過(guò)BT引擎落實(shí),出了信創(chuàng)/可信行業(yè)之外并沒(méi)有競(jìng)爭(zhēng)力;因此唯有祝愿龍芯,首先在信創(chuàng)行業(yè)笑傲江湖。

Morris.Zhang
50?次咨詢
5.0
人工智能優(yōu)秀回答者
31203?次贊同
去咨詢
編輯于 2022-06-27 18:20

Maria Bombardil
先提前說(shuō)明一下,RISC-V 有的設(shè)計(jì)直接抄 MIPS 的。
其次,我今天凌晨在百度貼吧龍芯吧發(fā)過(guò)貼子,基本說(shuō)明了 LoongArch 的特性是什么。
3A5000,另類的大核RISC-V【龍芯吧】_百度貼吧tieba.baidu.com/p/7283439057
LoongArch(LS3A5000)的特性:
1、LoongArch 很多設(shè)計(jì)都來(lái)(děng)源(tóng)于 RISC-V(指令格式和特權(quán)指令不同,拓展指令子集應(yīng)該也不同)。
目前推測(cè)的 LoongArch 指令 (v20210311)github.com/loongson-community/docs/tree/master/unofficial/loongarch#%E7%9B%AE%E5%89%8D%E6%8E%A8%E6%B5%8B%E7%9A%84-loongarch-%E6%8C%87%E4%BB%A4-v20210311

(?
@王雪瑞
?逆向出來(lái)的 LoongArch 基礎(chǔ)指令)
LoongArch 跟 RISC-V 相比,大概可以這么說(shuō),其能力上就是 RISC-V 的超集。
2、更有不(nèi)靠(bù)譜的消息指出,3A5000 能直接以 RISC-V 的原生指令運(yùn)行(即 LS3A5000 可以在初始化的時(shí)候就變成一個(gè) RV 芯片)。也就是說(shuō),可以在微碼層面直接翻譯成 RISC-V 的指令來(lái)執(zhí)行(注意,這里說(shuō)的是 LS3A5000,不是 LoongArch,RISC-V 不是 LoongArch 的真子集)。
至于有人說(shuō) LoongArch 和 RISC-V 的操作碼高低位不一樣,大吧?
@王雪瑞
?已經(jīng)答復(fù)了:


chip-red-pill/glm-ucodegithub.com/chip-red-pill/glm-ucode

(胡偉武真的是 Intel 最大的粉絲)
所以這次 3A5000 可以說(shuō)是 RISC-V 中的大核()
3、拓展指令子集應(yīng)該和 LS3A4000 (即 LoongISA 下的 GS464V)一樣,不排除對(duì) LoongArch 進(jìn)行了優(yōu)化。
4、正在和上游積極適配,但不排除特殊情況。
上游優(yōu)先,邁出第一步loongarch.dev/zh-cn/posts/20200127-binutils-and-autotools/

最后,我想對(duì)認(rèn)為 LoongArch 抄 MIPS/RISC-V 的人說(shuō):
RISC-V 本身很多設(shè)計(jì)也是延續(xù) MIPS 的(如0號(hào)寄存器),更何況 LoongArch 本身是在特別緊急的情況下做出的指令集架構(gòu)(ISA),把 RISC-V 拿來(lái)為我所用也無(wú)可厚非。畢竟 RISC-V開(kāi)源嘛()??上У氖?RISC-V 的一些半殘?jiān)O(shè)計(jì)也被 LoongArch 拿過(guò)去了。。。
相比較于 ARMv9 的 SVE2 的拓展指令子集,會(huì)不會(huì)有類似的設(shè)計(jì)在 LoongArch 上出現(xiàn),我個(gè)人是不抱有奢望的。
編輯于 2021-04-01 18:28