【知乎】一篇有關(guān) LoongISA 的吐槽文

Maria Bombardil
關(guān)注
第一千零一個人
等?73 人贊同了該文章
1、引言
2020年4月17日,在日常看中文維基上的監(jiān)視列表時,發(fā)現(xiàn)有人竟然給我的LoongMMI條目掛關(guān)注度模版,并且提議合并到LoongISA條目。


當(dāng)時我認(rèn)為這是在挑釁我不會查有關(guān)龍芯的資料,于是我就花了15分鐘找到了有關(guān)龍芯SIMD指令優(yōu)化H.264視頻解碼的論文,并且暴力刪了模版。
在查找的過程中,偶然看到有人在觀察者網(wǎng)的風(fēng)聞社區(qū)討論龍芯3A4000的指令集。
看了一下,我覺得還可以再寫一篇文章來黑龍芯的LoongISA,順便吐出一直想吐的槽。
2、粗略介紹LoongISA
LoongISA,簡而言之就是現(xiàn)在龍芯所使用的指令集的架構(gòu)的自稱。LoongISA不僅包括全部MIPS基礎(chǔ)指令集和部分?jǐn)U展模塊,也包括龍芯自己添加的指令集。
LoongISA從龍芯2E/F時就開始出現(xiàn)部分?jǐn)U展指令集,在龍芯3A1000形成體系,在龍芯3A2000的發(fā)布會上正式向外界公開宣傳,在龍芯3A4000時初具規(guī)格。
下面就按照龍芯芯片產(chǎn)品的發(fā)展順序來介紹典型產(chǎn)品中LoongISA的變化。
( 1 )龍芯2E/F時代(GS464 R1)
龍芯從龍芯2E/F時就開始在微架構(gòu)中加入自己的指令集了。典型的就是LoongMMI,也被稱為LoongSIMD(龍芯SIMD),亦被稱為Godson-MMX。網(wǎng)上至今還能查詢到一些有關(guān)針對龍芯2F處理器的優(yōu)化文章和對LoongMMI優(yōu)化的論文。
( 2 )龍芯3A1000時代(GS464 R2 / GS464V R1)
從龍芯3A1000時代開始龍芯就往微架構(gòu)里面添加大量的指令集并開始初步形成LoongISA體系(LoongEXT + LoongMMI + LoongCAM + LoongBT x86二進(jìn)制翻譯部分)。龍芯在龍芯3B1000/1500 的 GS464V R1 中添加了大量的向量指令集,但一直沒有公開指令集手冊。
( 3 )龍芯3A2000時代(GS464E / GS264)
在龍芯3A2000的發(fā)布會上龍芯正式對外公開宣傳LoongISA。此時的GS464E為LoongISA1.0架構(gòu)。LoongISA1.0包括MIPS64R2 + MIPS DSP + MIPS VZ + LoongEXT1/2 + LoongMMI + LoongCAM + LoongBT + LoongVZ,官方在發(fā)布會上還說添加了1014條LoongSIMD指令。在龍芯2K1000中,只包含了MIPS64R2 + MSA1.0 + LoongEXT1/2 + LoongMMI + LoongCAM + LoongBT 。
( 4 )龍芯3A4000時代(GS464V R2)
龍芯3A4000相對于上一代LoongISA1.0添加了更多的指令集,并形成了LoongISA2.0。
在編譯鏈層面龍芯3A4000(GS464V R2)依然是 MIPS64R2。其添加的指令集擴(kuò)展可以用一張表來列出。
表格的指令集名稱皆為縮寫。其中,LCAMP即為LoongCAM,LVZP即為新版LoongVZ,LoongISA1.0中的LoongVZ已被刪去。
3、詳細(xì)吐槽
( 1 )資料匱乏
龍芯官方有關(guān)LoongISA的資料實在是太少了!太少了!太少了!現(xiàn)在唯一能查到指令集細(xì)節(jié)的指令集擴(kuò)展就只有LoongMMI了。其他的要么只是在官方的手冊中列出來,要么只給授權(quán)用戶,要么什么都沒有。
這樣就導(dǎo)致了網(wǎng)上很多有關(guān)龍芯自己擴(kuò)展指令集的猜測和抹黑。例如龍芯從發(fā)布會公布了LoongSIMD后一直沒有繼續(xù)公開其具體細(xì)節(jié),可能很多人還不知道LoongMMI是其子集。我在網(wǎng)上查找了相關(guān)資料后,只在兩篇論文里面查找到相關(guān)描述:
3.1 “龍芯” 處理器 SIMD 技術(shù)簡介?
“龍芯”系列處理器是中國科學(xué)院計算所研制的具有自主 知識產(chǎn)權(quán)的通用處理器,具有低功耗,低成本的特點。64 位 “龍芯”二號增強型處理器采用 SIMD 技術(shù),通過擴(kuò)展多媒體 指令集實現(xiàn)對多媒體應(yīng)用的指令級支持。SIMD 即單指令多 數(shù)據(jù)流,是一種典型的并行數(shù)據(jù)處理技術(shù)。處理器把輸入的 數(shù)據(jù)分解為多個較短的數(shù)據(jù),然后由單指令并行操作,從而提 高處理海量、可分解數(shù)據(jù)的能力?!褒埿尽钡亩嗝襟w指令吸取 了 MMX、 SSE 的優(yōu)秀思想,進(jìn)行了特色設(shè)計,支持基于字節(jié)、 半字、字以及雙字的整數(shù)操作,直接使用FPU 的 32 個 64 位浮 點寄存器作為多媒體寄存器。該類指令的操作對象為 64 位, 可以分割為 8*8, 16*4, 32*2, 64*1。如果每個數(shù)據(jù)單元為 8 位, 則有 8 個這樣的單元;若每個單元為 32 位,則有 2 個這樣的單 元,每條多媒體指令同時對幾個數(shù)據(jù)單元進(jìn)行操作,從而實現(xiàn) 空間上的并行性,即單指令流多數(shù)據(jù)流(SIMD)[5]。 “龍芯”的SIMD技術(shù)比較適合在對相鄰數(shù)據(jù)做同樣處理 的場合,即對密集型的數(shù)據(jù)處理來說, SIMD 對程序加速效果 非常明顯。利用這種特點為降低去塊效應(yīng)濾波器的計算復(fù)雜 度從而提高解碼效率提供了可能 [6]。下面描述了采用“龍芯” 多媒體指令優(yōu)化 RealVideo 解碼中去塊效應(yīng)濾波系統(tǒng)的具體 設(shè)計和實現(xiàn)。
————《基于龍芯SIMD技術(shù)的RealVideo去塊濾波優(yōu)化》吳少剛
1 龍芯SIMD技術(shù)?
1 . 1 龍芯多媒體指令執(zhí)行單元
龍芯3A處理器把多媒體處理和符合 ANSI / IEEE?。罚担?- 1985標(biāo)準(zhǔn)的浮點運算在FPU協(xié)處理器上進(jìn)行合理復(fù)用,能 夠處理龍芯自定義的千余條LoongSIMD指令。龍芯 FPU 包含 FALU1和 FALU2兩個功能處理單元,其中 FALU1 通過指令編碼的FMT域擴(kuò)展來復(fù)用SIMD媒體操作。浮點 隊列每個時鐘周期可以向FALU1和FALU2各發(fā)射1條指 令,而浮點寄存器文件可以為FALU1和FALU2各提供三 讀一寫的4個專用端口。 在FPU 寄存器定義上,LoongISA 與 MIPS64 兼容, 僅在32個64位浮點寄存器的定義上略有區(qū)別,即當(dāng)Status 控制寄存器的 FR位為1,表示32個64位浮點寄存器可 用;當(dāng)FR位為0,MIPS64表示有32個32位浮點寄存器 或16個64位浮點寄存器可用,而LoongISA表示16個32 位浮點寄存器或16個64位浮點寄存器可用,這是沿襲了 MIPS?。遥保埃埃埃暗挠梅?。龍芯3A多媒體指令集實現(xiàn)了32個 浮點寄存器的復(fù)用,即多媒體指令像普通浮點指令一樣在 寄存器重命名時分配物理浮點寄存器,混合執(zhí)行時無需任 何狀態(tài)切換,不同的是多媒體指令不產(chǎn)生任何算術(shù)類例外。 為了處理溢出,龍芯處理器定義了3種新的運算類型,即 直接拋棄最高溢出位的反繞運算、有符號飽和運算和無符 號飽和運算。?
1 . 2 LoongISA包裹數(shù)據(jù)類型?
為了處理多媒體數(shù)據(jù),LoongISA 引入包裹(Packed)數(shù)據(jù)類型。一個包裹可以是一個連續(xù)的8位字節(jié)、16位半 字、32位字或64位雙字,這樣一個64位的浮點寄存器可 以裝入8個單字節(jié)包裹、4個半字包裹、2個字包裹或1個 雙字包裹。包裹的整形數(shù)據(jù)類型有兩種表示格式:無符號 數(shù)和有符號數(shù)。當(dāng)表示有符號數(shù)時,用最高位來表示符號。 龍芯的LoongSIMD多媒體指令可以同時對寄存器中的多個 包裹執(zhí)行同樣的運算,有利于提高圖像計算的并行處 理效率。
1 . 3 LoongISA多媒體指令?
為了支持多媒體處理,LoongISA 中的 LoongSIMD指 令變得非常復(fù)雜,在多媒體優(yōu)化中經(jīng)常用到的指令包括: 加法減法指令、乘法和乘加指令、邏輯運算指令、平均值 指令、移位指令、無符號減取絕對值指令、比較賦值指令、 打包和解包指令等,這些指令的設(shè)計思想與 MMX/SSE/ SSE2指令類似,相關(guān)指令規(guī)格說明參見龍芯3A處理器用 戶手冊[10]。
————《基于龍芯SIMD技術(shù)的H.264視頻解碼優(yōu)化》顧麗紅
本來《龍芯3A處理器用戶手冊》(這里的3A即為3A1000)在草稿階段還有指令規(guī)格說明的片段,但在正式版上就沒了!
而上面的兩篇論文其實都是有關(guān)LoongMMI的論文,其中的龍芯SIMD并非指的是發(fā)布會上的1014條LoongSIMD指令。更無語的是,那1014條LoongSIMD除了子集LoongMMI在手冊中列出外,其他的指令都沒有列出。這就導(dǎo)致LoongSIMD的1014條指令在網(wǎng)上一直無法查證。所以在今年前半年網(wǎng)上就有聲音說龍芯砍掉了1014條LoongSIMD指令,只用上了MIPS MSA指令集模塊。龍芯的LSX和LASX也是一直沒有公開過更多的資料。雖然我手上有相關(guān)的bintuils Git patch,能看得到這些指令的助記符和Opcode,但就是無法在上游的任何一個版本中把patch打上去,因為龍芯自己cgit上的bintuils和上游的在文件內(nèi)的差別太大了,我也不敢隨便打上去。
龍芯的愛好者和社區(qū)的開發(fā)者一直想要相關(guān)資料和指令集手冊,甚至國外的開源社區(qū)的人也希望有相關(guān)資料。
龍芯一直不公開資料的行為已經(jīng)被很多社區(qū)成員和愛好者所厭惡。
這樣做的同時也導(dǎo)致龍芯在第三方的實測性能跑分中成績慘不忍睹。資料不公開,社區(qū)的愛好者和開發(fā)者就沒法對龍芯進(jìn)行優(yōu)化,而龍芯自己又不在上游upstream自己的優(yōu)化,導(dǎo)致底層的軟件例如OS、編譯鏈、C庫都缺乏優(yōu)化。這就導(dǎo)致本身是以能用為目的的MIPS架構(gòu)被龍芯使用后在第三方測試下不開-march=loongson3a、-march=gs464e等編譯器微架構(gòu)選項下所測得的SPEC2006的成績和官方的經(jīng)過優(yōu)化后的成績有很大的出入。龍芯的生態(tài)是建立在MIPS之上的,而進(jìn)5年來MIPS的生態(tài)日漸凋零,基礎(chǔ)設(shè)施急需翻新和重建,但龍芯卻并未接管上游社區(qū)的MIPS分支,沒有扛起MIPS生態(tài)的大旗。
龍芯在市場上堅持安可信創(chuàng)政務(wù)這一單一市場,但其他的廠商早已積極拓展市場范圍,導(dǎo)致今年一季度龍芯只同比增長30%,而君正在一季度反而增長達(dá)到了4倍左右。當(dāng)然,不能因為利潤增長幅度小就認(rèn)為別人賺不到錢,看絕對數(shù)值,全志賺的錢反而比君正多。
相對于君正,指令集等等資料官網(wǎng)上都有得查詢,而且有很多資料是提供中英文兩個版本的。開發(fā)板官網(wǎng)上就能查詢得到并且很方便就找到購買渠道進(jìn)行購買,相關(guān)手冊也有。君正自己擴(kuò)展的MXU和MXU2指令集,也是開放下載的,而且君正也提供已經(jīng)打好相關(guān)補丁的工具鏈。
君正全志作為小公司,規(guī)模,背景,技術(shù)實力都比不上龍芯,但過得都不比龍芯差多少,主要就是因為態(tài)度更包容,視野更廣闊,拓展了更多的市場。絕對數(shù)值上龍芯更高,但利潤率和人均值上面君正更高。
同樣起源于中科院計算所的寒武紀(jì)在在中國人工智能領(lǐng)域享有極高的知名度,在賽迪研究院發(fā)布的2019人工智能企業(yè)綜合實力百強、成長能力百強、創(chuàng)新能力百強名單中。而寒武紀(jì)的創(chuàng)始人陳云霽還是老胡的學(xué)生,以前也在龍芯工作過。
除了君正,飛騰、兆芯都在積極拓展市場?,F(xiàn)在兆芯的產(chǎn)品新聞基本上都能做到一周出一條有關(guān)OEM推出新產(chǎn)品的新聞。飛騰已經(jīng)適配了Windows10 For ARM了。
龍芯現(xiàn)在還沒到能對市場挑三揀四的層次,該包容的得包容,該當(dāng)孫子的得當(dāng)孫子,不能遮住眼睛只幻想著當(dāng)老子。不然就像清末時期那樣,沉浸于天朝大國的幻想之中并閉關(guān)鎖國。


