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