首頁  >  文章  >  科技週邊  >  特斯拉自研晶片架構帶來的啟示

特斯拉自研晶片架構帶來的啟示

PHPz
PHPz轉載
2023-04-08 22:51:02945瀏覽

如果我們說特斯拉只對機器學習感興趣是輕描淡寫的。事實上這家電動車製造商建造了一台名為 Dojo 的內部超級計算機,並針對訓練其機器學習模型進行了最佳化。

與許多其他超級電腦不同,Dojo 沒有使用現成的 CPU 和 GPU,例如 AMD、Intel 或 Nvidia 的。特斯拉根據他們的需求設計了自己的微架構,讓他們做出更通用架構無法做出的權衡。

在本文中,我們將根據特斯拉在 Hot Chips 上的示範來了解該架構。該架構沒有單獨的名稱,因此為簡單起見,每當我們在後面提到 Dojo 時,我們都在談論架構。

框圖

從高層次上看,Dojo 是一個8 寬內核,具有四路SMT,運行在保守的2 GHz,具有CPU 風格的pipeline,使其比GPU 更能容忍不同的演算法和分支程式碼。 Dojo 的指令集在標量方面類似於 RISC-V,但 Tesla 的工程師添加了一組自訂向量指令,專注於加速機器學習。

特斯拉自研晶片架構帶來的啟示

#特斯拉Dojo 核心的簡化框圖

Tesla 將Dojo 描述為「高吞吐量、通用CPU」。從性能的角度來看,這肯定有一些道理。但為了提高運算密度,特斯拉做出了犧牲,與我們在桌上型電腦、筆記型電腦和智慧型手機中熟悉的 CPU 相比,Dojo 核心非常難以使用。在某些方面,Dojo 核心的處理方式更像 IBM 的 Cell 中的 SPE,而不是傳統的通用 CPU 核心。

像Cell的 SPE?

在2000 年代中期推出的IBM Cell 處理器具有八個「協同處理元件」(Synergistic Processing Elements)或SPE,由一個功能齊全的CPU 核心(「電源處理元件”或PPE:Power Processing Elemen)控制。乍一看,Dojo 與 SPE 有很多相似之處。 

Dojo 和 SPE 都針對向量處理進行了最佳化,並且依賴單獨的主機處理器進行工作分配。在 Dojo 或 SPE 上運行的程式碼不能直接存取系統記憶體。相反,應用程式預計主要在一小部分本地 SRAM 中運作。此本機 SRAM 由軟體管理,不能用作快取。如果需要來自主記憶體的數據,則必須使用 DMA 操作將其引入。 

最後,Dojo 和 Cell 的 SPE 都缺乏對虛擬記憶體的支援。稍後我們將詳細介紹這意味著什麼,但簡而言之,它使多任務處理變得非常困難。

特斯拉自研晶片架構帶來的啟示

Tesla Dojo 和IBM Cell SPE 之間的非常簡化的比較

Dojo 在幾個重要方面有所不同。由於 Dojo 在設計時並未考慮小規模部署,因此主機處理器駐留在單獨的主機系統上。這些主機系統具有具有介面處理器的 PCIe 卡,然後透過高速網路連結連接到 Dojo 晶片。相比之下,Cell 的主處理器駐留在同一個晶片上。這使得單獨部署單一 Cell 晶片成為可能——這在 Dojo 中是不可能的。

Dojo 的 1.25 MB 本機區塊是 SRAM,它比只有 256 KB SRAM 的 Cell SPE 大得多,頻寬也更高。 Cell 的 256 KB SRAM 只有一個端口,每個週期能夠提供 128B。 Dojo 的 SRAM 有五個 64B 連接埠。當然,架構目標是非常不同的。 Dojo 是寬時脈和低時鐘,而 Cell SPE 則具有專為高時脈設計的窄而深的pipelines。

前端:CPU Comforts等

讓我們從前端開始簡單介紹 Dojo 的pipelines。有某種分支預測器,因為特斯拉的圖表顯示了 BTB(branch target buffer:分支目標緩衝區)。它的預測能力可能無法達到我們在 AMD、ARM 和 Intel 的高效能核心上看到的水平,因為 Dojo 需要優先考慮在向量執行上花費晶片區域。但即使是一個基本的分支預測器也比沒有預測器有了很大的進步,Dojo 的分支預測能力在處理分支代碼或更大的指令佔用空間時應該比 GPU 提供更好的性能。