(以上圖片來自匿名消息)
對市場的態(tài)度應(yīng)該是只要有利潤,不虧,就應(yīng)該放下身段去拼一把,相對于君正、全智那兩家,龍芯的先天條件要好得多了,別人能做到的龍芯沒理由做不到,至于為什么現(xiàn)在龍芯覺得人手不夠做不到,那只是龍芯實際上吃苦耐勞和工作效率不如別人。盡管龍芯自認(rèn)為很能吃苦,效率很高,但這其實也只是相對其他幾家體制內(nèi)企業(yè)而言的。
相比真正在市場上摸爬滾打的企業(yè)來說,龍芯可以說是養(yǎng)老院了。俗話說慈不掌兵,龍芯想要能在信創(chuàng)以及其他方面在面對華為時還有招架之力,必須要改變這種狀態(tài)。
龍芯官方(決策層)真的應(yīng)該反思自己的種種行為(不僅是資料、指令集手冊不公開,還有其他一系列操作例如違反GPL協(xié)議的閉源、只專注于單一市場等等),并且要快速改正。不然到最后就是龍芯死,社區(qū)散。
( 2 )逸聞趣事
上面說了這么多有關(guān)嚴(yán)肅問題的話,下面我們就輕松點。
還記得上文所說的LoongMMI又稱Godson-MMX嗎?
還記得論文中所說的LoongMMI是MMX、SSE、SSE2取長補短后的結(jié)果嗎?
你以為這是偶然?
前幾天在網(wǎng)上發(fā)現(xiàn)了一份GS464V R1的指令集列表(不包含LoongBT),其中就出現(xiàn)了很多有關(guān)以前龍芯自己添加的向量指令集。
上網(wǎng)搜其中的“VBCMULADDPD”這種AVX指令的名稱,你就能發(fā)現(xiàn)其中有一篇有關(guān)龍芯3B1500的英文文章。
驚了,以前的GS464V R1的向量指令集怕不是照著Intel的AVX做出來的!
其中有一個讓人匪夷所思的指令:

vstql?是在說向量(vector)標(biāo)量(scalar)太強了(tql)?
當(dāng)然,龍芯3B1500所添加的向量指令還是有資料描述的:
2. 1 龍芯3B SIMD 指令集?
龍芯3B 是一款 8 核處理器,每個處理器核設(shè)計了向量 運算部件和128 個寄存器的向量寄存器堆. 龍芯3B 沒有專門 設(shè)計浮點部件和浮點寄存器,向量運算部件承擔(dān)著所有浮點 運算的任務(wù),并且將前32 個向量寄存器當(dāng)作浮點寄存器使用. 龍芯3B 的向量寄存器寬度為256 位, SIMD 運算指令一 次對4 個雙字,或8 個字,或16 半字,或32 個字節(jié)進(jìn)行運算. 而龍芯3B 數(shù)據(jù)訪問的帶寬為 128 位,這樣一次向量運算,需 要兩次數(shù)據(jù)搬運,給編譯器實現(xiàn)自動向量化提出了挑戰(zhàn). 除了算術(shù)運算指令和訪存指令外,龍芯 3B 還根據(jù)應(yīng)用 需要,設(shè)計大量特定應(yīng)用性能加速指令,如 FFT 指令等,這類 指令很難通過自動向量化方法由編譯器自動生成. 對于該類 指令,通過在編譯器中設(shè)計 Builtin 函數(shù),對其進(jìn)行包裝,用戶 通過像調(diào)用庫函數(shù)一樣,調(diào)用該類指令.
2. 2. 2 SIMD 運算?
龍芯3B 設(shè)計了大量的SIMD 運算指令,包括定點算術(shù)運 算,單精度的浮點算術(shù)運算,雙精度的浮點算術(shù)運算等. 數(shù)據(jù) 打包加載到向量寄存器中,向量運算部件一次對多個數(shù)據(jù)進(jìn) 行運算,運算的結(jié)果再存儲到內(nèi)存中
2. 3 Builtin 函數(shù)支持?
龍芯3B 設(shè)計了300 多條向量指令,而自動向量化方法只 能自能自動生成部分向量指令,如加減乘除運算指令等,并不 能自動生成所有的向量指令. 對于這類指令的使用,用戶可以 通過手寫匯編來加速應(yīng)用程序的性能,但是手寫匯編效率低, 程序的可讀性差,兼容性不好.
————《龍芯3B的SIMD編譯優(yōu)化及分析》彭飛
還有,為何手冊里面說2K1000沒有實現(xiàn)LoongCAM,但在cgit上的buntuils里面卻加入了GS264支持LoongCAM的說明?
更為何在FFmpeg Git上說2K1000添加了對MSA2.0的支持?

