1. 程式人生 > >risc-v真的比arm簡潔嗎?

risc-v真的比arm簡潔嗎?

微信公眾號 mindshare思享

 

最近看到一篇文章“RISC-V精簡到何種程度?能省的都省了!”,對arm構架的說法有些誤導,希望這篇文章可以幫助大眾更瞭解arm構架。

  

RV真的比arm指令集簡潔嗎?

拋開對CPU效能和功耗影響談指令簡潔是撒流氓的行為。Arm定義的指令都是經過多年對軟體和編譯器的理解和實踐來決定的。比如在armv6-M中有REV,REV16的指令,用來對一個暫存器裡的byte進行倒轉,當然也可以不定義REV指令,而使用移位和邏輯運算來達到同樣的目的,但是需要更多的指令組合,沒有用REV效能好。

基礎的armv6-M指令集僅僅有56條指令,且已經包含了DMB,DSB,ISBbarrier指令和WFI/SEV這種功耗管理指令。使用這些指令就可以實現所有的應用和RTOS的功能需求。

 

隨著對效能的更多要求,V7-M,V7E-M會增加更多的比如DSP,SIMD,FP,除法等更多指令的支援.大家實際上也看到了RV為支援SIMD,DSP也會大量增加指令,很多實現可能不會僅僅是最基礎的47條指令。在這方面RV還需要很多指令定義和標準化的工作要做。

實際上由上面的指令框圖我們可以看出,arm M-profile的指令集也是非常模組化的設計,在最基礎的指令集上層層擴充套件。

 

Arm指令沒有高效的立即數load指令?

 

Armv7-M有MOVW和MOVT的指令,可以用兩條指令將任意立即數移到暫存器中。  

MOVW  r0, #xxxx      ;load lower 16bit

MOVT    r0, #xxxx      ;load upper 16bit

這兩條指令共佔8 byte。

要知道RV借鑑了很多arm的經驗呢….

 

 

“只有小於和大於等於” 是優勢?

 

瞭解arm條件執行指令的朋友都知道,arm的跳轉指令是可以條件執行的,比如

beq, bne, blt, bge … ,這本不意味著增加了N條指令,eq,ne, lt, ge只是一種彙編的表達,其實他們都會變成一條指令,

eq, ne, lt, ge編碼到指令編碼的cond bit field, 是不是很酷?

 

 

讓編譯器做更多?

 

極端一些講,如果事情都給編譯器做,CPU的ISA就不要發展了。為什麼需要新的指令?主要是在新的領域遇到了新的計算需求,比如arm的NEON,乘加計算,DSP運算。如果只是使用簡單指令的組合,需要更高的取指和解碼頻寬,如果後端執行只能做簡單的運算,遇到如並行運算和DSP運算就需要多個後端執行pipeline的共同協作,可能帶來效能的問題。

很多時候指令集的實現是通過最佳實現來演化的,需要充分考慮,

·     指令實現的效能和硬體代價

·     軟體的使用頻率和範圍

·     是否對編譯器友好

 

arm指令集歷經近30年的進化,arm和最廣大的硬體,軟體和工具夥伴一起,共同打造了高效,實用,與時俱進的RISC指令集。

 

 

往期文章:

NMI, FIQ 與arm構架那點事-(2)

NMI,FIQ 與arm構架那點事-(1)

華為釋出Kirin980:世界上第一個7nm AI移動晶片

Arm構架CPU:豈止於大

深入理解Arm Cortex-A76處理器

Armv8.x構架和GICv3/v4,SMMUv3介紹

Armv8.x構架和GICv3/v4,SMMUv3介紹-2

Armv8-M:為IoT安全而生

Armv8-A虛擬化:效能和構架分析(1)

Arm虛擬化:效能和構架分析(2)

Arm虛擬化:效能和構架分析(3)

Scalable Vector Extension (SVE) 介紹

Spectre/Meltdown演義-專業篇(3)

Hacking arm PAN?

用DS-5除錯複雜問題

Spectre/Meltdown演義--專業篇(1)

Spectre/Meltdown演義-專業篇(2)

Armv8上不棄不離的NEON/FPU

Spectre/Meltdown演義-- 通俗篇

[免費]Armv8-A網上研討會資料

築起Linux Kernel 安全堡壘

Arm Linux Young和Dirty Page的過去和現在

Secure Element 介紹

揭祕Arm32 Linux的User和Kernel的頁表對映

Arm32 Linux SMP 啟動流程

C++ atomic memory model和Arm實現方式

Arm64 Linux Kernel KPTI (Meltdown防禦)方案解釋

淺談Trustzone技術