OverLord

處理器,其實全稱應該是中央處理單元——Central Processing Unit(簡稱CPU),它是電腦最為核心的部件,功能主要是解釋并翻譯電腦的指令指令,處理軟件運行時產生的數據(圖2)。在1970年以前,處理器其實是由多個獨立單元構成的,比如整數運算單元、浮點運算單元、寄存器。后來隨著大規模集成電路制造技術的發展,處理器各單元部件可以合并起來,這種高度收縮后的產物就是微處理器,這也就解釋了為什么電腦早期被稱作“微型計算機”。

處理器最核心的三個部分是運算器、控制器、寄存器三部分,GPU圖形處理器并不算在內。一如其名,運算單元負責計算,控制器則負責發出處理器每條指令所需要的信息,寄存器相當于一個臨時中轉站,負責將運算的結果或者發出的指令暫存再傳遞給下一個工序(如內存、硬盤),這樣可以保證更高的運算速度。
那么,處理器在計算的時候,又是如何工作的呢?這就要從處理器的構架談起了。
(微型)處理器的開端并不是像今天這樣X86、ARM為主,實際上是百花齊放,還有MIPS和IA64等等很多架構、指令集,它們之間的差異非常之大。當然我們今天說的X86,實際上也已經是X86的衍生構架X86-64,即64bit extended(64位元擴展架構)。
我們將這些構架往后放放,先從最基本的邏輯角度分類。它們統歸兩大類,分別為“復雜指令集”和“精簡指令集”,也就是“CISC”與“RISC”(圖3)。如果現在就做個總結,X86屬于復雜指令集產物,ARM則屬于精簡指令集產物。
復雜指令集,即Complex Instruction SetComputers,究竟什么是“復雜指令集”呢?我們直白一點來解讀:以最簡單的乘法計算指令為例,當計算時,復雜指令集會調用內存A和內存B中的兩個數據相乘,然后將結果存儲至內存A中(圖4),當然,這需要多個處理器的時鐘周期才可以完成,也就是我們所說的IPC(每周期指令,instructions per cycle)。

精簡指令集,即Reduced Instruction SetComputers,和復雜指令集的差異在于,同樣的乘法指令,精簡指令集在執行計算的時候,需調用四個處理器周期指令完成乘法的計算,即分別將內存A數據加載到寄存器,內存B數據加載到寄存器之中,然后調用兩個寄存器中的數據進行乘法計算,寄存結果最終存入內存A。另外RISC架構的設備通常也比較簡潔,這也是可以用來識別的一個特色(圖5)。
這兩種方式最大的差異是,復雜指令集對單多數指令使用率低卻增加了處理器的復雜度,指令是可變長格式,而精簡指令集多為單周期指令,指令長度是固定的,操作寄存器時至需要讀取、存儲的操作即可。一個微程序包含若干條微指令(也稱微碼),執行復雜指令時實際上相當于運行一個微小的程序。正因如此,同樣一個計算指令,復雜指令集一旦開始就必須執行完畢才可以,而精簡指令集可以隨時“叫停”,打斷計算過程(圖6)。

其實,最初只有復雜指令集,但是隨著時間推移,處理器的設計越發復雜,更多的運算指令被放入構架里,比如最初的X86處理器構架只有基本的整數運算指令和浮點運算指令,但是經過長期發展,各種擴展指令集應運而生:例如MMX、SSE、AVX等等,這些擴展指令集是為特定的應用而生。但是,越來越多的指令也讓處理器的功耗節節攀升(圖7)。

如果說功耗還是可以接受或者可以改善的事情,那么,“無效功能設計”就是一個更令人頭疼的問題了——在復雜指令集的處理器中(尤其是現在X 86構架處理器),只有20%左右的指令會經常性調用,大部分指令集只不過是“待命狀態”,很多硬件資源實際是被閑置的(圖8)。

而精簡指令集的特點就是針對復雜指令集設計的,指令集越少、越精為宜,尤其是常用的計算指令,更多的衍生指令則可以依靠這些基礎指令組合來執行,這樣的好處就是功耗有效降低,指令執行更為簡化。不過隨著時間的推移、尤其是現在以ARM為代表的精簡指令集處理器功能越發強大,其指令設計也越發復雜(圖9),二者的區別與界限也開始有了一定程度的重疊。

