微結(jié)構(gòu)(Microarchitecture)對應(yīng)的是底層硬件如何實(shí)現(xiàn)指令執(zhí)行的,那么指令集架構(gòu)(Instruction Set Architecture)對應(yīng)的是程序員所看到的程序的模樣。
具體指令是如何被處理器一步一步完成執(zhí)行任務(wù)的,這交給了微結(jié)構(gòu)。而到底有哪些指令可供使用、指令是什么格式、哪些通用寄存器可以用,以及這些指令在程序員看來是要如何執(zhí)行的,就是ISA的范疇了。
因此程序員在某個ISA上寫的程序,這個程序的每一步執(zhí)行了什么操作,最終結(jié)果如何,程序員是知道的。而程序員不知道的是,每一步到底是如何被處理器完成的。
比如一個加法操作“add A,B,C”,在程序員的視角看來,就是將寄存器A和B里的數(shù)相加的結(jié)果存放在寄存器C中,之后程序員就可以把寄存器C作為A和B相加的結(jié)果來繼續(xù)使用。
而在微結(jié)構(gòu)的視角(假設(shè)為亂序執(zhí)行),則是處理器讀取到了一條指令,通過譯碼邏輯得知這是一條加法指令,這條指令需要寄存器A和B里的數(shù)據(jù)作為輸入,因此要檢查有沒有正在執(zhí)行的指令要寫入寄存器A和B(即尋找寄存器A和B的重命名寄存器),并為其結(jié)果寄存器C進(jìn)行寄存器重命名,同時在重排序緩存(ROB)中為該指令申請一個位置,然后送入指令隊(duì)列(即保留站),并不斷檢查寄存器A和B里的數(shù)據(jù)是否可用,該指令會等待直到源數(shù)據(jù)可用,且加法運(yùn)算單元空閑時,則該指令的操作碼以及寄存器A和B的數(shù)據(jù)(或來自寄存器堆,或來自旁路,或來自尚未退休指令的ROB項(xiàng))會送入加法運(yùn)算單元,當(dāng)加法運(yùn)算單元完成后將結(jié)果通過總線寫回到該指令對應(yīng)的ROB項(xiàng)中,并修改該項(xiàng)的狀態(tài)為已完成,退休(retire)邏輯每拍檢查若干ROB的項(xiàng),按照程序順序完成指令的執(zhí)行,即將其結(jié)果寫回寄存器堆,并回收ROB項(xiàng)和重命名寄存器。
不同的微結(jié)構(gòu)下,如何完成這條指令的執(zhí)行,通常是不一樣的。但程序員并不需要知道內(nèi)部是如何完成的,只需要知道這條指令可以將寄存器A和B的數(shù)據(jù)相加并存入寄存器C就可以了。這就是ISA了。
微結(jié)構(gòu)負(fù)責(zé)實(shí)現(xiàn)每條指令是如何完成執(zhí)行任務(wù)的,而ISA則可以描述指令序模型(instruction sequencing model),有兩種指令序模型:
ISA涵蓋的內(nèi)容,包括但不限于以下幾點(diǎn):
通常ISA都會包含以下三類指令:
此外還有:
最后說一句,在匯編層面還有一些“偽指令”,其只對匯編器有用,不會被翻譯成機(jī)器碼。MIPS中的“.set“指令會影響匯編器如何將匯編翻譯成機(jī)器碼:“.set mips16”使匯編器進(jìn)入MIPS 16模式;“.set mips3”則告訴匯編器下面的指令是MIPS IV(64位指令集,兼容32位指令)中的指令【3】。還有一些“偽指令”,只有匯編器認(rèn)識,CPU不認(rèn)識,在編譯的時候會被匯編器翻譯成 CPU 認(rèn)識的匯編指令,完成相應(yīng)的功能,如“l(fā)i”指令通常會被翻譯成“l(fā)ui”和“ori”。
Complex Instruction Set Computer,即CISC,復(fù)雜指令集計(jì)算機(jī)。
Reduced Instruction Set Computer,即RISC,精簡指令集計(jì)算機(jī)。
籠統(tǒng)的對比一下CISC和RISC,不完全正確,但能反應(yīng)其本質(zhì)上的差別:
對比 | CISC(x86) | RISC(ARM,MIPS,etc) |
---|---|---|
訪存模式 | 多種尋址模式 | load/store |
指令寬度 | 變長 | 定長 |
操作數(shù)來源 | 內(nèi)存或寄存器 | 寄存器 |
IO通信 | 專用的IO指令和IO地址空間 | 內(nèi)存映射 |
訪存對齊 | 不需要 | 需要 |
數(shù)據(jù)類型 | 多而復(fù)雜 | 少而簡潔 |
寄存器堆 | 相對更小 | 相對更大 |
設(shè)計(jì)原則 | 功能多樣的復(fù)雜指令集 | 功能完備的精簡指令集 |
可見RISC更加簡潔,因此單從架構(gòu)優(yōu)勢上來說,普遍認(rèn)為RISC更優(yōu)于CISC:
總的來說,由于RISC更加簡單化,因此微結(jié)構(gòu)的實(shí)現(xiàn)可以更加高效,指令的執(zhí)行效率更容易通過流水線、多發(fā)射、亂序執(zhí)行等技術(shù)來提高。對于CISC所擁有的復(fù)雜指令,比如FFT,RISC則是通過軟件來實(shí)現(xiàn)。這種復(fù)雜指令的使用場景也非常少,因此RISC也符合“常用的做得快,少用的只要對”的原則【4】。
自從1985年以后,所有的ISA都是RISC結(jié)構(gòu)。如今唯一的CISC就是x86指令集,而實(shí)際上其微結(jié)構(gòu)的實(shí)現(xiàn)也融合了RISC的優(yōu)點(diǎn)。
x86指令集在個人電腦的市場占有率上毫無疑問是王者,其創(chuàng)立者為Intel??梢哉fx86指令集是目前世界上最流行的指令集了,也被認(rèn)為是現(xiàn)存唯一的CISC指令集。
Intel主導(dǎo)下的x86架構(gòu),并不一直是處理器架構(gòu)做得最好的,歷史上出現(xiàn)過的Alpha等RISC處理器其架構(gòu)設(shè)計(jì)就比同時代的x86更優(yōu),1976年喬布斯和沃茲尼亞克推出的使用8位6502處理器的Apple II計(jì)算機(jī)也擊敗過x86架構(gòu)【5】。但x86的兼容性(Compatibility)做得最好,其他如Alpha過于追求更先進(jìn)的技術(shù),甚至Alpha指令集代與代之間完全不兼容,從而淡出了市場,而x86的兼容性,使得即使在如今64位時代下,其仍能運(yùn)行16位乃至8位的程序。顯然如果客戶每次升級處理器,都需要重寫一遍程序的話,那絕對是受不了的。
而在兼容性之外,還有Intel和AMD本身的實(shí)力,足以下很多功夫在其他方面(工藝、架構(gòu))上來提高性能,以彌補(bǔ)架構(gòu)上的差距。同時,x86架構(gòu)也逐漸吸取了RISC架構(gòu)的優(yōu)勢,在處理器內(nèi)部,通過復(fù)雜的譯碼邏輯,將變長的復(fù)雜指令轉(zhuǎn)換成定長的、簡潔的微碼,隨后再流水執(zhí)行。這樣帶來的缺點(diǎn)就是x86的譯碼邏輯相對于純正的RISC來說要復(fù)雜很多,但這也許并不全是壞處。
說起指令集兼容性的重要性,有一件事十分典型,即x86從32位發(fā)展到64位時。首先是Intel與惠普聯(lián)合推出了IA-64指令集,但其與32位的x86不兼容,因此難以推廣。隨后AMD推出了x86-64架構(gòu),是在32位的基礎(chǔ)上增加了64位擴(kuò)展,很快占據(jù)了市場。之后IA-64徹底失敗,Intel也接納了x86-64作為x86架構(gòu)在64位時代的版本。
x86架構(gòu)處理器的兩大廠商,即Intel和AMD,只是提供處理器,并不生產(chǎn)整機(jī)。因此Intel和AMD都與IBM達(dá)成了合作,搭上了IBM這班飛速發(fā)展的快車。此外微軟的操作系統(tǒng)也是長期支持x86架構(gòu)??偟膩砜?,x86處理器芯片有Intel和AMD,電腦整機(jī)有IBM,操作系統(tǒng)有微軟,在這幾大廠商的聯(lián)合下,使得x86指令集架構(gòu)占據(jù)了絕大部分的個人電腦市場。其他整機(jī)廠商,如1984年成立的DELL所推出的第一臺計(jì)算機(jī)Turbo PC也是基于Intel 8088處理器【6】。
此外讓人津津樂道的,也有AMD和Intel之間的競爭。進(jìn)入20世紀(jì)后,更明確說是2006年之后,Intel幾乎是壓制AMD,后者也不得不在價格和性能上妥協(xié)來避免直接競爭。但在20世紀(jì)前,AMD不見得比Intel差到哪去,相反在x86最初的二十年里,AMD的實(shí)力絲毫不輸于Intel,甚至更強(qiáng)。而AMD之所以落后則是有多方面原因,包括領(lǐng)導(dǎo)的不力、方向性的錯誤、Intel的不正當(dāng)競爭【7】。最近幾年隨著銳龍架構(gòu)的興起,AMD也逐漸跟上了Intel的腳步,而Intel則飽受工藝研發(fā)的痛苦,被困在14nm工藝長達(dá)5年之久,不斷滯后了先前承諾的10nm計(jì)劃。
關(guān)于x86指令集的更詳細(xì)內(nèi)容,可以移步Intel和AMD提供的開發(fā)手冊了?!?】【9】
ARM,即Advanced RISC Machine,或更早些時候的Acorn RISC Machine,是一系列RISC架構(gòu)處理器。如果說x86統(tǒng)治了個人電腦(Personal Computer,即PC)市場,那么ARM則是統(tǒng)治了移動設(shè)備市場,主要是手機(jī)、平板以及嵌入式系統(tǒng)。這得益于RISC架構(gòu)的優(yōu)勢,其簡潔性可以很容易的實(shí)現(xiàn)低功耗需求,降低設(shè)計(jì)難度和散熱性要求,同時具備良好的擴(kuò)展性可以滿足眾多需求。
英國計(jì)算機(jī)公司Acorn Computers于1978年在劍橋成立,其在1980s推出了Acorn RISC Machine architecture,用于自家的PC。Acorn的第一款基于ARM的產(chǎn)品是一種協(xié)處理器模塊,用于BBC Micro系列計(jì)算機(jī),而BBC系列計(jì)算機(jī)也用于開發(fā)用于芯片設(shè)計(jì)的仿真軟件,以及用于ARM2開發(fā)的CAD工具。
在1980s末期,Apple Computer公司和VLSI Technology公司開始和ARM合作開發(fā)新的架構(gòu)。1990年Acorn將芯片設(shè)計(jì)團(tuán)隊(duì)獨(dú)立出去,成立了Advanced RISC Machines Ltd,其母公司則為ARM Holdings,與Apple和VLSI共同開發(fā)處理器核。在1992年推出了ARM6架構(gòu),而Apple使用了基于ARM6的ARM610作為Apple Newton PDA的基礎(chǔ)。Acorn在破產(chǎn)前一直在銷售基于ARM的PC,而ARM Holdings則在銷售芯片架構(gòu)設(shè)計(jì)【10】。
ARM并不生產(chǎn)芯片,而是出售芯片設(shè)計(jì),供其他廠商使用。ARM架構(gòu)的授權(quán)方式主要有兩類:核心級授權(quán)和架構(gòu)級授權(quán)【11】:
比較知名的RISC,除了ARM外,簡單介紹一下四種:【12】
RISC-V是一個開源的指令集架構(gòu),遵循RISC的設(shè)計(jì)原則,即力求簡潔性,同時保持開放性。這個開源項(xiàng)目于2010年起源于伯克利,隨后一直發(fā)展至今。
RISC-V最大的意義在于其開源性?,F(xiàn)有的ISA基本上都十分昂貴,如ARM的授權(quán)。此外,設(shè)計(jì)CPU也是一個很復(fù)雜、很費(fèi)錢的工作,不僅需要有經(jīng)驗(yàn)的架構(gòu)設(shè)計(jì)人員,還需要不斷的經(jīng)歷仿真、驗(yàn)證、流片測試,而這則是普通公司難以承受的。
RISC-V自誕生之日起就是為了解決這些問題,提供一個開源的、廣泛應(yīng)用的、經(jīng)過驗(yàn)證的指令集。經(jīng)過若干年的開發(fā),RISC-V具備了完整的軟件工具鏈,以及若干開源的處理器架構(gòu)設(shè)計(jì)。2016年,RISC-V基金會成立,作為一個非盈利組織,負(fù)責(zé)維護(hù)RISC-V指令集手冊和架構(gòu)文檔,并推動RISC-V持續(xù)發(fā)展。許多著名科技公司,如谷歌、惠普、Oracle、西部數(shù)據(jù)等,都是RISC-V基金會的創(chuàng)始會員,越來越多的芯片公司也開始使用或計(jì)劃使用RISC-V架構(gòu)。此外,許多體系結(jié)構(gòu)領(lǐng)域的教材,如Patterson和Hennessy的系列著作《計(jì)算機(jī)體系結(jié)構(gòu)·量化研究方法》,其作者本身也大力支持RISC-V架構(gòu),因此后續(xù)越來越多的教材也將以RISC-V為例。而隨著物聯(lián)網(wǎng)時代的加速到來,有一個統(tǒng)一的、通用的、開源的指令集架構(gòu)是很有意義的?!?3】
然而RISC-V的野心太大,無論是PC的王者Intel,還是移動設(shè)備的霸主ARM,都不會任由其發(fā)展下去。目前的形勢下,正在興起的物聯(lián)網(wǎng)、AI則是RISC-V主要的發(fā)展方向【14】。
胡老師的書中提出了四點(diǎn)指令集設(shè)計(jì)原則【4】:
只有這四點(diǎn)是不夠的,或者說這四點(diǎn)只是針對通用處理器的指令集設(shè)計(jì)而言。
而在設(shè)計(jì)一個專用處理器的ISA的時候,常常在各方面都會面臨多種選擇,最重要的是清楚不同設(shè)計(jì)下的優(yōu)勢和劣勢,根據(jù)實(shí)際的需求選擇設(shè)計(jì)方案。盡管真正從零開始設(shè)計(jì)一個ISA的機(jī)會并不多,但通過這種分析可以對指令集架構(gòu)有更好的了解。此外目前 RISC-V架構(gòu) 的發(fā)展提供了更多接觸指令集設(shè)計(jì)的機(jī)會。從2014年逐漸發(fā)展起來的深度學(xué)習(xí)處理器,也出現(xiàn)了許多面向深度學(xué)習(xí)處理的指令集架構(gòu)。
[1] WiKiPedia.Dataflow architecture[EB/OL].(2019-03-05)[2019-05-04].https://en.wikipedia.org/wiki/Dataflow_architecture
[2] Onur Mutlu.Dataflow[EB/OL].(2013-10-31)[2019-05-04].https://www.archive.ece.cmu.edu/~ece740/f13/lib/exe/fetch.php?media=onur-740-fall13-module5.2.1-dataflow-part1.pdf
[3] adaptiver.set偽指令(mips)[EB/OL].[2019-05-04].https://blog.csdn.net/adaptiver/article/details/6760220
[4] 胡偉武.計(jì)算機(jī)體系結(jié)構(gòu)(第2版)[M].清華大學(xué)出版社:北京,2017:55-71.
[5] Gary Anthes.Timeline: A brief history of the x86 microprocessor[EB/OL].(2008-06-05)[2019-05-05].https://www.computerworld.com/article/2535019/timeline–a-brief-history-of-the-x86-microprocessor.html
[6] Smithsonian.PC’S Limited Microcomputer[EB/OL].[2019-05-05].https://americanhistory.si.edu/collections/search/object/nmah_1321866
[7] Graham Singer.The Rise and Fall of AMD[EB/OL].(2012-11-21)[2019-05-07].https://www.techspot.com/article/599-amd-rise-and-fall/page1.html
[8] Intel.Intel? 64 and IA-32 Architectures Software Developer Manuals[EB/OL].[2019-05-07].https://software.intel.com/en-us/articles/intel-sdm#combined
[9] AMD.Developer Guides, Manuals & ISA Documents[EB/OL].[2019-05-07].https://developer.amd.com/resources/developer-guides-manuals/
[10] David Chisnall.Understanding ARM Architectures[EB/OL].(2010-8-23)[2019-05-07].https://www.informit.com/articles/article.aspx?p=1620207
[11] WiKiPedia.ARM architecture[EB/OL].(2019-03-03)[2019-05-07].https://en.wikipedia.org/wiki/ARM_architecture#History
[12] 胡振波.ISA眾生相[EB/OL].(2018-05-23)[2019-05-07].http://book.51cto.com/art/201805/574072.htm
[13] 胡振波.RISC-V架構(gòu)與嵌入式開發(fā)快速入門[M].人民郵電出版社:北京,2019:19-23.
[14] 半導(dǎo)體行業(yè)觀察.RISC-V未來將面臨怎樣的挑戰(zhàn)?[EB/OL].(2019-03-10)[2019-05-07].https://www.chainnews.com/articles/711647751312.htm
聯(lián)系客服