GMP 庫開發(fā)者發(fā)文批評 Risc V “性能太拉跨”
GMP 庫開發(fā)者 Torbjörn Granlund 發(fā)文批評開源的 Risc V 指令集架構(gòu)存在嚴重的性能問題,言辭非常激烈,稱“設(shè)計一個偉大的 ISA (指令集架構(gòu)) 是非常困難且偉大的,但設(shè)計類似于 Risc V 這樣的東西是微不足道的,一名普通的計算機科學專業(yè)的學生可以在一個學期的課程項目中設(shè)計出比 Risc V 更好的指令集。”
GMP 庫全稱 The GNU Multiple Precision Arithmetic Library(GNU 多精度運算庫),其維護者 Torbjörn Granlund 在執(zhí)行關(guān)鍵內(nèi)部循環(huán)的 GMP 組裝時發(fā)現(xiàn):出于 Risc V 獨特的弱指令集(RISC 精簡指令集),它執(zhí)行任何運算任務(wù)都需要更多的指令 —— 比任何一個流行的現(xiàn)代指令集都要多。
以帶進位的雙字整數(shù)相加為例,Risc V 的指令如下:
- add t0, a4, a6 // 添加低位
- sltu t6, t0, a4 // 低位相加計算進位
- add t1, a5, a7 // 添加高位
- sltu t2, t1, a5 // 高位相加計算進位
- add t4, t1, t6 // 將進位加到次低位
- sltu t3, t4, t1 // 進位相加計算進位
- add t6, t2, t3 // 所有位相加,然后輸出結(jié)果
而相同的操作在 64 位 ARM 架構(gòu)的指令:
- adds x12, x6, x10
- adcs x13, x7, x11
在 64位 x86 架構(gòu)的指令:
- add %r8, %rax
- adc %r9, %rdx
Risc V 執(zhí)行 GMP 的任意寬加法都需要 2 到 3 倍的指令,且每 64 位的結(jié)果字(result word)從1個周期變成了3個周期(關(guān)鍵路徑 add->sltu->add )。
Torbjörn 表示,Risc V 或多或少有點像稀釋版的 30 年前的 Alpha ISA ,但 Alpha 的計算路徑是有道理的,因為當時有晶體管預算,而 Risc V 作為一個現(xiàn)代指令集,應(yīng)當解決這種運算性能下降 3 倍的問題:“為什么不提供一個像樣的指令集呢?”
在文章的結(jié)尾,Torbjörn 還強調(diào)了自己“對本文提及或未提及的任何計算機體系結(jié)構(gòu)沒有經(jīng)濟或其他利益相關(guān),批評 Risc V 存粹是因為它的性能太差,本人對開源 ISA 指令集是非常支持的。”事實上,Risc V 的 ISA 過于簡單且碎片化是一個老問題,性能問題也導致它目前大部分的應(yīng)用場景是嵌入式。但作為一款年輕的指令集架構(gòu),它正在匯集社區(qū)的力量不斷地在優(yōu)化,或許我們需要給它一些時間。
本文轉(zhuǎn)自O(shè)SCHINA
本文標題:GMP 庫開發(fā)者發(fā)文批評 Risc V “性能太拉跨”
本文地址:https://www.oschina.net/news/172301/gmp-developer-criticized-risc-v-of-performance