龍芯的LoongBT指令集目前有公開記載使用過的情況也就只有在《龍芯的足跡》之中的幾篇文章當(dāng)中,但龍芯從未把指令集的使用細(xì)節(jié)公開過。
4、后記
這篇文章又拖了我一天的時間進(jìn)行復(fù)習(xí)……啊算了算了,復(fù)習(xí)去了。
本文章的非論文文字和非《龍芯的足跡 》文章內(nèi)容的圖片允許在CC-BY-SA 3.0協(xié)議四和GNU自由文檔許可證下修改和再使用。
編輯于 2020-04-28 06:25
龍芯
贊同 7329 條評論
分享
喜歡收藏申請轉(zhuǎn)載
評論千萬條,友善第一條
29 條評論
默認(rèn)
最新
煉鋼術(shù)士
希望龍芯能夠采取更加開放的態(tài)度,公開部分指令集手冊,更好的建設(shè)龍芯的生態(tài)
2020-04-20
回復(fù)10
九面相柳
zhihu.com/question/4573?loongarch基礎(chǔ)架構(gòu)手冊公開了
2021-04-30
回復(fù)贊
知乎用戶P36AzT
龍芯關(guān)注度是真的低,不關(guān)注電腦的確實易不知道
不過暴力刪{{noteability}}是真的強……
2020-04-20
回復(fù)4
知乎用戶5905rS
關(guān)注“電腦”的人只知道AMD Yes,至少要關(guān)注“計算機(jī)”的人,才容易知道其他指令集架構(gòu)的CPU。
2020-04-21
回復(fù)1

