OverLord
處理器,其實全稱應(yīng)該是中央處理單元——Central Processing Unit(簡稱CPU),它是電腦最為核心的部件,功能主要是解釋并翻譯電腦的指令指令,處理軟件運行時產(chǎn)生的數(shù)據(jù)(圖2)。在1970年以前,處理器其實是由多個獨立單元構(gòu)成的,比如整數(shù)運算單元、浮點運算單元、寄存器。后來隨著大規(guī)模集成電路制造技術(shù)的發(fā)展,處理器各單元部件可以合并起來,這種高度收縮后的產(chǎn)物就是微處理器,這也就解釋了為什么電腦早期被稱作“微型計算機”。
處理器最核心的三個部分是運算器、控制器、寄存器三部分,GPU圖形處理器并不算在內(nèi)。一如其名,運算單元負(fù)責(zé)計算,控制器則負(fù)責(zé)發(fā)出處理器每條指令所需要的信息,寄存器相當(dāng)于一個臨時中轉(zhuǎn)站,負(fù)責(zé)將運算的結(jié)果或者發(fā)出的指令暫存再傳遞給下一個工序(如內(nèi)存、硬盤),這樣可以保證更高的運算速度。
那么,處理器在計算的時候,又是如何工作的呢?這就要從處理器的構(gòu)架談起了。
(微型)處理器的開端并不是像今天這樣X86、ARM為主,實際上是百花齊放,還有MIPS和IA64等等很多架構(gòu)、指令集,它們之間的差異非常之大。當(dāng)然我們今天說的X86,實際上也已經(jīng)是X86的衍生構(gòu)架X86-64,即64bit extended(64位元擴展架構(gòu))。
我們將這些構(gòu)架往后放放,先從最基本的邏輯角度分類。它們統(tǒng)歸兩大類,分別為“復(fù)雜指令集”和“精簡指令集”,也就是“CISC”與“RISC”(圖3)。如果現(xiàn)在就做個總結(jié),X86屬于復(fù)雜指令集產(chǎn)物,ARM則屬于精簡指令集產(chǎn)物。
復(fù)雜指令集,即Complex Instruction SetComputers,究竟什么是“復(fù)雜指令集”呢?我們直白一點來解讀:以最簡單的乘法計算指令為例,當(dāng)計算時,復(fù)雜指令集會調(diào)用內(nèi)存A和內(nèi)存B中的兩個數(shù)據(jù)相乘,然后將結(jié)果存儲至內(nèi)存A中(圖4),當(dāng)然,這需要多個處理器的時鐘周期才可以完成,也就是我們所說的IPC(每周期指令,instructions per cycle)。
精簡指令集,即Reduced Instruction SetComputers,和復(fù)雜指令集的差異在于,同樣的乘法指令,精簡指令集在執(zhí)行計算的時候,需調(diào)用四個處理器周期指令完成乘法的計算,即分別將內(nèi)存A數(shù)據(jù)加載到寄存器,內(nèi)存B數(shù)據(jù)加載到寄存器之中,然后調(diào)用兩個寄存器中的數(shù)據(jù)進行乘法計算,寄存結(jié)果最終存入內(nèi)存A。另外RISC架構(gòu)的設(shè)備通常也比較簡潔,這也是可以用來識別的一個特色(圖5)。
這兩種方式最大的差異是,復(fù)雜指令集對單多數(shù)指令使用率低卻增加了處理器的復(fù)雜度,指令是可變長格式,而精簡指令集多為單周期指令,指令長度是固定的,操作寄存器時至需要讀取、存儲的操作即可。一個微程序包含若干條微指令(也稱微碼),執(zhí)行復(fù)雜指令時實際上相當(dāng)于運行一個微小的程序。正因如此,同樣一個計算指令,復(fù)雜指令集一旦開始就必須執(zhí)行完畢才可以,而精簡指令集可以隨時“叫停”,打斷計算過程(圖6)。
其實,最初只有復(fù)雜指令集,但是隨著時間推移,處理器的設(shè)計越發(fā)復(fù)雜,更多的運算指令被放入構(gòu)架里,比如最初的X86處理器構(gòu)架只有基本的整數(shù)運算指令和浮點運算指令,但是經(jīng)過長期發(fā)展,各種擴展指令集應(yīng)運而生:例如MMX、SSE、AVX等等,這些擴展指令集是為特定的應(yīng)用而生。但是,越來越多的指令也讓處理器的功耗節(jié)節(jié)攀升(圖7)。
如果說功耗還是可以接受或者可以改善的事情,那么,“無效功能設(shè)計”就是一個更令人頭疼的問題了——在復(fù)雜指令集的處理器中(尤其是現(xiàn)在X 86構(gòu)架處理器),只有20%左右的指令會經(jīng)常性調(diào)用,大部分指令集只不過是“待命狀態(tài)”,很多硬件資源實際是被閑置的(圖8)。
而精簡指令集的特點就是針對復(fù)雜指令集設(shè)計的,指令集越少、越精為宜,尤其是常用的計算指令,更多的衍生指令則可以依靠這些基礎(chǔ)指令組合來執(zhí)行,這樣的好處就是功耗有效降低,指令執(zhí)行更為簡化。不過隨著時間的推移、尤其是現(xiàn)在以ARM為代表的精簡指令集處理器功能越發(fā)強大,其指令設(shè)計也越發(fā)復(fù)雜(圖9),二者的區(qū)別與界限也開始有了一定程度的重疊。
如果要用一句話來總結(jié),復(fù)雜指令集的指令集非常豐富,重點在于“軟件硬件化”,對于軟件開發(fā)者非常友善,但硬件的設(shè)計過于復(fù)雜;而精簡指令集正好相反,屬于“硬件軟化”,編譯器等軟件的設(shè)計要求較高,編譯后的程序體積也比較大,但是處理器的開發(fā)難度大為降低,成本自然也要低廉許多(相對于復(fù)雜指令集的處理器產(chǎn)品)。
目前,復(fù)雜指令集的處理器代表,主要是X86(X86-64)構(gòu)架,如英特爾和AMD主要處理器產(chǎn)品的構(gòu)架、我國的兆芯,以及已經(jīng)消失或走出主流的Cyrix、VIA、IDT等公司的全部或部分處理器架構(gòu);而精簡指令集則更為龐雜,典型構(gòu)架包括DEC Alpha、ARC、ARM、AVR、MIPS、PA-RISC、RISC-V、PowerArchitecture(PowerPC)和SPARC(部分未延續(xù)至當(dāng)前)等等。
1復(fù)雜指令集代表隊
剛剛筆者提到,復(fù)雜指令集目前的代表主要集中在X86構(gòu)架上,實際上,早先還有兩個類別的復(fù)雜指令集構(gòu)架,只不過他們在競爭的大潮下因為各種各樣的原因停止了前進的步伐。比如DEC用于同名計算機的PDP-11處理器(圖10),這個在16位處理器時代的天之驕子沒有跟上時代的步伐(當(dāng)時英特爾的X86構(gòu)架也處于起步階段);再如著名的Motorola 68000(圖11),它是一款16/32位處理器,明顯比PDP-11(當(dāng)然也吸取了很多PDP-11構(gòu)架的優(yōu)點)要先進不少,不過它的誕生要比英特爾的8086晚了兩年。
X86是英特爾、AMD乃至VIA采用的復(fù)雜指令集構(gòu)架,后期英特爾為了在64位上先人一步,推出了并不兼容X86的IA-64構(gòu)架(由英特爾和HP共同開發(fā)設(shè)計),同樣也是復(fù)雜指令集下的產(chǎn)物。只不過,步伐邁得太大了——IA-64并不兼容X86的32位,只能靠模擬器的方式執(zhí)行32位程序,因此只在安騰(Itanium處理器)上使用(圖12)。
現(xiàn)在通常講的X86,其實準(zhǔn)確的稱呼應(yīng)該是X86-64,它是基于X86架構(gòu)的64位拓展,且兼容于16位及32位的X86架構(gòu)。X64于1999年由AMD設(shè)計,AMD首次公開64位集以擴展給X86,稱為“AMD64”,用于K8處理器(圖13)。其后英特爾也開發(fā)了自己基于X86的64位的指令集——英特爾 64,只是在微軟的壓力下,基本上是完全兼容AMD64的。
甚至包括VIA也推出過X86-64構(gòu)架,實際上它們都大同小異?,F(xiàn)如今,我們只是習(xí)慣性的把各家的X86-64構(gòu)架統(tǒng)一簡稱為X86了,而它們依然都是屬于復(fù)雜指令集下的產(chǎn)物。
2精簡指令集代表隊
現(xiàn)在來看看精簡指令集的家族,相比于復(fù)雜指令集,精簡指令集下的各種構(gòu)架著實讓人眼花繚亂,它們各有各的特點,我們不妨一起來看看。
● DEC Alpha
DEC Alpha(圖14),或者稱之為Alpha AXP,這是一種基于精簡指令集的64位處理器構(gòu)架。最初是由大名鼎鼎的DEC公司制造,并且用于自家的工作站和服務(wù)器中。一般而言,很少有微軟的操作系統(tǒng)支持X86之外的處理器構(gòu)架,但是這款DEC Alpha可不一般——微軟為DEC Alpha提供了支持,從Windows NT 4.0SP6開始直至Windows 2000 Beta3才放棄。
之所以放棄,是因為DEC Alpha命運多舛,1998年,康柏收購了DEC公司,命運按理應(yīng)該交由康柏。然而同一年,康柏將DEC Alpha賣給了英特爾,而且康柏自身也在這個時期被惠普收購。由此,DEC Alpha想要繼續(xù)發(fā)展顯然不現(xiàn)實,雖然一直持續(xù)開發(fā),但是支持越來越少,2004年DEC Alpha被徹底放棄,走入歷史。
● SPARC
SPARC的全稱為可擴展處理器架構(gòu)(ScalableProcessor ARChitecture),它也是歸屬于精簡指令集架構(gòu)的產(chǎn)品,由SUN公司于1985年設(shè)計(圖15)。SPARC為了能夠擴展生態(tài),開放了自己的構(gòu)架標(biāo)準(zhǔn),授權(quán)了很多企業(yè)一同開發(fā),例如德州儀器、Cypress半導(dǎo)體、富士通等等。
SPARC的誕生,歸根結(jié)底是為了SUN公司的工作站使用(包括服務(wù)器),與之配套的系統(tǒng)Solaris也是為SPARC而生。除此之外,包括NeXTSTEP、Linux、FreeBSD、OpenBSD及NetBSD系統(tǒng)也提供有SPARC的專用版本。
但是,因為應(yīng)用領(lǐng)域過窄,SPARC構(gòu)架在2017年9月1日被甲骨文公司(SUN被甲骨文收購)停止開發(fā)。
● MIPS
當(dāng)前在精簡指令集領(lǐng)域,ARM構(gòu)架無疑是最成功的,但是還有一個構(gòu)架也極具競爭力,它就是M I P S。1981年,斯坦福大學(xué)教授約翰·軒尼詩領(lǐng)導(dǎo)他的團隊研發(fā)出第一個MIPS架構(gòu)的處理器(圖16)。MIPS的意思是“無內(nèi)部互鎖流水級的微處理器”(Microprocessor without interlocked piped stages),其機制是盡量利用軟件辦法避免流水線中的數(shù)據(jù)相關(guān)問題。
不得不說MIPS在當(dāng)時非常先進,它的出現(xiàn)極大的影響了其他精簡指令集構(gòu)架,在2010年前后其發(fā)展提速明顯,比如在傳統(tǒng)的整數(shù)浮點應(yīng)用指令基礎(chǔ)上逐步增加了多線程、DSP模塊、SIMD模塊以及虛擬化模塊。這也與移動互聯(lián)網(wǎng)應(yīng)用的迅速發(fā)展時間相吻合,隨著應(yīng)用需求變化,MIPS指令集以及架構(gòu)也在迅速發(fā)展。只不過它的競爭力始終差A(yù)RM一點,MIPS多數(shù)的歸屬是工控領(lǐng)域、嵌入式領(lǐng)域。
時間來到2021年,MIPS的最終一曲上演,MIPS的構(gòu)架將不再繼續(xù)開發(fā),主要力量投入到了RISC-V的開發(fā)中,一代英豪就此落幕。
● ARM
ARM的全稱為高級精簡指令集機器(Advanced RISCMachine,最早被稱之為艾康精簡指令集機器,Acorn RISCMachine),早期的ARM構(gòu)架處理器廣泛應(yīng)用于嵌入式系統(tǒng)設(shè)計(圖17),而且由于它具備良好的節(jié)能特性,也在其他領(lǐng)域大有作為——比如我們現(xiàn)在的移動通訊領(lǐng)域,已經(jīng)完全是ARM構(gòu)架的天下了。畢竟,它兼具低成本、高性能、低耗電的特性,這是其他構(gòu)架無法提供的。
從2005年開始,全世界98%的智能手機和平板電腦(圖18)、90%以上的硬盤驅(qū)動器,40%以上的數(shù)字電視機頂盒,15%的微控制器以及20%的移動電腦,都是基于ARM架構(gòu)的產(chǎn)物。
大家都知道蘋果2020年推出M1芯片并應(yīng)用到電腦設(shè)備上,而且性能極為強大。殊不知這不是蘋果第一次嘗試ARM架構(gòu)的產(chǎn)品應(yīng)用于電腦產(chǎn)品上。在1980年代晚期,蘋果電腦就和艾康電腦(ARM構(gòu)架的擁有者)合作開發(fā)新版的ARM核心。甚至由于這個項目的重要性,艾康電腦在1990年將其設(shè)計團隊單獨成立了一個名為安謀國際科技(Advanced RISC MachinesLtd.)的新公司。這也解釋了為什么ARM會被解讀成AdvancedRISC Machine的根本原因。
不止如此,復(fù)雜指令集的代表者,X86構(gòu)架的最重要成員英特爾,早年也擁有基于ARM架構(gòu)的處理器產(chǎn)品:XScale處理器(圖19)。它是英特爾公司始于ARM v5TE處理器發(fā)展的產(chǎn)品,前身為StrongARM,性能功耗比十分優(yōu)秀,諸多PDA(掌上電腦)和基于Windows Mobile的手機都是采用XScale處理器的。
只不過,英特爾最終犯了戰(zhàn)略性錯誤,固執(zhí)的認(rèn)為復(fù)雜指令集的X86構(gòu)架經(jīng)過改良設(shè)計一樣可以用于移動端,同時為了減輕開發(fā)負(fù)擔(dān)(主要是成本),最終將其出售給了Marvell公司,至此英特爾也錯過了后來智能移動設(shè)備大爆發(fā)的機會。
3第五代精簡指令集
復(fù)雜指令集和精簡指令集本質(zhì)上是有專利壁壘的,想要開發(fā)一個處理器構(gòu)架,有些專利是不可能繞開的。這就催生了另一個構(gòu)架:RISC-V(圖20),一個基于精簡指令集的開源指令集架構(gòu)(ISA),也就與開源軟件相對應(yīng)的一種“開源硬件”。與其他指令集相比,RISC-V指令集可以自由地用于任何目的,允許任何人設(shè)計、制造和銷售RISC-V芯片、軟件,而不必支付給任何公司專利費。注意,RSIC-V基金會中的V并非是英文字母“V”,而是羅馬字母“5”,意為第五代精簡指令集。
⒇
(21)
目前,RISC-V的前景最被看好,而且已經(jīng)開始逐漸實用化,包括嵌入式系統(tǒng),移動設(shè)備等,都有RISC-V指令集的身影。而且令人振奮的是,RISC-V的最高級會員中有多達(dá)10家是中國廠商,包括阿里巴巴(平頭哥)、晶芯科技、成為資本、華為、ICT(中科院計算所)、ISVCAS(中科院軟件所)、ZTE(中興通訊)、賽昉科技、UNISOC(紫光展銳)、希姆計算,陣容十分強大。
不得不說,移動時代,精簡指令集的代表ARM構(gòu)架處理器和復(fù)雜指令集的代表X86構(gòu)架處理器越發(fā)趨同,它們在互相借鑒之中不斷進步,這二者的界限已經(jīng)開始變得模糊起來了。
1制程工藝
ARM構(gòu)架處理器的制程工藝要領(lǐng)先X86構(gòu)架處理器至少一代以上,根本原因在于ARM構(gòu)架處理器大多的應(yīng)用設(shè)備體積有限,芯片必須采用更為先進的制程工藝才能滿足功耗、性能的平衡。目前,ARM構(gòu)架處理器普遍使用5nm至7nm制程工藝制造,這樣才可以裝進手機、平板電腦這一類空間極為有限的設(shè)備中;而X86構(gòu)架處理器一般都應(yīng)用在筆記本電腦、臺式機電腦上,功耗和散熱的要求相比要“低”不少,一般而言7nm至10nm,甚至1xnm的制程工藝就可以應(yīng)對了。
2異構(gòu)計算
ARM架構(gòu)處理器的異構(gòu)計算曾經(jīng)是一大殺手锏,性能核與功效核這樣的big.LITTLE架構(gòu)(圖21)設(shè)計很好的兼顧了耗電、性能之間的平衡。比如當(dāng)手機常規(guī)運行時,只需要低功耗的小核心運行即可保證,當(dāng)你運行一款復(fù)雜的游戲時,性能核心將全力工作。
但是,異構(gòu)計算大小核的設(shè)計現(xiàn)在已經(jīng)不是ARM構(gòu)架處理器的獨有技術(shù)了,包括英特爾在內(nèi)的X86處理器廠商也開始使用了這種異構(gòu)設(shè)計思路,例如最新的12代酷睿處理器,也同樣分為性能核與功耗核,用以應(yīng)對不同使用場景??梢姡S著技術(shù)的發(fā)展,二者的界限正在變得模糊。
3性能和耗電
隨著搭載M1芯片的蘋果筆記本電腦上市,仿佛ARM構(gòu)架處理器的絕對性能已經(jīng)和X86構(gòu)架處理器平起平坐了,實際上并非如此。M1處理器的獨特之處在于片上緩存,這個獨特的設(shè)計極大的提升了數(shù)據(jù)的傳輸速度,另一方面,蘋果有針對性的對特定應(yīng)用方向進行了深度優(yōu)化設(shè)計。用一個不太恰當(dāng)?shù)闹卑捉忉屖?,M1處理器的定向優(yōu)化能力非常優(yōu)秀,這也讓搭載了M1處理器的蘋果筆記本電腦在部分應(yīng)用上表現(xiàn)甚至可以與X86構(gòu)架的旗艦處理器一較高低(圖22),當(dāng)然,這也和macOS與Windows操作系統(tǒng)對硬件資源調(diào)用的邏輯差異有關(guān)系。但是在沒有被“定向優(yōu)化”到地方,表現(xiàn)自然不可能與X86構(gòu)架處理器相提并論。
然而,在更為復(fù)雜的應(yīng)用上,X86構(gòu)架處理器的優(yōu)勢短時間內(nèi)是無可取代的。最關(guān)鍵的一點在于ARM架構(gòu)處理器的亂序執(zhí)行能力遠(yuǎn)不及X86架構(gòu)處理器。比如電腦在操作的時候多是隨機且不可預(yù)測的,X86構(gòu)架處理器在這方面就加強了亂序指令執(zhí)行的能力,而且,X86構(gòu)架還有一個特點就是單核心雙線程的設(shè)計,讓其在處理亂序指令的時候效率更高。但是,這樣的缺點也顯而易見,那就是隨時都要準(zhǔn)備著應(yīng)對亂序指令的執(zhí)行,因此它的耗電量也比較大(圖23)。
而ARM構(gòu)架處理器在執(zhí)行確定次序的執(zhí)行指令,例如前后幀關(guān)聯(lián)明顯的視頻處理時效率很高,而且可以更好地進行多核心協(xié)同處理而不是依靠單一線程來執(zhí)行,可以快速將不需要的處理線程轉(zhuǎn)入“待機”模式,耗電自然就更少。比如說手機使用的ARM處理器芯片和用于電腦的M1芯片,一般都是片上系統(tǒng)結(jié)構(gòu)(SOC),也就是一塊芯片上集成了多個功能模塊(圖24)。這些模塊哪一個功做哪一個不工作?對于移動端設(shè)備來說很好判斷,通過軟件層就可以實現(xiàn)對它們單獨控制,由此,時下不需要工作的模塊大可以“關(guān)閉”讓其待命,自然耗電就少了許多。
(24)
這是一個老生常談的問題,短期來看,ARM構(gòu)架處理器將在移動端繼續(xù)保持優(yōu)勢地位,而在筆記本電腦和臺式機電腦,乃至服務(wù)器端,X86構(gòu)架處理器依舊是不可替代的存在;而從中期來看,ARM構(gòu)架處理器和X86構(gòu)架處理器在設(shè)計上會進一步趨同,相似的設(shè)計會越來越多,某種程度的融合不可避免;長期來看,ARM構(gòu)架處理器的地位有可能被沒有專利壁壘的RISC-V構(gòu)架處理器替代,并且后者與X86構(gòu)架處理器的差異進一步融合。但是,兩種指令集下的產(chǎn)物,依舊會有一條清晰的界限。