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