一旦分支預測器產生了下一指令提取指針,Dojo 可以每個週期從「小」指令快取中提取32 個位元組到每個執行緒的提取緩衝區中(per-thread fetch buffers)。該指令快取可能有助於降低本地 SRAM 的指令頻寬壓力,確保資料端可以存取 SRAM 時盡可能少地爭用。此外,指令高速緩存不連貫。如果將新程式碼載入到本機 SRAM 中,則必須在分支到該新程式碼之前刷新指令快取。

特斯拉自研晶片架構帶來的啟示

#來自特斯拉的Hot Chips 簡報

從擷取緩衝區中,Dojo 的解碼器每個週期可以處理來自兩個執行緒的八個指令。我對「每個週期兩個執行緒」的含義有點困惑,因為具有 SMT 的 CPU 通常每個週期處理一個執行緒並在週期邊界上切換執行緒。也許 Dojo 將解碼器分成兩個集群,並選擇兩個線程在每個循環中為它們提供資料。這可能會減少所採用分支的解碼吞吐量損失。 

在解碼時,某些指令(如branches, predicated operations和immediate loads (“list parsing”) )可以在前端執行並從pipeline中刪除。這有點像更新的 x86 CPU 在重命名器(renamer)中消除了寄存器到寄存器的副本。但是您沒聽錯—Dojo 不會透過pipeline追蹤「已消除」的指令以維持in-order retirement。其他處理器追蹤所有內容以退出,以便它們可以在任何指令邊界處停止,並保持恢復執行所需的所有狀態。這種能力被稱為“precise exceptions”,現代作業系統使用它來提供各種好東西,例如paging to disk,或告訴你你的程式碼到底在哪裡搞砸了。 

特斯拉並不關心precise exceptions。 Dojo 確實具有調試模式,其中更多指令通過pipeline以提供「更精確」的exceptions,但沒有像正常無序 CPU 那樣的有序退出邏輯。

Dojo 的執行引擎

在看到一個寬前端之後,看到一個只有兩個ALU 和兩個AGU 的4 寬整數執行引擎可能會有點奇怪。但是這個漏斗形的管線是有意義的,因為有些指令是在前端執行和丟棄的。

Dojo 也不會進入客戶端系統,其中標量整數效能很重要。因此,整數端提供了足夠的吞吐量來處理控制流程和位址生成,以保持向量和矩陣單元的饋送。 

Dojo 的向量和矩陣執行端放置在核心pipeline中的標量執行引擎之後,並且有兩個執行pipeline。兩個pipeline可能聽起來不多,但 Dojo 在這些pipeline後面有非常寬的執行單元。一個pipeline可以執行 512 位元向量執行,而另一個pipeline執行 8x8x4 矩陣乘法。因此,只要指令公開足夠的明確並行性,Dojo 就能夠實現非常高的吞吐量——尤其是在使用矩陣單元的情況下。 Tesla 聲稱具有 354 個 Dojo 核心的晶片在 2 GHz 時可以達到 362 BF16 TFLOPS,這表明每個核心每個週期可以執行 512 BF16 FLOPS。 

我們不確定 Dojo 是否可以完全亂序執行。但特斯拉確實表示,整數端可以在向量端之前運行很遠,這表明它可以執行過去停滯的指令,直到其中一個調度程序被填滿。缺乏依序引退也指向無序執行能力。 

#

通常,實作無序執行會帶來許多複雜性。這是因為 CPU 必須依序執行指令。 AMD、ARM 和 Intel 的高效能 CPU 使用大型重新排序緩衝區(和其他結構)追蹤指令,以便它們的結果可以按程式順序提交。這意味著如果一個程式做了一些愚蠢的事情,例如除以零,這些核心可以準確地顯示哪個指令出錯了。而且,它們可以顯示 CPU 狀態,該狀態反映了故障之前所有指令的動作,但之後沒有。這意味著您可以修復導致指令錯誤的任何原因,並恢復執行。 Dojo 放棄了這種能力。作為交換,Dojo 可以避免與透過其pipeline追蹤每條指令相關的功率和麵積開銷,以確保按程序順序提交結果。 

SRAM 存取

#通常,我們會在這裡討論快取。但是 Dojo 不能直接存取系統內存,所以我們將討論 1.25 MB 的 SRAM 區塊。它每個週期可以處理兩個 512 位元負載,使其每個週期的頻寬與支援 AVX-512 的英特爾 CPU 相符。 Tesla 表示 SRAM 有五個 512 位元連接埠(2 個載入連接埠、1 個儲存連接埠和兩個到網格停止連接埠)。但是標量端只有兩個 AGU,這可能意味著核心無法在每個週期內承受兩個 512 位元負載和一個 512 位元儲存。