如果要用一句話來總結,復雜指令集的指令集非常豐富,重點在于“軟件硬件化”,對于軟件開發者非常友善,但硬件的設計過于復雜;而精簡指令集正好相反,屬于“硬件軟化”,編譯器等軟件的設計要求較高,編譯后的程序體積也比較大,但是處理器的開發難度大為降低,成本自然也要低廉許多(相對于復雜指令集的處理器產品)。
目前,復雜指令集的處理器代表,主要是X86(X86-64)構架,如英特爾和AMD主要處理器產品的構架、我國的兆芯,以及已經消失或走出主流的Cyrix、VIA、IDT等公司的全部或部分處理器架構;而精簡指令集則更為龐雜,典型構架包括DEC Alpha、ARC、ARM、AVR、MIPS、PA-RISC、RISC-V、PowerArchitecture(PowerPC)和SPARC(部分未延續至當前)等等。
1復雜指令集代表隊
剛剛筆者提到,復雜指令集目前的代表主要集中在X86構架上,實際上,早先還有兩個類別的復雜指令集構架,只不過他們在競爭的大潮下因為各種各樣的原因停止了前進的步伐。比如DEC用于同名計算機的PDP-11處理器(圖10),這個在16位處理器時代的天之驕子沒有跟上時代的步伐(當時英特爾的X86構架也處于起步階段);再如著名的Motorola 68000(圖11),它是一款16/32位處理器,明顯比PDP-11(當然也吸取了很多PDP-11構架的優點)要先進不少,不過它的誕生要比英特爾的8086晚了兩年。

X86是英特爾、AMD乃至VIA采用的復雜指令集構架,后期英特爾為了在64位上先人一步,推出了并不兼容X86的IA-64構架(由英特爾和HP共同開發設計),同樣也是復雜指令集下的產物。只不過,步伐邁得太大了——IA-64并不兼容X86的32位,只能靠模擬器的方式執行32位程序,因此只在安騰(Itanium處理器)上使用(圖12)。

現在通常講的X86,其實準確的稱呼應該是X86-64,它是基于X86架構的64位拓展,且兼容于16位及32位的X86架構。X64于1999年由AMD設計,AMD首次公開64位集以擴展給X86,稱為“AMD64”,用于K8處理器(圖13)。其后英特爾也開發了自己基于X86的64位的指令集——英特爾 64,只是在微軟的壓力下,基本上是完全兼容AMD64的。

甚至包括VIA也推出過X86-64構架,實際上它們都大同小異。現如今,我們只是習慣性的把各家的X86-64構架統一簡稱為X86了,而它們依然都是屬于復雜指令集下的產物。
2精簡指令集代表隊
現在來看看精簡指令集的家族,相比于復雜指令集,精簡指令集下的各種構架著實讓人眼花繚亂,它們各有各的特點,我們不妨一起來看看。
● DEC Alpha
DEC Alpha(圖14),或者稱之為Alpha AXP,這是一種基于精簡指令集的64位處理器構架。最初是由大名鼎鼎的DEC公司制造,并且用于自家的工作站和服務器中。一般而言,很少有微軟的操作系統支持X86之外的處理器構架,但是這款DEC Alpha可不一般——微軟為DEC Alpha提供了支持,從Windows NT 4.0SP6開始直至Windows 2000 Beta3才放棄。
之所以放棄,是因為DEC Alpha命運多舛,1998年,康柏收購了DEC公司,命運按理應該交由康柏。然而同一年,康柏將DEC Alpha賣給了英特爾,而且康柏自身也在這個時期被惠普收購。由此,DEC Alpha想要繼續發展顯然不現實,雖然一直持續開發,但是支持越來越少,2004年DEC Alpha被徹底放棄,走入歷史。
● SPARC
SPARC的全稱為可擴展處理器架構(ScalableProcessor ARChitecture),它也是歸屬于精簡指令集架構的產品,由SUN公司于1985年設計(圖15)。SPARC為了能夠擴展生態,開放了自己的構架標準,授權了很多企業一同開發,例如德州儀器、Cypress半導體、富士通等等。

