我們指揮電腦工作,不能簡(jiǎn)單的和電腦說(shuō):“嘿,幫我運(yùn)行個(gè)程序?!币?yàn)?a class="article-link" target="_blank" href="/tag/%E8%AE%A1%E7%AE%97%E6%9C%BA/">計(jì)算機(jī)只能理解0和1組成的指令(機(jī)器語(yǔ)言),難道人類要想操作電腦就需要輸入成千上萬(wàn)的0和1嗎?稍微了解編程的朋友知道,使用編程語(yǔ)言讓電腦輸出“hello,world”只需要一行簡(jiǎn)單代碼:
printf (“hello,worldn”);? ?//c語(yǔ)言描述
print(hello,world)? ?#Python語(yǔ)音描述
這就比只有0和1的命令簡(jiǎn)單明了的多。事實(shí)上當(dāng)計(jì)算機(jī)運(yùn)行這行代碼時(shí),CPU收到的依舊是只有0和1的命令串,這中間的變化,就是指令集(ISA)與編程語(yǔ)言(匯編+高級(jí))共同幫我們翻譯的,指令集則是最接近機(jī)器語(yǔ)言的“翻譯官”。簡(jiǎn)單的說(shuō),指令集就是一串串二進(jìn)制機(jī)器語(yǔ)言的合集,用來(lái)描述這些二進(jìn)制指令的語(yǔ)言叫做匯編語(yǔ)言,后來(lái)又出現(xiàn)了許多編譯器和高級(jí)語(yǔ)言來(lái)幫助程序員更方便的編程。本文將要講到的RISC-V與ARM都是指令集的一種。
Add Immediate指令(二進(jìn)制機(jī)器語(yǔ)言) ?圖源:維基百科
要想設(shè)計(jì)一個(gè)處理器,第一步就需要確定這這顆處理器使用的指令集是什么。指令集決定了這顆芯片在工作時(shí)具體的計(jì)算方式,芯片上數(shù)量眾多又復(fù)雜晶體管其實(shí)就是將指令集用電路固定下來(lái)。
總而言之,指令集對(duì)芯片來(lái)說(shuō)十分重要,它能直接決定芯片的電路布局方式,是每一種新型的CPU在設(shè)計(jì)時(shí)就規(guī)定的一系列與硬件電路相配合的指令系統(tǒng)。而指令集的先進(jìn)與否,也關(guān)系到CPU的性能發(fā)揮,它也是CPU性能體現(xiàn)的一個(gè)重要標(biāo)志。
目前指令集也分為兩類,精簡(jiǎn)指令集和復(fù)雜指令集,但它們的區(qū)別并不是二進(jìn)制命令的長(zhǎng)短。
復(fù)雜指令集VS精簡(jiǎn)指令集
指令集剛誕生時(shí)較為繁瑣,人們通過(guò)優(yōu)化將部分指令打包在一起,再把一些原來(lái)由軟件實(shí)現(xiàn)的、常用的功能改用硬件的指令系統(tǒng)實(shí)現(xiàn),以此來(lái)提高計(jì)算機(jī)的執(zhí)行速度,這種指令集稱為復(fù)雜指令集(Complex Instruction Set Computer,CISC)。在復(fù)雜指令集中,存儲(chǔ)器讀取、存儲(chǔ)和計(jì)算操作往往全部集中于單一指令中。復(fù)雜指令集的特點(diǎn)是指令數(shù)目多而復(fù)雜,每條指令字長(zhǎng)并不相等,電腦必須加以判讀,并為此付出額外性能。
20世紀(jì)80年代,為了解決計(jì)算機(jī)性能不足的問(wèn)題,人們找到了另一種優(yōu)化指令集的方法。芯片設(shè)計(jì)師選擇僅保留一些功能簡(jiǎn)單,執(zhí)行快速的簡(jiǎn)單命令,將復(fù)雜程序用用一段程序來(lái)實(shí)現(xiàn),這種指令集就被稱為精簡(jiǎn)指令集(Reduced Instruction Set Computer,RISC)。RISC屬于等長(zhǎng)指令集,CPU在執(zhí)行指令的時(shí)候速度較快且性能穩(wěn)定。與復(fù)雜指令集相比,精簡(jiǎn)指令集更容易實(shí)現(xiàn)諸如程序調(diào)用和返回,循環(huán)等指令,指令并行執(zhí)行程度更好,編譯器的效率更高。
RISC與CISC指令的區(qū)別 ?圖源:Tech Journeyman
既然RISC優(yōu)勢(shì)這么明顯,那是不是RISC必然會(huì)替代所有CISC指令集了呢?
并沒(méi)有,與CISC相比,RISC指令集也有自身不足。雖然RISC指令較為簡(jiǎn)單,但其本身?yè)碛械闹噶钶^少,在完成某些任務(wù)的時(shí)候需要執(zhí)行更多指令,這也使得RISC在編譯時(shí)代碼長(zhǎng)度要顯著長(zhǎng)與CISC,因此也需要占用更多內(nèi)存,編譯難度也會(huì)增加。業(yè)內(nèi)有專家曾分析RISC的缺點(diǎn):“執(zhí)行同樣的功能,一個(gè)RISC程序比一個(gè)CISC程序長(zhǎng)30%。同時(shí),RISC對(duì)編譯器要求較高,優(yōu)化編譯器是一項(xiàng)極其復(fù)雜且技術(shù)要求很高的工作,它必須由RISC機(jī)制造單位自身編制,因?yàn)闆](méi)有RISC詳細(xì)原始資料不可能產(chǎn)生編譯程序的目標(biāo)代碼。因此這會(huì)讓第三方公司增加額外的軟件配套費(fèi)用?!?/p>
RISC與CISC,本質(zhì)上并無(wú)優(yōu)劣之分,只有適用場(chǎng)景的不同。例如屬于復(fù)雜指令集的x86架構(gòu),讓英特爾與AMD處理器產(chǎn)品在CPU領(lǐng)域保持著絕對(duì)優(yōu)勢(shì)。因?yàn)樽烂娑嘶?a class="article-link" target="_blank" href="/tag/%E6%9C%8D%E5%8A%A1%E5%99%A8/">服務(wù)器端處理器相比移動(dòng)端能夠較少考慮功耗與續(xù)航問(wèn)題,因此它們的性能足夠強(qiáng)悍,不會(huì)被CISC的特性拖累,反而可以更高效的執(zhí)行復(fù)雜任務(wù)。但移動(dòng)端計(jì)算機(jī)(手機(jī)、平板電腦等)的處理器在設(shè)計(jì)時(shí),除了要考慮性能外,功耗與散熱同樣重要,這就給了RISC指令集發(fā)展空間,因此在移動(dòng)端市場(chǎng)爆發(fā)時(shí)期,屬于RISC指令集的ARM架構(gòu)脫穎而出,目前占據(jù)了最多移動(dòng)端市場(chǎng),我們熟悉的高通驍龍系列與三星Exynos系列芯片均使用了ARM公司的IP核心。
8086CPU,標(biāo)志著x86架構(gòu)誕生 ?圖源:百度百科
RISC-V與ARM的誕生
ARM芯片的誕生十分有戲劇性。
1981年,剛成立3年的Acorn公司(橡果電腦有限公司)獲得了英國(guó)廣播公司生產(chǎn)電腦的訂單。但那時(shí)處理器正處于8位與16位的更替時(shí)期,Acorn沒(méi)有符合需求的芯片,于是它們轉(zhuǎn)頭向摩托羅拉尋求幫助 。摩托羅拉雖然提供了16位芯片產(chǎn)品,但由于芯片中斷響應(yīng)時(shí)間過(guò)長(zhǎng),最終沒(méi)有通過(guò)評(píng)估。Acorn決定向英特爾尋求幫助,希望對(duì)方提供一些80286處理器的設(shè)計(jì)資料和樣品,但是卻遭到回絕。Acorn一氣之下決定自己制造芯片,經(jīng)過(guò)多年的艱苦奮斗,兩位來(lái)自劍橋大學(xué)的科學(xué)家最終完成了自己的芯片設(shè)計(jì),并將它命名為Acorn RISC Machine,也就是ARM芯片,RISC就是前文提到的精簡(jiǎn)指令集。1990年11月27日,Acorn公司正式改組為ARM計(jì)算機(jī)公司。
經(jīng)過(guò)多年的發(fā)展,如今的ARM早已不再是面對(duì)英特爾時(shí)“吃癟”的小公司。當(dāng)前ARM的Cortex核心已經(jīng)得到市場(chǎng)的廣泛認(rèn)可,小到兒童手表、智能手機(jī),大到數(shù)字電視、智能汽車、CT機(jī),基于ARM架構(gòu)的芯片已經(jīng)覆蓋先當(dāng)多電氣設(shè)備。ARM在移動(dòng)端儼然已獲得當(dāng)年英特爾在處理器領(lǐng)域的地位。
ARM處理器架構(gòu)分類 ?圖源:Circuit Digest
屠龍者終成“惡龍”,那RISC-V這位 “勇士”又該怎么挑戰(zhàn)ARM呢?我們先來(lái)認(rèn)識(shí)一下RISC-V,并對(duì)比一下它們有什么區(qū)別。
RISC-V是加州大學(xué)伯克利分校 RISC ISA 設(shè)計(jì)的第五版。羅馬數(shù)字“V”表示“變體”和“向量”,表示它支持一系列計(jì)算機(jī)體系結(jié)構(gòu)研究。2010年,當(dāng)時(shí)加州大學(xué)伯克利分校計(jì)算機(jī)系教授Krste Asanovi? 博士想要制定一個(gè)像Linux 一樣的開(kāi)源計(jì)算機(jī)系統(tǒng)規(guī)范。在獲得了David Patterson 博士的幫助后,它們于1990 年代開(kāi)始RISC 芯片的設(shè)計(jì)工作,最終形成了 RISC-V。后來(lái),RISC-V 基金會(huì)成立,旨在維護(hù)、宣傳和管理RISC-IV IP,并協(xié)助廠商相互合作。此后由于美國(guó)對(duì)先進(jìn)芯片的出口限制,RISC-V基金會(huì)從美國(guó)加利福尼亞州轉(zhuǎn)移到瑞士工作。目前,它在 50 個(gè)國(guó)家和地區(qū)擁有約 1,000 多個(gè)會(huì)員(公司),其中包括華為、阿里巴巴、谷歌、英偉達(dá) 和 IBM 等重量級(jí)企業(yè)。
RISC-V會(huì)員 ?圖源:Circuit Digest
RISC-V VS ARM
RISC-V與ARM一樣,都是屬于RISC精簡(jiǎn)指令集,目前網(wǎng)上已經(jīng)有很多媒體分析過(guò)這兩種指令集開(kāi)源與封閉、免費(fèi)和收費(fèi)的區(qū)別,今天我們一起看看它們?cè)诩軜?gòu)上有什么異同。
從內(nèi)存交互方式看,RISC-V與ARM都使用加載-存儲(chǔ)體系結(jié)構(gòu),即只有在存和取數(shù)據(jù)時(shí)可以訪問(wèn)存儲(chǔ)器(內(nèi)存),運(yùn)算型指令操作均在CPU內(nèi)完成,最終的計(jì)算結(jié)果也將寫回內(nèi)存中。但兩種指令集的字節(jié)順序(Endianness)不同,字節(jié)順序是字節(jié)在存儲(chǔ)在內(nèi)存中或通過(guò)數(shù)字鏈接傳輸時(shí)被安排成更大數(shù)值的順序,可根據(jù)高位優(yōu)先與低位優(yōu)先分成兩種:大端模式(高位優(yōu)先,Big-endian)或小端模式(低位優(yōu)先,Little-endian)。ARM處理器默認(rèn)是小端模式,但也支持大端模式,而RISC-V僅支持小端模式,兩種模式?jīng)]有優(yōu)劣之分,僅在數(shù)據(jù)處理時(shí)有不同的優(yōu)點(diǎn)。
大端與小端區(qū)別 ?圖源:CSDN
從架構(gòu)復(fù)雜程度看,RISC-V本身非常簡(jiǎn)單,基礎(chǔ)指令集則只有40多條,加上其他的模塊化擴(kuò)展指令總共幾十條指令,其規(guī)范文檔僅有145頁(yè),而“特權(quán)架構(gòu)文檔”的篇幅也僅為91頁(yè)。ARM由于是一種封閉的指令集架構(gòu),所有廠商在采用ARM IP核心后,不能基于原有設(shè)計(jì)自行更改芯片,企業(yè)只能調(diào)整自身需求來(lái)迎合ARM核心。經(jīng)過(guò)多年的發(fā)展,ARM指令集變得極其復(fù)雜和繁瑣,相應(yīng)的架構(gòu)文檔有上千頁(yè)。這也變相導(dǎo)致了ARM處理器的研發(fā)門檻要遠(yuǎn)高于RISC-V。
從定制化方面看,RISC-V沒(méi)有針對(duì)任何功能、架構(gòu)或目標(biāo)進(jìn)行過(guò)度優(yōu)化,因此它能適用于幾乎所有計(jì)算場(chǎng)景。ARM針對(duì)智能手機(jī)的優(yōu)化程度要高于對(duì)筆記本電腦、臺(tái)式機(jī)和服務(wù)器的優(yōu)化程度。正因如此,ARM芯片在移動(dòng)端領(lǐng)域有著無(wú)可撼動(dòng)的統(tǒng)治力。
總結(jié)
從以上內(nèi)容可以看出,RISC-V與ARM雖然同為RISC精簡(jiǎn)指令集,但在指令集特性上各有不同。除了開(kāi)源與免費(fèi),簡(jiǎn)單和低開(kāi)發(fā)門檻也是RISC-V挑戰(zhàn)ARM的殺手锏。
而目前RISC-V和ARM的主要差距體現(xiàn)在上下游產(chǎn)業(yè)生態(tài)和規(guī)?;瘧?yīng)用上,這是擺在RISC-V陣營(yíng)的玩家們面前最大的挑戰(zhàn)和難題。
參考資料:
ARM vs RISC-V https://techjourneyman.com/blog/arm-vs-risc-v/ Understanding RISC-V Architecture and Why it could be a Replacement for ARM https://circuitdigest.com/article/understanding-risc-v-architecture-and-why-it-could-be-a-replacement-for-arm 處理器架構(gòu)、指令集和匯編語(yǔ)言,三者有何關(guān)系? https://www.zhihu.com/question/23474438 ARM芯片的發(fā)展歷史 https://zhuanlan.zhihu.com/p/370771150 維基百科:Instruction set architecture(ISA)、復(fù)雜指令集計(jì)算機(jī)、精簡(jiǎn)指令集計(jì)算機(jī) https://en.wikipedia.org/wiki/Instruction_set_architecture https://zh.wikipedia.org/wiki/%E8%A4%87%E9%9B%9C%E6%8C%87%E4%BB%A4%E9%9B%86%E9%9B%BB%E8%85%A6 https://zh.wikipedia.org/wiki/%E7%B2%BE%E7%AE%80%E6%8C%87%E4%BB%A4%E9%9B%86%E8%AE%A1%E7%AE%97%E6%9C%BA