因為 Dojo 的本機 SRAM 區塊不是緩存,所以它不需要與資料一起儲存的標記和狀態位元。 SRAM 前面也沒有 L1D 緩存,因此它必須足夠快以處理所有載入和儲存指令而不會造成瓶頸,即使它的大小更接近 L2 快取。不將 SRAM 實現為快取可能是特斯拉保持低延遲的方式。如果我們回顧很久以前的 AMD 的 Hammer 架構,我們可以看到在偵測到 L1D 未命中後存取 1 MB L2 需要 8 個週期(總延遲為 12 個週期)。如果直接定址1 MB 的SRAM 而不是用作緩存,則可能會刪除三個階段,從而將延遲降低到5 個週期:

來自較早的Hot Chips 演示文稿的幻燈片,顯示了L2 快取存取所涉及的pipeline階段。如果 L2 不是緩存,則可以跳過的階段標記為紅色。

考慮到幾十年的製程節點改進,甚至比Athlon 更低的時脈速度目標,很容易看出特斯拉如何以類似L1 的延遲存取L2 大小的SRAM塊。跳過一級快取當然可以節省面積和功耗。 

為了進一步減少延遲、面積和核心複雜性,Dojo 沒有虛擬記憶體支援。因此,它沒有 TLB 或頁面遍歷機制(page walk mechanisms)。現代作業系統利用虛擬記憶體為每個進程提供自己的記憶體視圖。程式使用的記憶體位址不是直接存取實體記憶體位址,而是由 CPU 使用作業系統設定的分頁結構轉換為實體位址。這就是現代作業系統如何使程式相互隔離,並防止一個行為不端的應用程式導致整個系統癱瘓。 

虛擬記憶體也是您可以運行比實體記憶體更多的程式的方式。當您用完實際記憶體時,作業系統會取消映射頁面,將其寫入磁碟,並為您的程式提供所需的記憶體。當其他糟糕的程式嘗試存取該記憶體時,CPU 會嘗試將虛擬位址轉換為實體位址,但發現轉換不存在。 CPU 拋出頁面錯誤異常,作業系統透過將被驅逐的頁面讀回實體記憶體並填寫頁表條目來處理該異常。 

在 Dojo 上這些都不可行。核心的 4 路 SMT 功能更多的是讓單一應用程式公開顯式並行性,而不是提高多任務處理效能。例如,一個線程可以執行向量計算,而另一個線程將資料從系統記憶體非同步載入到 SRAM(透過 DMA)。 

為了進一步簡化設計,Dojo 可以只使用 21 個位址位元來定址 SRAM,這可以簡化 Dojo 的 AGU 和尋址匯流排。這些權衡可能讓特斯拉以足夠低的延遲存取該 SRAM,以避免在其前面實現單獨的 L1 資料快取。 

記憶體存取

說到系統內存,Dojo 晶片並不會直接連接到記憶體。相反,它們連接到配備 HBM 的介面處理器。這些介面處理器也負責與主機系統通訊。

特斯拉自研晶片架構帶來的啟示

#

具有25 個獨立晶片的Dojo tile 可以存取160 GB 的HBM 記憶體 Tesla 表示,他們可以跨tile 邊界從每個晶片邊緣傳輸900 GB/s,這意味著可以以4.5 TB/s 的鏈路頻寬存取介面處理器及其HBM。因為存取 HBM 需要通過單獨的晶片,所以存取延遲可能非常高。 

是小,如何做到的?

Dojo 是一個 8 寬的內核,具有至少一些 OoO 執行能力、不錯的向量吞吐量和一個矩陣乘法單元。但即使有 1.25 MB 的本機 SRAM,它最終還是一個非常小的核心。相較之下,富士通的A64FX在同一製程節點上所佔的面積是其兩倍以上。處理器設計就是要做出正確的權衡。特斯拉希望透過將大量核心封裝到晶片上來最大限度地提高機器學習的吞吐量,因此單一核心必須很小。為了實現其區域效率,Dojo 使用了一些熟悉的技術。它以保守的 2 GHz 運作。較低的時脈電路往往佔用較少的面積。它可能有一個基本的分支預測器和一個小的指令快取。如果程式的程式碼佔用量很大或有很多分支,這會犧牲一些效能。

 但特斯拉也透過削減運作內部工作負載所不需要的功能來進一步減少功耗和麵積使用。它們不進行資料端緩存,不支援虛擬內存,也不支援precise exceptions。

 特斯拉自研晶片架構帶來的啟示

結果是一個處理器核心提供了現代CPU 核心的效能彈性,同時在許多方面不如Intel 8086對使用者和程式設計師友好。除了核心之外,Tesla 還透過設計專門用於部署的 Dojo 晶片來節省晶片面積大規模。 

