近年來,幾乎每天都會發布關于新處理器架構的公告,并給出一個三個字母的首字母縮略詞——TPU、IPU、NPU。但真正區分它們的是什么?真的有那么多獨特的處理器架構,還是發生了其他事情?
2018 年,John L. Hennessy 和 David A. Patterson 發表了題為“計算機架構的新黃金時代”的圖靈講座。他們關注的是 CPU 及其發展方式,但這只是整個方程式的一小部分。Arteris IP研究員兼系統架構師 Michael Frank 表示:“從 CPU 的角度來看,這些xPU中的大多數都不是真正的處理器。” “它們更像是一個 GPU,一個用于特殊工作負載的加速器,而且它們內部有相當多的多樣性。機器學習是一類處理器,您可以將它們統稱為機器學習加速器,但它們加速的處理部分卻多種多樣?!?/p>
處理器的本質可以歸結為三件事。“歸根結底,它確實回到了指令集架構 (ISA),”賽靈思芯片營銷總監 Manuel Uhm 說?!斑@定義了你想要做什么。然后你有 I/O 和內存,它們支持 ISA 和它試圖完成的任務。未來這將是一個非常有趣的時刻,因為我們將看到比過去兩三年多的時間更多的創新和變化?!?/p>
許多新架構都不是單處理器?!拔覀兛吹降氖遣煌愋偷奶幚砥骰蚩删幊桃娴慕M合,它們存在于同一個 SoC 或同一個系統中,” Cadence技術和戰略營銷集團總監 Pierre-Xavier Thomas 說?!皩④浖蝿辗峙傻讲煌挠布蜢`活的可編程引擎。所有處理器可能共享一個公共 API,但執行域將有所不同。在這里,您確實會看到具有不同類型特征的不同類型的處理?!?/p>
現實情況是,大部分命名都是營銷。
“關鍵是人們將這些名稱和首字母縮略詞用于兩個不同的目的,” Imperas Software 的首席執行官 Simon Davidmann 說?!耙粋€用于解釋處理器的架構,例如 SIMD(單指令多數據)。另一個定義了它正在尋址的應用程序段。所以它可以定義處理器架構,或者像張量處理單元(TPU)這樣的品牌名稱。他們正在為他們的異構或同構架構命名,而不是單個處理器?!?/p>
一點歷史
40 年前,事情要簡單得多。當時有中央處理器(CPU), 也有很多它的變體,但它們基本上都是馮諾依曼架構,圖靈完備的處理器。每個都有不同的指令集,使它們在某些任務上更高效,并且有很多關于復雜指令集 (CISC) 與精簡指令集 (RISC) 的相對優點的討論。
RISC-V的出現給ISA帶來了很多關注?!叭藗兿胍私?ISA,因為正是 ISA 定義了處理器針對已定義任務的優化程度,”賽靈思的 Uhm 說?!八麄兛梢圆榭?ISA 并開始計算周期。如果一個 ISA 具有本機指令并以 1 GHz 運行,我可以將其與另一個處理器 ISA 進行比較,后者相同的功能可能需要兩條指令,但處理器以 1.5 GHz 運行。哪一個讓我走得更遠?他們為重要的功能進行數學計算。”
CPU 有多種封裝方式,有時將 IO 或內存放在同一個封裝中,它們被稱為微控制器單元 (MCU)。
當調制解調器變得流行時,數字信號處理器(DSP) 出現了,它們的不同之處在于它們使用了哈佛架構。這將指令總線與數據總線分開。其中一些還實施了 SIMD 架構,使數據處理更加高效。
指令和數據的分離是為了提高吞吐率,盡管它限制了一些可以完成的邊緣編程,例如自寫程序?!巴ǔ?,邊界條件不是計算,”Uhm 說。“它越來越多地是 I/O 或內存。該行業從提升計算能力轉向確保有足夠的數據來保持計算能力并保持性能。”
當單個處理器不再變得更快時,他們把多個處理器連接在一起,這些處理器通常共享內存并保持每個處理器和整個處理器集群保持圖靈完備的概念。程序的任何部分在哪個核心上執行都無關緊要,因為結果是一樣的。
下一個重大發展是圖形處理單元(GPU),它的出現打破了常規,因為每個處理元素或pipeline都有自己的內存,無法在處理器外部尋址。因為內存是有限的,這意味著它不能執行任何任意的處理任務,只能執行那些可以放入提供的內存空間的任務。
“對于某些類型的功能,GPU 是非常強大的處理器,但它們的pipeline非常長,”Uhm 指出。“這些pipeline讓 GPU 單元不斷處理數據,但在某些時候,如果您必須刷新pipeline,那將是一個巨大的打擊。系統中內置了大量的延遲和不確定性?!?/p>
雖然已經定義了許多其他加速器,但 GPU——以及后來的通用 GPU (GPGPU)——定義了一種編程范式和軟件堆棧,使它們比過去的加速器更容易上手?!岸嗄陙?,某些工作是專門化的,”Imperas 的Davidmann說?!坝杏糜陧樞虺绦虻?CPU。有圖形處理器,它專注于為屏幕處理數據,并將我們帶入了一個高度并行的世界。使用許多小的處理元素來執行任務。現在有機器學習任務?!?/p>
還有什么其他的構造規則可以解釋所有的新架構?過去,處理器陣列通常通過內存或固定網絡拓撲(例如網狀或環形)連接。最近出現的是片上網絡 (NoC) 的結合,使分布式異構處理器能夠以更靈活的方式進行通信。將來,它們還可以在不使用內存的情況下實現通信。
“此時,NoC 只攜帶數據,”Arteris 的 Frank 說?!拔磥?,NoC 可以擴展到加速器之間的通信超越數據的其他領域。它可以發送命令、發送通知等。加速器陣列的通信需求可能與 CPU 或標準 SoC 等的通信需求不同。但是片上網絡并不會將您限制在一個子集上。您可以通過支持加速器的特殊通信需求來優化和提高性能?!?/p>
實現架構
處理器區分的一種方式是針對特定操作環境進行優化。例如,軟件可能在云中運行,但您也可以在微型物聯網設備上執行相同的軟件。實現架構將大不相同,并在性能、功耗、成本或在極端條件下運行的能力方面實現不同的運行點。
“一些應用程序是針對云計算的,現在我們正在讓它們更接近邊緣,”Cadence 的 Thomas 說?!斑@可能是因為延遲要求,或者能量或功率耗散,這將需要不同類型的架構。您可能希望擁有完全相同的軟件堆棧,以便能夠在兩個位置運行。云需要提供靈活性,因為它將接收不同類型的應用程序,并且必須能夠聚合大量用戶。這要求服務器上的硬件具有特定于應用程序的能力,但一種尺寸并不適合所有人?!?/p>
ML增加了自己的要求?!霸谑褂蒙窠浘W絡和機器學習構建智能系統時,您需要使用軟件框架和通用軟件堆棧對新網絡進行編程并將其映射到硬件,”Thomas 補充道?!叭缓?,您可以從PPA 的角度使軟件應用程序適應正確的硬件。這推動了對不同類型的處理和處理器的需求,以便能夠在硬件層滿足這些需求。”
這些需求由應用定義?!耙患夜疽呀泟摻艘粋€用于圖形操作的處理器,” Frank說?!八麄儍灮图铀偃绾胃檲D形,并執行諸如重新排序圖形之類的操作。還有其他一些主要加速機器學習的蠻力部分(brute force ),即矩陣乘法。內存訪問對于每個架構來說都是一個特殊的問題,因為當你構建加速器時,最重要的目標是讓它保持忙碌。你必須將盡可能多的數據傳送到 ALU,因為它可以消費和生產?!?/p>
許多這些應用有許多共同點。“它們都有一些本地內存,它們有一個片上網絡來進行通信,每個執行軟件算法的處理器都在處理一小塊數據,”Davidmann說。“這些工作由運行在更傳統 CPU 上的操作系統調度?!?/p>
硬件設計人員的棘手之處在于預測它將被要求執行哪些任務。“盡管您將在某些層中進行類似類型的操作,但人們正在關注層中的差異化,”Thomas 說?!盀榱四軌蛱幚砩窠浘W絡,需要幾種類型的處理能力。這意味著您需要能夠對神經網絡的一部分進行某種方式的處理,然后可能需要另一種類型的操作來處理另一層。數據移動和數據量也在逐層變化?!?/p>
這種差異化可以超越數據移動?!皩τ诨蚪M測序,您需要進行某些處理,”Frank說?!暗悄悴荒苡脝我活愋偷募铀倨鱽砑铀偎袞|西。您必須為不同的pipeline構建一整套不同的加速器。CPU 成為管理執行流程的守護者。它進行設置,執行 DMA,提供兩者之間的決策過程。理解和分析算法并定義您希望如何優化它們的處理是一項完整的架構任務?!?/p>
該過程的一部分需要分區。“沒有一種處理器類型可以針對每個處理器任務進行優化—— FPGA不行,CPU不行,GPU不行,DSP也必行,”Uhm 說?!拔覀儎摻艘幌盗邪羞@些的設備,但客戶方面的困難部分是他們必須提供智能,以確定整個系統的哪些部分將針對處理器或可編程邏輯,或在 AI 引擎。每個人都想要那個自動神奇的工具,一個可以立即決定把它放在 CPU 上,把它放在 FPGA 上,把它放在 GPU 上的工具。那個工具今天不存在。”
盡管如此,CPU 總會發揮作用。“需要 CPU 來執行程序的不規則部分,”Frank說。“CPU 的通用可編程性有其優勢。如果您有專門的數據結構或數學運算,它就不能很好地工作。CPU 是一個通用處理器,它沒有針對任何東西進行優化。它什么都不擅長?!?/p>
改變“抽象”
過去,硬件/軟件邊界由 ISA 定義,并且該內存是連續可尋址的。當存在多個處理器時,它們通常是內存一致的。
“一致性是一種契約,”Frank說。“這種一致性非常重要,不會消失。但是您可以想象,在數據流引擎中,一致性并不那么重要,因為您將在邊緣移動的數據直接從一個加速器傳送到另一個加速器。如果您對數據集進行分區,則一致性會成為障礙,因為它會花費您額外的周期。你必須查資料。您必須提供更新信息?!?/p>
這需要不同的內存架構?!澳惚仨毧紤]內存結構,因為你只有這么多緊密耦合的內存,”Uhm 說。“你可以訪問相鄰的內存,但你很快就會耗盡相鄰的內存,無法及時訪問。這必須在設計中加以理解。隨著工具的成熟,工具將開始了解更多內容。今天,它是由人類智能完成的,能夠理解架構并應用它?!?/p>
還需要更高級別的抽象( abstraction)?!坝行┛蚣芸梢詫⒁阎W絡映射或編譯到目標硬件上,”Thomas 說?!澳幸唤M低級內核或 API,它們將在軟件堆棧中使用,然后最終由神經網絡的映射器使用。在下面,您可能擁有不同類型的硬件,具體取決于您想要實現的目標,取決于您的產品詳細信息。它實現了相同的功能,但不是使用相同的硬件,也不是相同的 PPA 權衡?!?/p>
這給那些編譯器帶來了很大的壓力?!爸饕膯栴}是你未來如何對加速器進行編程?” Frank問道。“您是否實現了像第一代 GPU 那樣串在一起的硬連線引擎?或者您是否構建了具有自己指令集的小型可編程引擎?現在你必須單獨對這些東西進行編程,并將這些引擎中的每一個與數據流連接起來,執行任務。一個處理器擁有整個指令集的某個子集,另一個處理器擁有一個不同的子集,它們都將共享控制流的一些重疊部分。您可能有一些加速能力略有不同的產品。編譯器或了解它的庫會相應地進行映射?!?/p>
總結
處理器的架構沒有改變。他們仍然遵守過去 40 年來一直存在的相同選擇。正在改變的是芯片的構造方式。它們現在包含大量異構處理器,這些處理器具有針對應用任務子集優化的內存和通信。每個芯片都對處理器功能及其優化目的、所需的數據吞吐量以及通常會看到的數據流做出了不同的選擇。
每個硬件供應商都希望將自己的芯片與其他芯片區分開來,但是通過品牌推廣比談論內部技術細節要容易得多。所以他們給它起了個名字,稱它為第一個、最快的、最大的,并將它與特定類型的應用程序問題聯系起來。這三個字母的首字母縮寫詞已成為應用任務名稱,但它們并未定義硬件架構。