SPARC的誕生,歸根結底是為了SUN公司的工作站使用(包括服務器),與之配套的系統Solaris也是為SPARC而生。除此之外,包括NeXTSTEP、Linux、FreeBSD、OpenBSD及NetBSD系統也提供有SPARC的專用版本。
但是,因為應用領域過窄,SPARC構架在2017年9月1日被甲骨文公司(SUN被甲骨文收購)停止開發。
● MIPS
當前在精簡指令集領域,ARM構架無疑是最成功的,但是還有一個構架也極具競爭力,它就是M I P S。1981年,斯坦福大學教授約翰·軒尼詩領導他的團隊研發出第一個MIPS架構的處理器(圖16)。MIPS的意思是“無內部互鎖流水級的微處理器”(Microprocessor without interlocked piped stages),其機制是盡量利用軟件辦法避免流水線中的數據相關問題。

不得不說MIPS在當時非常先進,它的出現極大的影響了其他精簡指令集構架,在2010年前后其發展提速明顯,比如在傳統的整數浮點應用指令基礎上逐步增加了多線程、DSP模塊、SIMD模塊以及虛擬化模塊。這也與移動互聯網應用的迅速發展時間相吻合,隨著應用需求變化,MIPS指令集以及架構也在迅速發展。只不過它的競爭力始終差ARM一點,MIPS多數的歸屬是工控領域、嵌入式領域。
時間來到2021年,MIPS的最終一曲上演,MIPS的構架將不再繼續開發,主要力量投入到了RISC-V的開發中,一代英豪就此落幕。
● ARM
ARM的全稱為高級精簡指令集機器(Advanced RISCMachine,最早被稱之為艾康精簡指令集機器,Acorn RISCMachine),早期的ARM構架處理器廣泛應用于嵌入式系統設計(圖17),而且由于它具備良好的節能特性,也在其他領域大有作為——比如我們現在的移動通訊領域,已經完全是ARM構架的天下了。畢竟,它兼具低成本、高性能、低耗電的特性,這是其他構架無法提供的。
從2005年開始,全世界98%的智能手機和平板電腦(圖18)、90%以上的硬盤驅動器,40%以上的數字電視機頂盒,15%的微控制器以及20%的移動電腦,都是基于ARM架構的產物。

大家都知道蘋果2020年推出M1芯片并應用到電腦設備上,而且性能極為強大。殊不知這不是蘋果第一次嘗試ARM架構的產品應用于電腦產品上。在1980年代晚期,蘋果電腦就和艾康電腦(ARM構架的擁有者)合作開發新版的ARM核心。甚至由于這個項目的重要性,艾康電腦在1990年將其設計團隊單獨成立了一個名為安謀國際科技(Advanced RISC MachinesLtd.)的新公司。這也解釋了為什么ARM會被解讀成AdvancedRISC Machine的根本原因。
不止如此,復雜指令集的代表者,X86構架的最重要成員英特爾,早年也擁有基于ARM架構的處理器產品:XScale處理器(圖19)。它是英特爾公司始于ARM v5TE處理器發展的產品,前身為StrongARM,性能功耗比十分優秀,諸多PDA(掌上電腦)和基于Windows Mobile的手機都是采用XScale處理器的。

只不過,英特爾最終犯了戰略性錯誤,固執的認為復雜指令集的X86構架經過改良設計一樣可以用于移動端,同時為了減輕開發負擔(主要是成本),最終將其出售給了Marvell公司,至此英特爾也錯過了后來智能移動設備大爆發的機會。
3第五代精簡指令集
復雜指令集和精簡指令集本質上是有專利壁壘的,想要開發一個處理器構架,有些專利是不可能繞開的。這就催生了另一個構架:RISC-V(圖20),一個基于精簡指令集的開源指令集架構(ISA),也就與開源軟件相對應的一種“開源硬件”。與其他指令集相比,RISC-V指令集可以自由地用于任何目的,允許任何人設計、制造和銷售RISC-V芯片、軟件,而不必支付給任何公司專利費。注意,RSIC-V基金會中的V并非是英文字母“V”,而是羅馬字母“5”,意為第五代精簡指令集。

⒇

