【說明】什麼是 xPU?與 GPU 是對手?AI 伺服器也需要它?
幾乎每天都有關於新處理器架構的公告,並且它們都被賦予了三個字母的縮寫——TPU、IPU、NPU。但它們之間真正的區別是什麼?真的有那麼多獨特的處理器架構,還是發生了其他事情?
在2018年,約翰·L·亨內西(John L. Hennessy)和大衛·A·帕特森(David A. Patterson)發表了題為「計算機架構的新黃金時代」的圖靈講座。他們專注於CPU及其演變,但這僅僅是整體方程式的一小部分。「這些東西大多不是以CPU的意義來說的真正處理器,」阿特里斯IP的研究員和系統架構師邁克爾·弗蘭克(Michael Frank)表示。「它們更像是GPU,是針對特定工作負載的加速器,並且它們之間有相當大的多樣性。機器學習是一類處理器,你可以稱它們為機器學習加速器,但它們在加速的處理部分上有很大的變化。」
處理器的本質可以歸納為三個方面。「最終,這真的回到了指令集架構(ISA),」賽靈思的矽市場總監曼努埃爾·烏姆(Manuel Uhm)表示。「這定義了你試圖做什麼。然後你有I/O和內存,這些支持ISA及其試圖實現的目標。未來將是一個非常有趣的時期,因為我們將看到比過去二十年或三十年更多的創新和變化。」
許多新架構並不是單一處理器。「我們所看到的是不同類型的處理器或可編程引擎的組合,它們存在於相同的SoC或相同的系統中,」凱登斯的技術和戰略市場組總監皮埃爾-薩維爾·托馬斯(Pierre-Xavier Thomas)表示。「有將軟件任務分派到不同硬件或靈活可編程引擎的情況。所有處理器可能共享一個共同的API,但執行域將是不同的。這正是你將看到不同類型的處理和不同特徵的地方。」
實際上,許多命名是出於市場營銷的目的。「關鍵是人們將這些名稱和縮寫用於兩個不同的目的,」Imperas Software的首席執行官西蒙·大衛曼(Simon Davidmann)表示。「一個是解釋處理器的架構,例如SIMD(單指令多數據)。另一個定義了它所針對的應用領域。因此,它可以定義處理器架構,或像張量處理單元(TPU)這樣的品牌名稱。他們為其異構或同構架構命名,這並不是單一處理器。」
一點歷史
四十年前的事情要簡單得多。當時有中央處理單元(CPU),雖然有許多變體,但它們都基本上是冯·诺依曼架構,圖靈完備的處理器。每個都具有不同的指令集,使其在某些任務上更高效,並且對複雜指令集(CISC)與精簡指令集(RISC)的相對優點進行了大量討論。
RISC-V的出現引起了人們對ISA的極大關注。「人們希望了解ISA,因為它是ISA定義了處理器在特定任務上的優化程度,」賽靈思的烏姆說。「他們可以查看ISA並開始計算周期。如果一個ISA有一個原生指令並在一吉赫茲運行,我可以將其與另一個處理器的ISA進行比較,後者的相同功能可能需要兩個指令,但該處理器以1.5吉赫茲運行。哪一個能讓我更快地前進?他們會針對重要功能進行計算。」
CPU以多種方式打包,有時將I/O或內存放入同一包裝中,並稱之為微控制器單元(MCU)。
當調製解調器變得流行時,數字信號處理器(DSP)出現了,因為它們使用哈佛架構而有所不同。這將指令總線與數據總線分開。其中一些還實現了使數據處理更高效的SIMD架構。
指令與數據的分離是為了提高吞吐量,即使這限制了一些邊緣編程,例如自寫程序。「通常,限制條件不是計算,」烏姆說。「越來越多的是I/O或內存。行業已經從提高計算能力轉向確保有足夠的數據來保持計算運行並維持性能。」
當單一處理器不再變得更快時,多個處理器被連接在一起,通常共享內存,並保持每個處理器及整個處理器集群都保持圖靈完備的概念。無論程序的哪一部分在何種核心上執行,結果都是相同的。
下一個主要發展是圖形處理單元(GPU),這打破了常規,因為每個處理元素或管道都有其自己的內存,且該內存在處理器外部不可尋址。由於內存是有限的,這意味著它無法執行任何任意的處理任務,只能執行那些能夠適應提供的內存空間的任務。
「GPU是某些功能的非常強大的處理器,但它們的管道非常長,」烏姆指出。「這些管道使GPU單元能夠對數據進行處理,但如果在某個時候必須清空管道,那將是一個巨大的損失。系統中內建了大量的延遲和不確定性。」
儘管已經定義了許多其他加速器,但GPU——以及後來的通用GPU(GPGPU)——定義了一種編程範式和軟件堆棧,使它們比過去的加速器更易於接近。「多年來,某些工作已經專業化,」Imperas的Davidmann表示。「有針對順序程序的CPU。有針對屏幕數據操作的圖形處理器,並引入了高度並行的世界。任務是使用大量小型處理元素來執行的。現在有了機器學習任務。」
還有哪些建構規則可以被打破,以解釋所有的新架構?過去,處理器陣列通常通過內存或固定的網絡拓撲(如網格或環形)連接。最近出現的是集成了片上網絡(NoC),使分佈式異構處理器能夠以更靈活的方式進行通信。未來,它們還可能實現不使用內存的通信。
「目前,NoC僅承載數據,」阿特里斯的弗蘭克表示。「未來,NoC可能擴展到其他領域,其中加速器之間的通信超越數據。它可以發送命令,可以發送通知等。加速器陣列或加速器海的通信需求可能與例如CPU或標準SoC的通信需求不同。但片上網絡並不限制您僅限於一個子集。通過支持加速器的特殊通信需求,您可以優化和提高性能。」
實現架構
處理器的區別之一是針對特定操作環境進行優化。例如,軟件可能在雲端運行,但您也可以在微型物聯網設備上執行相同的軟件。實現架構將非常不同,並在性能、功耗、成本或在極端條件下運行的能力方面達到不同的操作點。
「某些應用程序是針對雲端的,而現在我們將它們帶到邊緣,」凱登斯的托馬斯表示。「這可能是因為延遲要求,或者是出於能量或功率耗散的考量,這需要不同類型的架構。您可能希望在兩個位置運行完全相同的軟件堆棧。雲端需要提供靈活性,因為它將接收不同類型的應用程序並必須能夠聚合多個用戶。這要求服務器上的硬件具備應用特定的能力,但一種尺寸並不適合所有。」
機器學習增加了自身的要求。「在構建具有神經網絡和機器學習的智能系統時,需要編程新的網絡並將其映射到硬件,使用軟件框架和共同的軟件堆棧,」托馬斯補充道。「然後,您可以從PPA的角度調整軟件應用程序以適應正確的硬件。這驅動了不同類型的處理和處理器的需求,以便在硬件層面上滿足這些需求。」
這些需求由應用程序定義。「有一家公司為圖形操作創建了一種處理器,」弗蘭克表示。「它們優化和加速如何跟蹤圖形,並執行如圖形重排序等操作。還有其他一些主要加速機器學習的粗暴計算部分,即矩陣-矩陣乘法。內存訪問對每種架構都是一個特別的問題,因為當您構建加速器時,最重要的目標是保持其繁忙。您必須將盡可能多的數據傳送到ALU,讓它能夠消耗和產出。」
這些應用程序有許多共同之處。「它們都擁有某些本地內存,擁有片上網絡以進行通信,並且每個執行軟件算法的處理器都在對一小塊數據進行處理,」大衛曼表示。「這些任務由運行在更傳統CPU上的操作系統進行調度。」
對於硬件設計師來說,預測將要執行的任務是棘手的。「儘管在某些層中會有類似的操作,但人們正在尋求層中的差異化,」托馬斯表示。「能夠處理神經網絡需要幾種不同類型的處理能力。這意味著您需要能夠以某種方式處理神經網絡的一部分,然後可能需要另一種操作來處理另一層。數據移動和數據量在每一層之間也在變化。」
這種差異化可以超越數據移動。「對於基因組測序,您需要執行某些處理,」弗蘭克說。「但您無法用單一類型的加速器加速所有操作。您必須為管道構建一整套不同的加速器。CPU成為監護者,指導執行流程。它設置內容,執行DMA,提供決策過程。整個架構任務是理解和分析算法並定義如何優化它們的處理。」
這一過程的一部分需要進行分區。「沒有一種單一的處理器類型能夠針對每一個處理器任務進行優化——無論是FPGA、CPU、GPU還是DSP,」烏姆表示。「我們創建了一系列包含所有這些的設備,但客戶端的難點在於他們必須提供智能,以確定整個系統的哪些部分將針對處理器、可編程邏輯或AI引擎。每個人都希望有那種自動化工具,能夠立即決定將這個放在CPU上,將那個放在FPGA上,將那個放在GPU上。這種工具目前並不存在。」
不過,CPU總會有其角色。「CPU需要執行程序的不規則部分,」弗蘭克表示。「CPU的通用可編程性有其優勢。如果您有專門的數據結構或數學操作,它的表現就不佳。CPU是一種通用處理器,並不針對任何特定用途進行優化。它對任何事情都不擅長。」
改變
過去,硬件/軟件邊界由ISA定義,內存是連續可尋址的。當多個處理器存在時,它們通常是內存一致的。
「一致性是一種契約,」弗蘭克說。「這是一種代理之間的契約,說:‘我向你保證,我將始終提供最新的數據給你。’平等對等之間的一致性非常重要,並且不會消失。但你可以想像,在數據流引擎中,一致性不那麼重要,因為你正在直接將數據從一個加速器傳送到另一個。如果你對數據集進行分區,一致性會妨礙你,因為它會浪費額外的周期。你必須查找內容。你必須提供更新信息。」
這就需要不同的內存架構。「你必須考慮內存結構,因為你只有這麼多緊密耦合的內存,」烏姆表示。「你可以訪問相鄰的內存,但你很快就會耗盡能夠及時這樣做的相鄰性。這必須在設計中加以理解。隨著工具的成熟,這些將開始被工具理解。今天這是由人類智慧完成的,能夠理解架構並應用它。」
同時,也需要更高層次的抽象。「有一些框架可以將已知的網絡映射或編譯到目標硬件上,」托馬斯表示。「你有一組低級內核或API,這些將在軟件堆棧中使用,然後最終由神經網絡的映射器使用。在底層,根據你想要實現的目標,可能會有不同類型的硬件,根據你的產品細節。它實現相同的功能,但不是用相同的硬件,不是在相同的PPA權衡上。」
這對編譯器施加了很大的壓力。「主要問題是未來如何編程加速器?」弗蘭克問。「你是實現像第一代GPU那樣的硬連接引擎,還是構建具有自己指令集的小型可編程引擎?現在你必須逐個編程這些東西,並連接每個引擎,執行任務,形成數據流。一個處理器擁有總指令集的某個子集,另一個擁有不同的子集,它們都將共享一些重疊的控制流部分。你可能會有一些具有稍微不同的加速能力的處理器。編譯器或了解這些的庫會相應地進行映射。」
結論
處理器的架構並沒有改變。它們仍然遵循過去四十年來存在的相同選擇。改變的是芯片的構造方式。它們現在包含大量異構處理器,這些處理器的內存和通信針對某些應用任務進行了優化。每個芯片對處理器的能力及其優化的內容、所需的數據吞吐量以及通常會看到的數據流做出了不同的選擇。
每個硬件提供商都希望將其芯片與其他芯片區分開來,但這樣做比談論內部技術細節要容易得多。因此,他們給它取個名字,稱它為第一、最快、最大,並將其與特定類型的應用問題聯繫起來。這些三字母縮寫已經成為應用任務名稱,但它們並不定義硬件架構。
日本上網卡| 此文章《【說明】什麼是 xPU?與 GPU 是對手?AI 伺服器也需要它?》發佈於Techritual Hong Kong。