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