近年來(lái),幾乎每天都會(huì)發(fā)布關(guān)于新處理器架構(gòu)的公告,并給出一個(gè)三個(gè)字母的首字母縮略詞——TPU、IPU、NPU。但真正區(qū)分它們的是什么?真的有那么多獨(dú)特的處理器架構(gòu),還是發(fā)生了其他事情?
2018 年,John L. Hennessy 和 David A. Patterson 發(fā)表了題為“計(jì)算機(jī)架構(gòu)的新黃金時(shí)代”的圖靈講座。他們關(guān)注的是 CPU 及其發(fā)展方式,但這只是整個(gè)方程式的一小部分。Arteris IP研究員兼系統(tǒng)架構(gòu)師 Michael Frank 表示:“從 CPU 的角度來(lái)看,這些xPU中的大多數(shù)都不是真正的處理器?!?“它們更像是一個(gè) GPU,一個(gè)用于特殊工作負(fù)載的加速器,而且它們內(nèi)部有相當(dāng)多的多樣性。機(jī)器學(xué)習(xí)是一類(lèi)處理器,您可以將它們統(tǒng)稱為機(jī)器學(xué)習(xí)加速器,但它們加速的處理部分卻多種多樣。”
處理器的本質(zhì)可以歸結(jié)為三件事?!皻w根結(jié)底,它確實(shí)回到了指令集架構(gòu) (ISA),”賽靈思芯片營(yíng)銷(xiāo)總監(jiān) Manuel Uhm 說(shuō)?!斑@定義了你想要做什么。然后你有 I/O 和內(nèi)存,它們支持 ISA 和它試圖完成的任務(wù)。未來(lái)這將是一個(gè)非常有趣的時(shí)刻,因?yàn)槲覀儗⒖吹奖冗^(guò)去兩三年多的時(shí)間更多的創(chuàng)新和變化?!?/p>
許多新架構(gòu)都不是單處理器?!拔覀兛吹降氖遣煌?lèi)型的處理器或可編程引擎的組合,它們存在于同一個(gè) SoC 或同一個(gè)系統(tǒng)中,” Cadence技術(shù)和戰(zhàn)略營(yíng)銷(xiāo)集團(tuán)總監(jiān) Pierre-Xavier Thomas 說(shuō)?!皩④浖蝿?wù)分派到不同的硬件或靈活的可編程引擎。所有處理器可能共享一個(gè)公共 API,但執(zhí)行域?qū)⒂兴煌?。在這里,您確實(shí)會(huì)看到具有不同類(lèi)型特征的不同類(lèi)型的處理?!?/p>
現(xiàn)實(shí)情況是,大部分命名都是營(yíng)銷(xiāo)。
“關(guān)鍵是人們將這些名稱和首字母縮略詞用于兩個(gè)不同的目的,” Imperas Software 的首席執(zhí)行官 Simon Davidmann 說(shuō)?!耙粋€(gè)用于解釋處理器的架構(gòu),例如 SIMD(單指令多數(shù)據(jù))。另一個(gè)定義了它正在尋址的應(yīng)用程序段。所以它可以定義處理器架構(gòu),或者像張量處理單元(TPU)這樣的品牌名稱。他們正在為他們的異構(gòu)或同構(gòu)架構(gòu)命名,而不是單個(gè)處理器?!?/p>
一點(diǎn)歷史
40 年前,事情要簡(jiǎn)單得多。當(dāng)時(shí)有中央處理器(CPU), 也有很多它的變體,但它們基本上都是馮諾依曼架構(gòu),圖靈完備的處理器。每個(gè)都有不同的指令集,使它們?cè)谀承┤蝿?wù)上更高效,并且有很多關(guān)于復(fù)雜指令集 (CISC) 與精簡(jiǎn)指令集 (RISC) 的相對(duì)優(yōu)點(diǎn)的討論。
RISC-V的出現(xiàn)給ISA帶來(lái)了很多關(guān)注?!叭藗兿胍私?ISA,因?yàn)檎?ISA 定義了處理器針對(duì)已定義任務(wù)的優(yōu)化程度,”賽靈思的 Uhm 說(shuō)?!八麄兛梢圆榭?ISA 并開(kāi)始計(jì)算周期。如果一個(gè) ISA 具有本機(jī)指令并以 1 GHz 運(yùn)行,我可以將其與另一個(gè)處理器 ISA 進(jìn)行比較,后者相同的功能可能需要兩條指令,但處理器以 1.5 GHz 運(yùn)行。哪一個(gè)讓我走得更遠(yuǎn)?他們?yōu)橹匾墓δ苓M(jìn)行數(shù)學(xué)計(jì)算?!?/p>
CPU 有多種封裝方式,有時(shí)將 IO 或內(nèi)存放在同一個(gè)封裝中,它們被稱為微控制器單元 (MCU)。
當(dāng)調(diào)制解調(diào)器變得流行時(shí),數(shù)字信號(hào)處理器(DSP) 出現(xiàn)了,它們的不同之處在于它們使用了哈佛架構(gòu)。這將指令總線與數(shù)據(jù)總線分開(kāi)。其中一些還實(shí)施了 SIMD 架構(gòu),使數(shù)據(jù)處理更加高效。
指令和數(shù)據(jù)的分離是為了提高吞吐率,盡管它限制了一些可以完成的邊緣編程,例如自寫(xiě)程序?!巴ǔ?,邊界條件不是計(jì)算,”Uhm 說(shuō)?!八絹?lái)越多地是 I/O 或內(nèi)存。該行業(yè)從提升計(jì)算能力轉(zhuǎn)向確保有足夠的數(shù)據(jù)來(lái)保持計(jì)算能力并保持性能?!?/p>
當(dāng)單個(gè)處理器不再變得更快時(shí),他們把多個(gè)處理器連接在一起,這些處理器通常共享內(nèi)存并保持每個(gè)處理器和整個(gè)處理器集群保持圖靈完備的概念。程序的任何部分在哪個(gè)核心上執(zhí)行都無(wú)關(guān)緊要,因?yàn)榻Y(jié)果是一樣的。
下一個(gè)重大發(fā)展是圖形處理單元(GPU),它的出現(xiàn)打破了常規(guī),因?yàn)槊總€(gè)處理元素或pipeline都有自己的內(nèi)存,無(wú)法在處理器外部尋址。因?yàn)閮?nèi)存是有限的,這意味著它不能執(zhí)行任何任意的處理任務(wù),只能執(zhí)行那些可以放入提供的內(nèi)存空間的任務(wù)。
“對(duì)于某些類(lèi)型的功能,GPU 是非常強(qiáng)大的處理器,但它們的pipeline非常長(zhǎng),”Uhm 指出?!斑@些pipeline讓 GPU 單元不斷處理數(shù)據(jù),但在某些時(shí)候,如果您必須刷新pipeline,那將是一個(gè)巨大的打擊。系統(tǒng)中內(nèi)置了大量的延遲和不確定性?!?/p>
雖然已經(jīng)定義了許多其他加速器,但 GPU——以及后來(lái)的通用 GPU (GPGPU)——定義了一種編程范式和軟件堆棧,使它們比過(guò)去的加速器更容易上手?!岸嗄陙?lái),某些工作是專門(mén)化的,”Imperas 的Davidmann說(shuō)?!坝杏糜陧樞虺绦虻?CPU。有圖形處理器,它專注于為屏幕處理數(shù)據(jù),并將我們帶入了一個(gè)高度并行的世界。使用許多小的處理元素來(lái)執(zhí)行任務(wù)?,F(xiàn)在有機(jī)器學(xué)習(xí)任務(wù)?!?/p>
還有什么其他的構(gòu)造規(guī)則可以解釋所有的新架構(gòu)?過(guò)去,處理器陣列通常通過(guò)內(nèi)存或固定網(wǎng)絡(luò)拓?fù)洌ɡ缇W(wǎng)狀或環(huán)形)連接。最近出現(xiàn)的是片上網(wǎng)絡(luò) (NoC) 的結(jié)合,使分布式異構(gòu)處理器能夠以更靈活的方式進(jìn)行通信。將來(lái),它們還可以在不使用內(nèi)存的情況下實(shí)現(xiàn)通信。
“此時(shí),NoC 只攜帶數(shù)據(jù),”Arteris 的 Frank 說(shuō)?!拔磥?lái),NoC 可以擴(kuò)展到加速器之間的通信超越數(shù)據(jù)的其他領(lǐng)域。它可以發(fā)送命令、發(fā)送通知等。加速器陣列的通信需求可能與 CPU 或標(biāo)準(zhǔn) SoC 等的通信需求不同。但是片上網(wǎng)絡(luò)并不會(huì)將您限制在一個(gè)子集上。您可以通過(guò)支持加速器的特殊通信需求來(lái)優(yōu)化和提高性能?!?/p>
實(shí)現(xiàn)架構(gòu)
處理器區(qū)分的一種方式是針對(duì)特定操作環(huán)境進(jìn)行優(yōu)化。例如,軟件可能在云中運(yùn)行,但您也可以在微型物聯(lián)網(wǎng)設(shè)備上執(zhí)行相同的軟件。實(shí)現(xiàn)架構(gòu)將大不相同,并在性能、功耗、成本或在極端條件下運(yùn)行的能力方面實(shí)現(xiàn)不同的運(yùn)行點(diǎn)。
“一些應(yīng)用程序是針對(duì)云計(jì)算的,現(xiàn)在我們正在讓它們更接近邊緣,”Cadence 的 Thomas 說(shuō)?!斑@可能是因?yàn)檠舆t要求,或者能量或功率耗散,這將需要不同類(lèi)型的架構(gòu)。您可能希望擁有完全相同的軟件堆棧,以便能夠在兩個(gè)位置運(yùn)行。云需要提供靈活性,因?yàn)樗鼘⒔邮詹煌?lèi)型的應(yīng)用程序,并且必須能夠聚合大量用戶。這要求服務(wù)器上的硬件具有特定于應(yīng)用程序的能力,但一種尺寸并不適合所有人?!?/p>
ML增加了自己的要求?!霸谑褂蒙窠?jīng)網(wǎng)絡(luò)和機(jī)器學(xué)習(xí)構(gòu)建智能系統(tǒng)時(shí),您需要使用軟件框架和通用軟件堆棧對(duì)新網(wǎng)絡(luò)進(jìn)行編程并將其映射到硬件,”Thomas 補(bǔ)充道?!叭缓?,您可以從PPA 的角度使軟件應(yīng)用程序適應(yīng)正確的硬件。這推動(dòng)了對(duì)不同類(lèi)型的處理和處理器的需求,以便能夠在硬件層滿足這些需求?!?/p>
這些需求由應(yīng)用定義?!耙患夜疽呀?jīng)創(chuàng)建了一個(gè)用于圖形操作的處理器,” Frank說(shuō)?!八麄儍?yōu)化和加速如何跟蹤圖形,并執(zhí)行諸如重新排序圖形之類(lèi)的操作。還有其他一些主要加速機(jī)器學(xué)習(xí)的蠻力部分(brute force ),即矩陣乘法。內(nèi)存訪問(wèn)對(duì)于每個(gè)架構(gòu)來(lái)說(shuō)都是一個(gè)特殊的問(wèn)題,因?yàn)楫?dāng)你構(gòu)建加速器時(shí),最重要的目標(biāo)是讓它保持忙碌。你必須將盡可能多的數(shù)據(jù)傳送到 ALU,因?yàn)樗梢韵M(fèi)和生產(chǎn)?!?/p>
許多這些應(yīng)用有許多共同點(diǎn)?!八鼈兌加幸恍┍镜貎?nèi)存,它們有一個(gè)片上網(wǎng)絡(luò)來(lái)進(jìn)行通信,每個(gè)執(zhí)行軟件算法的處理器都在處理一小塊數(shù)據(jù),”Davidmann說(shuō)?!斑@些工作由運(yùn)行在更傳統(tǒng) CPU 上的操作系統(tǒng)調(diào)度?!?/p>
硬件設(shè)計(jì)人員的棘手之處在于預(yù)測(cè)它將被要求執(zhí)行哪些任務(wù)?!氨M管您將在某些層中進(jìn)行類(lèi)似類(lèi)型的操作,但人們正在關(guān)注層中的差異化,”Thomas 說(shuō)?!盀榱四軌蛱幚砩窠?jīng)網(wǎng)絡(luò),需要幾種類(lèi)型的處理能力。這意味著您需要能夠?qū)ι窠?jīng)網(wǎng)絡(luò)的一部分進(jìn)行某種方式的處理,然后可能需要另一種類(lèi)型的操作來(lái)處理另一層。數(shù)據(jù)移動(dòng)和數(shù)據(jù)量也在逐層變化?!?/p>
這種差異化可以超越數(shù)據(jù)移動(dòng)?!皩?duì)于基因組測(cè)序,您需要進(jìn)行某些處理,”Frank說(shuō)?!暗悄悴荒苡脝我活?lèi)型的加速器來(lái)加速所有東西。您必須為不同的pipeline構(gòu)建一整套不同的加速器。CPU 成為管理執(zhí)行流程的守護(hù)者。它進(jìn)行設(shè)置,執(zhí)行 DMA,提供兩者之間的決策過(guò)程。理解和分析算法并定義您希望如何優(yōu)化它們的處理是一項(xiàng)完整的架構(gòu)任務(wù)?!?/p>
該過(guò)程的一部分需要分區(qū)?!皼](méi)有一種處理器類(lèi)型可以針對(duì)每個(gè)處理器任務(wù)進(jìn)行優(yōu)化—— FPGA不行,CPU不行,GPU不行,DSP也必行,”Uhm 說(shuō)?!拔覀儎?chuàng)建了一系列包含所有這些的設(shè)備,但客戶方面的困難部分是他們必須提供智能,以確定整個(gè)系統(tǒng)的哪些部分將針對(duì)處理器或可編程邏輯,或在 AI 引擎。每個(gè)人都想要那個(gè)自動(dòng)神奇的工具,一個(gè)可以立即決定把它放在 CPU 上,把它放在 FPGA 上,把它放在 GPU 上的工具。那個(gè)工具今天不存在?!?/p>
盡管如此,CPU 總會(huì)發(fā)揮作用?!靶枰?CPU 來(lái)執(zhí)行程序的不規(guī)則部分,”Frank說(shuō)?!癈PU 的通用可編程性有其優(yōu)勢(shì)。如果您有專門(mén)的數(shù)據(jù)結(jié)構(gòu)或數(shù)學(xué)運(yùn)算,它就不能很好地工作。CPU 是一個(gè)通用處理器,它沒(méi)有針對(duì)任何東西進(jìn)行優(yōu)化。它什么都不擅長(zhǎng)?!?/p>
改變“抽象”
過(guò)去,硬件/軟件邊界由 ISA 定義,并且該內(nèi)存是連續(xù)可尋址的。當(dāng)存在多個(gè)處理器時(shí),它們通常是內(nèi)存一致的。
“一致性是一種契約,”Frank說(shuō)?!斑@種一致性非常重要,不會(huì)消失。但是您可以想象,在數(shù)據(jù)流引擎中,一致性并不那么重要,因?yàn)槟鷮⒃谶吘壱苿?dòng)的數(shù)據(jù)直接從一個(gè)加速器傳送到另一個(gè)加速器。如果您對(duì)數(shù)據(jù)集進(jìn)行分區(qū),則一致性會(huì)成為障礙,因?yàn)樗鼤?huì)花費(fèi)您額外的周期。你必須查資料。您必須提供更新信息?!?/p>
這需要不同的內(nèi)存架構(gòu)?!澳惚仨毧紤]內(nèi)存結(jié)構(gòu),因?yàn)槟阒挥羞@么多緊密耦合的內(nèi)存,”Uhm 說(shuō)?!澳憧梢栽L問(wèn)相鄰的內(nèi)存,但你很快就會(huì)耗盡相鄰的內(nèi)存,無(wú)法及時(shí)訪問(wèn)。這必須在設(shè)計(jì)中加以理解。隨著工具的成熟,工具將開(kāi)始了解更多內(nèi)容。今天,它是由人類(lèi)智能完成的,能夠理解架構(gòu)并應(yīng)用它?!?/p>
還需要更高級(jí)別的抽象( abstraction)?!坝行┛蚣芸梢詫⒁阎W(wǎng)絡(luò)映射或編譯到目標(biāo)硬件上,”Thomas 說(shuō)。“您有一組低級(jí)內(nèi)核或 API,它們將在軟件堆棧中使用,然后最終由神經(jīng)網(wǎng)絡(luò)的映射器使用。在下面,您可能擁有不同類(lèi)型的硬件,具體取決于您想要實(shí)現(xiàn)的目標(biāo),取決于您的產(chǎn)品詳細(xì)信息。它實(shí)現(xiàn)了相同的功能,但不是使用相同的硬件,也不是相同的 PPA 權(quán)衡?!?/p>
這給那些編譯器帶來(lái)了很大的壓力?!爸饕膯?wèn)題是你未來(lái)如何對(duì)加速器進(jìn)行編程?” Frank問(wèn)道?!澳欠駥?shí)現(xiàn)了像第一代 GPU 那樣串在一起的硬連線引擎?或者您是否構(gòu)建了具有自己指令集的小型可編程引擎?現(xiàn)在你必須單獨(dú)對(duì)這些東西進(jìn)行編程,并將這些引擎中的每一個(gè)與數(shù)據(jù)流連接起來(lái),執(zhí)行任務(wù)。一個(gè)處理器擁有整個(gè)指令集的某個(gè)子集,另一個(gè)處理器擁有一個(gè)不同的子集,它們都將共享控制流的一些重疊部分。您可能有一些加速能力略有不同的產(chǎn)品。編譯器或了解它的庫(kù)會(huì)相應(yīng)地進(jìn)行映射?!?/p>
總結(jié)
處理器的架構(gòu)沒(méi)有改變。他們?nèi)匀蛔袷剡^(guò)去 40 年來(lái)一直存在的相同選擇。正在改變的是芯片的構(gòu)造方式。它們現(xiàn)在包含大量異構(gòu)處理器,這些處理器具有針對(duì)應(yīng)用任務(wù)子集優(yōu)化的內(nèi)存和通信。每個(gè)芯片都對(duì)處理器功能及其優(yōu)化目的、所需的數(shù)據(jù)吞吐量以及通常會(huì)看到的數(shù)據(jù)流做出了不同的選擇。
每個(gè)硬件供應(yīng)商都希望將自己的芯片與其他芯片區(qū)分開(kāi)來(lái),但是通過(guò)品牌推廣比談?wù)搩?nèi)部技術(shù)細(xì)節(jié)要容易得多。所以他們給它起了個(gè)名字,稱它為第一個(gè)、最快的、最大的,并將它與特定類(lèi)型的應(yīng)用程序問(wèn)題聯(lián)系起來(lái)。這三個(gè)字母的首字母縮寫(xiě)詞已成為應(yīng)用任務(wù)名稱,但它們并未定義硬件架構(gòu)。