知乎用戶jv6JAj
估計有可能是專利問題,有些指令的實現(xiàn)繞不開一些已有的intel/arm的專利,于是選擇不公開了,專門黨政機(jī)構(gòu)也挺好的
2020-06-26
回復(fù)2

舞月書生
路過
2020-04-20
回復(fù)2

ftzxkp
神乎其神的二進(jìn)制翻譯指令集,現(xiàn)在2020年了,跑個win7給大家看看?
2020-04-20
回復(fù)1

初生之鳥
jiangtao9999
但是初始化個顯卡不需要二進(jìn)制翻譯這么高大上吧...
2020-04-23
回復(fù)1

初生之鳥
jiangtao9999
貌似現(xiàn)在的A卡給了ARM64的UEFI GOP,不過MIPS應(yīng)該還是沒有
2020-05-02
回復(fù)贊
查看全部 12 條回復(fù)

子涵
現(xiàn)在LoongArch指令集了
2020-11-27
回復(fù)贊

Maria Bombardil
作者
LA 可以看做是 LISA 的最終形態(tài)和開放版。
2020-12-28
回復(fù)贊

maxhu
終于公開了……
2020-08-16
回復(fù)贊

知乎用戶5w84I0
很多時候,我都在認(rèn)為龍芯是個大忽悠。
尤其是以前在單位使用龍芯崩潰的情況下。
2020-07-21
回復(fù)贊

Maria Bombardil
作者
都是以前龍芯的內(nèi)核的問題。。。

2020-07-22
回復(fù)1

韓樸宇
Wave Computing倒閉了,現(xiàn)在MIPS的ISA正式群龍無首了,恐怕過不了幾年就會像Alpha一樣生態(tài)萎縮了
2020-04-24
回復(fù)贊

Maria Bombardil
作者
估計有可能,所以我要罵龍芯還沒扛起大旗。最近幾天 Debian MIPS Port 差點被 Drop。。。
2020-04-24
回復(fù)2

Maria Bombardil
作者
jiangtao9999
是有這事。。。后來解決了。
2020-04-27
回復(fù)1

jiangtao9999
Maria Bombardil
還有這事?

2020-04-26
回復(fù)贊

冷無心天賜
Maria Bombardil
現(xiàn)在有芯聯(lián)芯了,看下它能做點什么人事
2021-06-11
回復(fù)