是否存在足夠“通用”的處理器,在性能快速提升的同時(shí),還能夠“包治百病”?
編者按
John Hennessy和David Patterson是體系結(jié)構(gòu)領(lǐng)域的權(quán)威,兩人在其2017年圖靈獎(jiǎng)獲獎(jiǎng)演講時(shí)說(shuō),未來(lái)十年是體系機(jī)構(gòu)的黃金年代,在CPU性能達(dá)到瓶頸的情況下,需要針對(duì)特定的領(lǐng)域定制專(zhuān)用處理器,這也就是當(dāng)前大家熟悉的DSA(Domain Specific Architecture,特定領(lǐng)域架構(gòu))。隨后,還專(zhuān)門(mén)寫(xiě)了專(zhuān)業(yè)的論文詳細(xì)論證此事(見(jiàn)參考文獻(xiàn))。
那么,反向的思考,是否存在足夠“通用”的處理器,能夠按照摩爾定律,在性能快速提升的同時(shí),依然能夠“包治百病”,盡可能滿足眾多客戶(hù)的當(dāng)前和未來(lái)一定時(shí)期的需求?
一、從歷史中汲取靈感
1.1 RISC架構(gòu)的興起
在上世紀(jì)七十年代到八十年代初,因?yàn)榱魉€等技術(shù)的應(yīng)用,CPU速度提升非常之快,而內(nèi)存的容量和速度相對(duì)落后。通過(guò)不定長(zhǎng)的指令格式能夠提供更高的代碼密度,同樣大小內(nèi)存空間能裝載更多指令,從而間接的提高運(yùn)行速度。并且,這時(shí)候的編譯器能力比較有限,編譯器很難做到CPU寄存器的合理利用,也無(wú)法針對(duì)微架構(gòu)的具體特征進(jìn)行深層次的性能優(yōu)化,這就使得CPU的設(shè)計(jì)師們偏愛(ài)直接內(nèi)存-內(nèi)存以及寄存器-內(nèi)存風(fēng)格的指令執(zhí)行模式。這些都是典型的復(fù)雜指令集(CISC)的特征。
這一時(shí)期,幾乎所有的處理器設(shè)計(jì)都在按照CISC的路線發(fā)展,并且走向一個(gè)極端:不斷加入新的指令,試圖在指令集架構(gòu)層面對(duì)高層編程語(yǔ)言提供更直接有效的支持,等等。這種發(fā)展路線使得硬件復(fù)雜度快速飛升,研發(fā)成本不斷提高,研發(fā)周期變長(zhǎng),而編譯器也難以利用這越來(lái)越復(fù)雜的指令集。
隨后,RISC架構(gòu)興起。來(lái)自IBM的John Cocke認(rèn)為,更加精簡(jiǎn)清爽的指令集設(shè)計(jì)將有助于減少硬件開(kāi)發(fā)難度和成本,同時(shí)也有利于編譯器進(jìn)行代碼優(yōu)化工作。當(dāng)時(shí)在在伯克利任教的David Patterson,與其學(xué)生們的成果在1983年國(guó)際固態(tài)電子電路大會(huì)(ISSCC)進(jìn)行展示。盡管制造工藝?yán)吓f,主頻比DEC、摩托羅拉、Intel等競(jìng)爭(zhēng)對(duì)手同期制造的處理器慢上幾乎一半,晶體管數(shù)量也只有幾分之一,但是更加清爽的新式設(shè)計(jì)在編譯器等其他工具的輔助下竟然將來(lái)自工業(yè)界的競(jìng)爭(zhēng)對(duì)手們盡數(shù)擊敗。
RISC架構(gòu)處理器提倡簡(jiǎn)化指令集設(shè)計(jì)、固定指令長(zhǎng)度、統(tǒng)一指令編碼格式、加速常用指令。這在當(dāng)時(shí)來(lái)看,與占據(jù)主流的CISC設(shè)計(jì)風(fēng)格背道而馳。但RISC陣營(yíng)的David Patterson有了流片成功的芯片與硬件測(cè)試結(jié)果在手,加之1983年的ISSCC大會(huì)上聚集了幾位與David Patterson觀點(diǎn)相同的支持者,RISC流派開(kāi)始逐步占據(jù)上風(fēng)。
CISC ISA呈現(xiàn)出符合“二八定律”的特征:80%的指令很少被使用,只有20%的指令經(jīng)常用到。RISC針對(duì)這20%的指令集,進(jìn)行重組、優(yōu)化和加速,另外80%指令通過(guò)這20%簡(jiǎn)單指令的組合來(lái)完成,性能反而高于CISC。我們無(wú)意于介紹CISC和RISC的歷史恩怨,之后的情況是:兩種理念的ISA也是相互借鑒相互融合,逐步形成了現(xiàn)在的x86、ARM和RISC-v三強(qiáng)競(jìng)爭(zhēng)的局面。
1.2 從微服務(wù)到云計(jì)算服務(wù)分層
最開(kāi)始,所有的應(yīng)用都是單塊“巨”應(yīng)用系統(tǒng)。企業(yè)應(yīng)用系統(tǒng)經(jīng)常包含三個(gè)主要部分:客戶(hù)端用戶(hù)界面、數(shù)據(jù)庫(kù)和服務(wù)端應(yīng)用系統(tǒng)。漸漸地,特別是隨著越來(lái)越多的應(yīng)用系統(tǒng)正被部署到云端,軟件變更受到了很大的限制:應(yīng)用系統(tǒng)中一個(gè)很小部分的一處變更,也需要將整個(gè)單塊應(yīng)用系統(tǒng)進(jìn)行重新構(gòu)建和部署;單塊應(yīng)用逐漸難以保持一個(gè)良好的模塊化結(jié)構(gòu),當(dāng)對(duì)系統(tǒng)進(jìn)行擴(kuò)展時(shí),不得不擴(kuò)展整個(gè)應(yīng)用系統(tǒng),而不能僅擴(kuò)展該系統(tǒng)中需要更多資源的那些部分。
這些問(wèn)題催生出了微服務(wù)架構(gòu)風(fēng)格:以構(gòu)建一組小型服務(wù)的方式來(lái)構(gòu)建應(yīng)用系統(tǒng)。除了這些服務(wù)能被獨(dú)立地部署和擴(kuò)展之外,每一個(gè)服務(wù)還能提供一個(gè)穩(wěn)固的模塊邊界,甚至能允許使用不同的編程語(yǔ)言來(lái)編寫(xiě)不同的服務(wù)。并且,這些服務(wù)也能被不同的團(tuán)隊(duì)來(lái)管理。
微服務(wù)的方式,很好地把一個(gè)完整的應(yīng)用系統(tǒng)拆分成用戶(hù)關(guān)心的應(yīng)用核心本身,以及其他一些輔助的服務(wù),如:
- 基礎(chǔ)設(shè)施服務(wù),比如VM、容器、網(wǎng)絡(luò)、存儲(chǔ)、安全等;
- 中間件層服務(wù),如負(fù)載均衡、數(shù)據(jù)庫(kù)、文件系統(tǒng)、訪問(wèn)控制、消息隊(duì)列、物聯(lián)網(wǎng)接入平臺(tái)等。
“一切皆服務(wù)”,當(dāng)從微服務(wù)的視角,云計(jì)算是由不同的服務(wù)組成的分層服務(wù)體系:每一層就是一個(gè)服務(wù)族,然后不同層次的服務(wù)族組成整個(gè)云計(jì)算服務(wù)體系,這就是我們所熟悉的云計(jì)算三層服務(wù)IaaS、PaaS和SaaS。更詳細(xì)的軟件堆棧如上圖所示,從非云系統(tǒng)所有的“服務(wù)”堆棧都需要用戶(hù)自己擁有并維護(hù),經(jīng)過(guò)IaaS、CaaS、PaaS、FaaS,再到最后的SaaS,一切都由供應(yīng)商運(yùn)營(yíng)維護(hù)。從左到右的過(guò)程,就是“服務(wù)”堆棧的下層layer不斷的由云運(yùn)營(yíng)商接管的過(guò)程。
這也是一個(gè)鮮明的“二八定律”案例:80%的任務(wù)由云運(yùn)營(yíng)商負(fù)責(zé),20%的任務(wù)由用戶(hù)負(fù)責(zé);站在用戶(hù)的角度,20%自己負(fù)責(zé)的任務(wù)價(jià)值占到80%,而運(yùn)營(yíng)商負(fù)責(zé)的部分只占到到20%的價(jià)值。
1.3 結(jié)論:“二八定律”在發(fā)生作用
二八定律(也稱(chēng)80/20法則、關(guān)鍵少數(shù)法則、帕累托法則),起源于意大利經(jīng)濟(jì)學(xué)家維弗雷多·帕累托在洛桑大學(xué)注意到了80/20的聯(lián)系,于他的文章《政治經(jīng)濟(jì)學(xué)》中說(shuō)明了該現(xiàn)象,例如:意大利約有80%的土地由20%的人口所有、80%的豌豆產(chǎn)量來(lái)自20%的植株等等。該原則在現(xiàn)今企業(yè)管理中廣泛運(yùn)用。
回到計(jì)算機(jī)領(lǐng)域,二八定律也是一個(gè)常見(jiàn)的規(guī)律:
- CISC指令太過(guò)冗繁,只有20%的指令經(jīng)常用到,而另外80%的指令則較少用到。所以,RISC就只保留常見(jiàn)的20%的簡(jiǎn)單指令。
- 一個(gè)應(yīng)用系統(tǒng),完全不同的只是應(yīng)用的核心部分(大約占20%),其他的如網(wǎng)絡(luò)訪問(wèn)、存儲(chǔ)盤(pán)、文件系統(tǒng),也包括數(shù)據(jù)庫(kù)、負(fù)載均衡、消息隊(duì)列等(大約占80%)其實(shí)都是用戶(hù)相對(duì)不關(guān)心,并且是眾多應(yīng)用系統(tǒng)都會(huì)用到的組件。
- 云計(jì)算,是一個(gè)由眾多服務(wù)組成服務(wù)分層體系,隨著不斷的抽象封裝,云運(yùn)營(yíng)商不斷接管了80%的眾多服務(wù)分層,而用戶(hù)只需要關(guān)注20%的應(yīng)用和函數(shù)即可。
二、分析一下各類(lèi)處理引擎
2.1 從單位計(jì)算復(fù)雜度的視角
指令是軟件和硬件的媒介,指令的復(fù)雜度(單位計(jì)算密度)決定了系統(tǒng)的軟硬件解耦程度。按照指令的復(fù)雜度,典型的處理器引擎大致分為CPU、協(xié)處理器、GPU、FPGA、DSA、ASIC。任務(wù)在CPU運(yùn)行,則定義為軟件運(yùn)行;任務(wù)在協(xié)處理器、GPU、FPGA、DSA或ASIC運(yùn)行,則定義為硬件加速運(yùn)行。
魚(yú)和熊掌不可兼得,指令復(fù)雜度和編程靈活性是兩個(gè)互反的特征:指令越簡(jiǎn)單,編程靈活性越高,因此我們才說(shuō)軟件有更高的靈活性;指令越復(fù)雜,性能越高,因此而受到的限制越多,只能用于特定領(lǐng)域或場(chǎng)景的應(yīng)用,其軟件靈活性越差。
2.2 從處理器引擎類(lèi)型數(shù)量的視角
常見(jiàn)有六個(gè)主要的處理器引擎類(lèi)型,依據(jù)不同類(lèi)型處理引擎的數(shù)量不同,形成了金字塔形的處理器層次結(jié)構(gòu)(Hierarchy):
- CPU,是最通用的處理器引擎,CPU指令是最基礎(chǔ)的,因此具有最好的靈活性。這一層級(jí)的只有CPU一個(gè)形態(tài)的處理器。
- Coprocessor,是基于CPU的擴(kuò)展指令集的運(yùn)行引擎,如ARM的NEON、Intel的AVX、AMX擴(kuò)展指令集和相應(yīng)的協(xié)處理器。
- GPU,本質(zhì)上是很多小CPU核的并行,因此NP、Graphcore的IPU等都和GPU處于同一層次的處理器類(lèi)型。
- FPGA,從架構(gòu)上來(lái)說(shuō),可以用來(lái)實(shí)現(xiàn)定制的ASIC引擎,但因?yàn)橛布删幊痰哪芰?,可以切換到其他ASIC引擎,具有一定的彈性可編程能力。
- DSA,是接近于ASIC的設(shè)計(jì),但具有一定程度上的可編程。覆蓋的領(lǐng)域和場(chǎng)景比ASIC要大,但依然存在太多的領(lǐng)域需要特定的DSA去覆蓋。
- ASIC,是完全不可編程的定制處理引擎,理論上最復(fù)雜的“指令”以及最高的性能效率。因?yàn)楦采w的場(chǎng)景非常小,因此需要數(shù)量眾多的ASIC處理引擎,才能覆蓋各類(lèi)場(chǎng)景。
為了更加簡(jiǎn)潔的理解六類(lèi)常見(jiàn)的處理引擎的定位和作用,我們兩兩合并,定義三大類(lèi)處理引擎類(lèi)型:
- 基礎(chǔ)設(shè)施層任務(wù)。基礎(chǔ)設(shè)施層的任務(wù)都相對(duì)確定,適合DSA和ASIC處理引擎處理。
- 應(yīng)用層可加速部分任務(wù)?;A(chǔ)設(shè)施層是Vendor負(fù)責(zé)提供,而應(yīng)用層則是給到用戶(hù)應(yīng)用。用戶(hù)的應(yīng)用多種多樣,因此應(yīng)用層的加速也需要一定程度的彈性。這樣,GPU和FPGA就相對(duì)比較合適。
- 應(yīng)用層的不可加速部分。主要是一些通用的處理,如控制以及一些細(xì)粒度的計(jì)算。協(xié)處理器在具體實(shí)現(xiàn)上,是CPU的一部分。因此,CPU(包含協(xié)處理器)可以兼顧常規(guī)的控制處理以及一些計(jì)算任務(wù)。
2.3 從處理器覆蓋場(chǎng)景的視角
“尺有所長(zhǎng),寸有所短”,每個(gè)類(lèi)型的處理器都有自己的優(yōu)勢(shì),也都有自己的劣勢(shì):
- CPU及協(xié)處理器,最好的靈活可編程性,可以用在任何領(lǐng)域和場(chǎng)景。但性能卻是最低。
- GPU及FPGA,較好的軟件或硬件編程能力,覆蓋領(lǐng)域和場(chǎng)景較多,但性能居中無(wú)法極致。
- DSA及ASIC,性能最好。但DSA的可編程性較少,可以覆蓋特定領(lǐng)域;ASIC完全不可編程,只能覆蓋特定領(lǐng)域里的某個(gè)具體場(chǎng)景。
“專(zhuān)業(yè)的人做專(zhuān)業(yè)的事”,通過(guò)CPU + Coprocessor + GPU + FPGA + DSA + ASIC等各種類(lèi)型處理引擎的混合架構(gòu),能夠兼顧性能和靈活性:
- 從宏觀的看,絕大部分計(jì)算是通過(guò)加速完成的,性能有顯著的提升;
- 而從用戶(hù)應(yīng)用的角度,應(yīng)用依然是運(yùn)行在CPU上,跟之前沒(méi)有變化,依然是自己“掌控一切”。
三、設(shè)計(jì)一個(gè)理想的宏處理器
因?yàn)槎硕傻拇嬖冢谡麄€(gè)系統(tǒng)堆棧里,用戶(hù)關(guān)心的那20%的相對(duì)不確定的任務(wù),仍然需要用戶(hù)通過(guò)軟件編程實(shí)現(xiàn);而用戶(hù)不關(guān)心的、每個(gè)用戶(hù)應(yīng)用系統(tǒng)都會(huì)存在的、占80%的這些相對(duì)確定的任務(wù),則適合通過(guò)硬件加速的方式來(lái)實(shí)現(xiàn)。
3.1 當(dāng)前的處理器芯片基本都是“單兵作戰(zhàn)”
處理器芯片是由各類(lèi)處理器引擎組成的,在云計(jì)算數(shù)據(jù)中心,主要有三類(lèi)同構(gòu)處理器芯片。分析如下表所示。
這里我們對(duì)三類(lèi)引擎組成的同構(gòu)處理器進(jìn)行分析:
- CPU是數(shù)據(jù)中心最常見(jiàn)的處理器,但受限于性能瓶頸的原因,目前大家都在“八仙過(guò)海,各顯神通”,通過(guò)各種各樣的優(yōu)化手段,來(lái)努力提升整個(gè)服務(wù)器和數(shù)據(jù)中心的算力。
- GPU在HPC、圖形圖形等領(lǐng)域,有非常大的優(yōu)勢(shì)。近些年,隨著AI的興起,與此同時(shí)AI算法更新很快,這就使得GPU成為AI最合適的處理器,GPU因此大放光彩。
- DSA目前最主要的領(lǐng)域也是在AI,第一款經(jīng)典的DSA處理器是谷歌TPU。目前,受限于AI算法的快速迭代,仍然沒(méi)有DSA處理器的大范圍落地的案例。即使強(qiáng)大如谷歌能從芯片、框架到服務(wù)統(tǒng)統(tǒng)協(xié)同優(yōu)化,但嚴(yán)格來(lái)說(shuō),TPU也仍然沒(méi)有大范圍落地。
3.2 CPU+xPU的異構(gòu)處理仍然不夠
另外,對(duì)單個(gè)處理器引擎來(lái)說(shuō),性能和靈活性是一對(duì)矛盾,如果只考慮同構(gòu)計(jì)算,則很難達(dá)到方方面面兼顧??梢酝ㄟ^(guò)板級(jí)集成或者芯片內(nèi)集成異構(gòu)的方式,實(shí)現(xiàn)CPU+GPU/FPGA/DSA的架構(gòu),但也是存在一些問(wèn)題。
傳統(tǒng)異構(gòu)計(jì)算的架構(gòu),是以CPU為中心,這種架構(gòu)本身就存在一些問(wèn)題:
- IO路徑。CPU+xPU架構(gòu)IO路徑太長(zhǎng),IO成為整個(gè)算力的瓶頸。
- 輸入輸出損耗。CPU+xPU加速增加了額外的CPU和xPU之間的數(shù)據(jù)輸入輸出損耗。
- 系統(tǒng)復(fù)雜度。異構(gòu)計(jì)算是顯式的,CPU側(cè)軟件知道在做加速,CPU側(cè)需要處理與加速器側(cè)的數(shù)據(jù)和消息交互。
仍然受限于硬件加速處理器的特點(diǎn),異構(gòu)計(jì)算仍無(wú)法兼顧性能和靈活性:
- GPU異構(gòu)加速架構(gòu)。雖然GPU具有非常好的彈性加速能力,覆蓋非常多的領(lǐng)域,但受限于GPU的性能效率,無(wú)法做到極致性能的加速。
- FPGA異構(gòu)加速架構(gòu)。FPGA可以做到硬件可編程,可以通過(guò)FaaS(此處FaaS為FPGA as a Service)機(jī)制實(shí)現(xiàn)彈性加速。FPGA的問(wèn)題在于成本和功耗過(guò)高,以及設(shè)計(jì)規(guī)模的約束,只能做非常少量并且規(guī)模較小的加速引擎。
- DSA異構(gòu)加速架構(gòu)。DSA可以做到極致的性能加速能力,但受限于其只針對(duì)某個(gè)特定領(lǐng)域,所以使用范圍受限。
3.3 團(tuán)隊(duì)協(xié)作成就通用的超異構(gòu)處理器
隨著CPU、GPU等常見(jiàn)處理引擎的成熟,也隨著工藝和Chiplet技術(shù)的進(jìn)步,我們可以在單個(gè)芯片集成更多的處理器引擎,使得在單芯片超越2個(gè)形態(tài)處理引擎成為了可能,超異構(gòu)處理器(Hyper-heterogeneous Processing Unit,HPU)開(kāi)始逐步成為現(xiàn)實(shí)。
如上圖所示,有點(diǎn)像塔防游戲,我們?cè)O(shè)置了三層“防御”,然后待處理的任務(wù)就像是“需要消滅的敵人”(我們假設(shè),待處理的有100個(gè)單位任務(wù)):
- 第一層“防御”,DSA+ASIC能夠覆蓋80%的任務(wù)(即80個(gè)任務(wù))的性能加速,可以很快“消滅”。但受限于覆蓋的領(lǐng)域和場(chǎng)景,會(huì)有20%(即20個(gè)任務(wù))的“漏網(wǎng)之魚(yú)”;
- 第二層“防御”,GPU+FPGA能夠覆蓋接下來(lái)任務(wù)的80%,性能依然強(qiáng)勁,可以搞定剩下任務(wù)的80%(即16個(gè)任務(wù))。但仍然有一些不是那么適合硬件加速的“頑固敵人”(剩余的4個(gè)任務(wù))。
- 第三層“防御”,CPU和協(xié)處理器作為“定海神針”,能夠覆蓋所有場(chǎng)景。由它們負(fù)責(zé)“消滅”最后的“頑固敵人”(即處理最后4個(gè)任務(wù))。
在沒(méi)有硬件加速的情況下,所有的100個(gè)任務(wù)都需要CPU來(lái)處理;而有了加速之后,CPU只需要處理4個(gè)任務(wù)。當(dāng)整個(gè)設(shè)計(jì)足夠均衡(各類(lèi)加速引擎不成為性能的瓶頸)的時(shí)候,反過(guò)來(lái)我們可以說(shuō),通過(guò)超異構(gòu)處理器HPU可以實(shí)現(xiàn)25倍的性能提升。
受宏觀超大規(guī)模數(shù)據(jù)中心的影響,也受軟硬件深度融合的加持,可以繼續(xù)優(yōu)化這里的“二八定律”,假設(shè)我們可以把不同層次處理引擎可處理的任務(wù)比例再增強(qiáng)10%。這樣:DSA+ASIC完成90個(gè)任務(wù),GPU+FPGA完成9個(gè)任務(wù),最終CPU只需要完成1個(gè)任務(wù)。或者反過(guò)來(lái)說(shuō),可以通過(guò)軟硬件融合,實(shí)現(xiàn)通用的超異構(gòu)處理器GP-HPU,實(shí)現(xiàn)100倍的性能提升。
3.4 超越傳統(tǒng)SOC
通用超異構(gòu)處理器GP-HPU,可以算是SOC,但又跟傳統(tǒng)的SOC有很大的不同。如果無(wú)法認(rèn)識(shí)到這些不同,就無(wú)法理解到HPU的本質(zhì)。下表是一些典型的區(qū)別對(duì)比。