物理實作

縮小,Dojo 核心是在一個非常大的 645 平方毫米的裸片上實現的,稱為 D1。與我們熟悉的其他晶片不同,單一 Dojo 晶片不能自給自足。它沒有 DDR 或 PCIe 控制器。 die 邊緣周圍有 IO 接口,可以讓 die 與相鄰的 die 進行通信,延遲約 100 ns。

特斯拉自研晶片架構帶來的啟示

要存取系統內存,Dojo D1 晶片必須與具有板載 HBM 的介面處理器通訊。此介面處理器又透過 PCIe 連接到主機系統(介面處理器安裝在 PCIe 卡上)。理論上,最小的功能性 Dojo 部署將涉及一個 Dojo 晶片、一個介面處理器卡和一個主機系統。但特斯拉將 Dojo die部署在每個包含 25 個die的模組中,以提供規模感。 Dojo D1 die專門設計用於超級電腦的構建塊,僅此而已。 

特斯拉自研晶片架構帶來的啟示

這種專業化可以節省更多的晶片面積。 Dojo D1 不會在 DDR 和 PCIe 控制器上花費空間。大部分晶片都被大量 Dojo 核心佔據,除了外部設計用於與相鄰裸片接口的定制 IO 連接器。

 特斯拉自研晶片架構帶來的啟示

相較之下,設計時考慮到更多部署彈性的晶片在IO 上花費了大量空間。 AMD 的 Zen 1 “Zeppelin” 晶片很好地展示了這一點。 Zeppelin 可以直接連接到 DDR4 記憶體、PCIe 裝置、SATA 磁碟機和 USB 裝置——非常適合滿足客戶要求。在伺服器中,IFOP 介面讓它與相鄰的晶片進行通訊。位於 IFOP 附近的大塊 SRAM 可能是窺探過濾器(snoop filters),有助於在高核心數設定中有效地保持快取一致性。 Dojo 不會嘗試跨核心保持快取一致性,並且不會將任何 SRAM 用於窺探過濾。

特斯拉自研晶片架構帶來的啟示

#來自AMD 在ISSCC 2021 上的小晶片示範

#AMD 透過將大約44% 的「Zeppelin」裸片區域用於除核心和快取之外的邏輯來為這種靈活性付出代價。 Dojo 僅將 28.9% 的晶片面積用於 SRAM 和核心以外的東西。

最後的話

特斯拉Dojo 超級電腦背後的微架構展示如何實現非常高的運算密度,同時仍保持CPU處理分支程式碼的能力。要到達那裡,您需要放棄定義我們現代計算體驗的大部分舒適設施。如果您可以假設圍繞 Dojo 核心建立您的桌面,那麼任何使用過 MS-DOS 的人都可能會覺得這種體驗很熟悉。您不能同時執行多個應用程式。單一行為不端的應用程式可能會迫使您重新啟動系統。如果您沒有足夠的 RAM 來運行某個程序,您可以完全忘記運行它(無需分頁到磁碟)。 

但這些權衡在特斯拉的超級電腦中非常有意義。 Tesla 不需要 Dojo 核心來同時處理多個正在運行的應用程序,Dojo 只需運行內部的可信程式碼。所以,特斯拉並不關心虛擬記憶體支援。同樣,在 Dojo 上運行的機器學習程式將在編寫時考慮到該特定係統。您不會有一批任意程式可能要求比可用記憶體更多的記憶體。這意味著您不需要precise exceptions(和虛擬記憶體)來允許諸如過度使用記憶體、記憶體壓縮或在磁碟之間交換記憶體頁面等技術。 precise exceptions對於調試也很有用,但 Tesla 透過單獨的調試模式以更便宜的方式進行調試。

特斯拉自研晶片架構帶來的啟示

可以肯定的是,特斯拉為獲得高運算密度而採用的權衡取捨在消費者或伺服器CPU 中是不可能的。但他們在行動中非常有趣,我們必須感謝特斯拉花時間在 Hot Chips 上展示。 在過去的二十年裡,進程節點的改進一直在放緩,導致單執行緒效能的進步更慢。在過去的五年中,電源和冷卻限制一直在降低多執行緒效能。但對更多運算能力的需求並沒有放緩,因此公司正在轉向更專業的硬體以跟上步伐。

Tesla 的Dojo 超級電腦中的架構是一個很好的例子,說明如何進行權衡以提高運算密度,以及當前趨勢如何有利於為吞吐量受限的應用程式引入專用硬體。

以上是特斯拉自研晶片架構帶來的啟示的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除