(21)
目前,RISC-V的前景最被看好,而且已經開始逐漸實用化,包括嵌入式系統,移動設備等,都有RISC-V指令集的身影。而且令人振奮的是,RISC-V的最高級會員中有多達10家是中國廠商,包括阿里巴巴(平頭哥)、晶芯科技、成為資本、華為、ICT(中科院計算所)、ISVCAS(中科院軟件所)、ZTE(中興通訊)、賽昉科技、UNISOC(紫光展銳)、希姆計算,陣容十分強大。
不得不說,移動時代,精簡指令集的代表ARM構架處理器和復雜指令集的代表X86構架處理器越發趨同,它們在互相借鑒之中不斷進步,這二者的界限已經開始變得模糊起來了。
1制程工藝
ARM構架處理器的制程工藝要領先X86構架處理器至少一代以上,根本原因在于ARM構架處理器大多的應用設備體積有限,芯片必須采用更為先進的制程工藝才能滿足功耗、性能的平衡。目前,ARM構架處理器普遍使用5nm至7nm制程工藝制造,這樣才可以裝進手機、平板電腦這一類空間極為有限的設備中;而X86構架處理器一般都應用在筆記本電腦、臺式機電腦上,功耗和散熱的要求相比要“低”不少,一般而言7nm至10nm,甚至1xnm的制程工藝就可以應對了。
2異構計算
ARM架構處理器的異構計算曾經是一大殺手锏,性能核與功效核這樣的big.LITTLE架構(圖21)設計很好的兼顧了耗電、性能之間的平衡。比如當手機常規運行時,只需要低功耗的小核心運行即可保證,當你運行一款復雜的游戲時,性能核心將全力工作。
但是,異構計算大小核的設計現在已經不是ARM構架處理器的獨有技術了,包括英特爾在內的X86處理器廠商也開始使用了這種異構設計思路,例如最新的12代酷睿處理器,也同樣分為性能核與功耗核,用以應對不同使用場景。可見,隨著技術的發展,二者的界限正在變得模糊。
3性能和耗電
隨著搭載M1芯片的蘋果筆記本電腦上市,仿佛ARM構架處理器的絕對性能已經和X86構架處理器平起平坐了,實際上并非如此。M1處理器的獨特之處在于片上緩存,這個獨特的設計極大的提升了數據的傳輸速度,另一方面,蘋果有針對性的對特定應用方向進行了深度優化設計。用一個不太恰當的直白解釋是,M1處理器的定向優化能力非常優秀,這也讓搭載了M1處理器的蘋果筆記本電腦在部分應用上表現甚至可以與X86構架的旗艦處理器一較高低(圖22),當然,這也和macOS與Windows操作系統對硬件資源調用的邏輯差異有關系。但是在沒有被“定向優化”到地方,表現自然不可能與X86構架處理器相提并論。
然而,在更為復雜的應用上,X86構架處理器的優勢短時間內是無可取代的。最關鍵的一點在于ARM架構處理器的亂序執行能力遠不及X86架構處理器。比如電腦在操作的時候多是隨機且不可預測的,X86構架處理器在這方面就加強了亂序指令執行的能力,而且,X86構架還有一個特點就是單核心雙線程的設計,讓其在處理亂序指令的時候效率更高。但是,這樣的缺點也顯而易見,那就是隨時都要準備著應對亂序指令的執行,因此它的耗電量也比較大(圖23)。

而ARM構架處理器在執行確定次序的執行指令,例如前后幀關聯明顯的視頻處理時效率很高,而且可以更好地進行多核心協同處理而不是依靠單一線程來執行,可以快速將不需要的處理線程轉入“待機”模式,耗電自然就更少。比如說手機使用的ARM處理器芯片和用于電腦的M1芯片,一般都是片上系統結構(SOC),也就是一塊芯片上集成了多個功能模塊(圖24)。這些模塊哪一個功做哪一個不工作?對于移動端設備來說很好判斷,通過軟件層就可以實現對它們單獨控制,由此,時下不需要工作的模塊大可以“關閉”讓其待命,自然耗電就少了許多。

(24)
這是一個老生常談的問題,短期來看,ARM構架處理器將在移動端繼續保持優勢地位,而在筆記本電腦和臺式機電腦,乃至服務器端,X86構架處理器依舊是不可替代的存在;而從中期來看,ARM構架處理器和X86構架處理器在設計上會進一步趨同,相似的設計會越來越多,某種程度的融合不可避免;長期來看,ARM構架處理器的地位有可能被沒有專利壁壘的RISC-V構架處理器替代,并且后者與X86構架處理器的差異進一步融合。但是,兩種指令集下的產物,依舊會有一條清晰的界限。