2022 年 5 月下旬,AWS 向公眾發布了 Graviton 3。Graviton 3 是第一個將 SVE 指令集引入可廣泛訪問的服務器 CPU 的 ARM CPU。在 Graviton 3 全面上市之前,Neoverse N1 主導了 ARM 服務器領域。AWS 之前的旗艦產品 Graviton 2 在 2.5 GHz 下實現了 64 個 Neoverse N1 內核。微軟的 Azure 和甲骨文的 OCI 都使用 Ampere Altra,它將 80 個 Neoverse N1 內核放在網格上,并以 3 GHz 的頻率為它們提供時鐘。因此,我們將在 Graviton 3 和 Neoverse N1 之間進行比較。我們將用 AMD 的 Zen 3 和英特爾的 Ice Lake SP (Sunny Cove) 的數據來補充這一點。截至 2022 年中期,這些是云環境中使用的最新廣泛部署的 x86 芯片,因此將成為 Graviton 3 最直接的競爭對手。TheNextPlatform提出了一個令人信服的論點,即 Graviton 3 基于修改后的 Neoverse V1 核心。分支預測:向前邁出的一大步與 N1 相比,ARM 顯著改進了分支預測器,并在速度和準確性方面取得了長足的進步。快速瀏覽一下 Graviton 3 的模式識別功能,可以清楚地看出它與 N1 完全不同。在云市場,Graviton 3 的主要 x86 競爭對手將是英特爾的 Ice Lake SP 和 AMD 的 Zen 3 Milan。Zen 3 似乎使用了一個具有令人難以置信的能力但略慢的二級預測器,而 Ice Lake 采用與 Graviton 3 非常相似的方法。英特爾和 ARM 似乎都使用可以識別很長模式的單級預測器,盡管不是與 AMD 的程度相同。當有很多分支在起作用時,Ice Lake 比 Graviton 3 有一點優勢。Graviton 3 可以識別長達 16 長(long)的模式和 512 個分支,而 Ice Lake 可以在相同的分支數下處理兩倍長的模式。同樣,AMD 似乎擁有大量的分支歷史存儲,因為它能夠處理多達 96 個模式和 512 個分支。Graviton 3 還具有令人印象深刻的快速 BTB(分支目標緩沖區)設置,使其能夠以非常小的代價處理已提取的分支。微型 BTB 允許核心在每個周期處理兩個采用的分支,這是迄今為止我們僅在 Golden Cove 和 Rocket Lake 上看到的功能。但是 Graviton 3 的 micro-BTB 容量比那些 Intel CPU 上的容量要大。Golden Cove 只能跟蹤 32 個分支,每個周期處理兩個分支,而 Rocket Lake 可以處理八個。ARM 還為 Graviton 3 配備了一個可能有 4K 條目的非常大的主 BTB,以及一個可能有多達 10K 條目的 L2 BTB。主 BTB 提供超過 Zen 3 的零冒泡分支能力。即使達到 L2 BTB 也不是很昂貴,每個分支只有一兩個pipeline 氣泡,有 10K 分支在運行。到目前為止,我們只看到 Golden Cove 實施了更大的 BTB。總而言之,Graviton 3 的分支預測器可與 Intel 和 AMD 的最佳預測器相媲美。每個 CPU 制造商做出不同的權衡,每個分支預測器都有其獨特的優勢,但 Graviton 3 的預測器顯示了 ARM 與最好競爭對手競爭的決心。這與 Neoverse N1 中的平庸實現相去甚遠,并且對于充分利用 Graviton 3 增加的重新排序能力應該有很長的路要走。前端:熟悉的模式,有技巧Graviton 2 和 3 都具有四寬解碼器,但差異到此為止。在解碼器后面,ARM 實現了一個具有 3K 條目的大型微操作緩存。因此,Graviton 3 的前端與 Intel 和 AMD 的前端非常相似。與 Neoverse N1 相比,Graviton 3 的解碼器功能要強大得多。它們能夠融合各種指令對。這包括 x86 風格的跳轉融合,其中標志設置指令和相鄰的條件跳轉可以融合到單個微操作中。Graviton 3 還實現了 CNS 式的 NOP 融合。成對的 NOP 可以融合到前端的單個微操作中。因為 Graviton 3 具有能夠緩存融合微操作的微操作緩存,所以每個周期將執行 12 個 NOP。Graviton 3 的 NOP 融合突破了基本的指令獲取帶寬測試,微操作緩存的結果很有趣但不切實際。為了解決這個問題,我們用簡單地將寄存器設置為零的指令填充了測試數組。這些不能以與 NOP 相同的方式融合,但可以以每個周期 6 次通過重命名器并在那里被消除。在取指令帶寬方面,Graviton 3 表現出與 Zen 3 相似的特點。兩者都有超大的 micro-op 緩存,都可以支持 6 個 IPC。除了 L2 之外,Zen 3 具有很大的優勢,因為 AMD 的架構優先考慮 L3 性能,而不是試圖在芯片上創建單個統一緩存。與云場景中的前身 Neoverse N1 相比,Graviton 3 憑借其微操作緩存享有更高的指令帶寬。從 L1D 獲取帶寬似乎是相等的,因為兩種架構(實際上是這個比較中的所有架構)都使用 4 寬解碼器。但在緩存層次結構的更下方,Graviton 3 享有更好的指令帶寬。ARM 可能給 Graviton 3 提供了更深的獲取隊列,讓內核使用其大型 BTB 來積極地預取指令。Graviton 3 出色的 L3 實現對此進行了補充,與 Ampere Altra 和 Graviton 2 相比,它提供了更低的延遲。非常大的指令占用空間的獲取帶寬仍然無法與 Intel 的 Ice Lake SP 或 AMD 的 Milan 相比,但 ARM 肯定在進步。我們還看到各種消息來源表明 ,Neoverse V1 有一個 5 寬的指令解碼器。如果 Graviton 3 基于 V1,解碼器似乎已被縮減為 4 寬。一旦我們離開 3K 條目微操作緩存,即使測試循環適合 64 KB L1 指令緩存,我們每個周期也不會看到超過 4 條指令。當從微操作緩存運行時,相同的測試指令可以超過每周期 4 個吞吐量,這表明獲取和解碼帶寬吞吐量限制,而不是進一步的流水線瓶頸。Graviton 3 的Renamer:新興能力Graviton 3 的renamer似乎是 6 寬,讓核心在整體寬度上與 Zen 3 相匹配。在renamer優化方面,Graviton 3 對 Neoverse N1 進行了改進。但是作為 CPU 制造商很難,因為你的競爭對手也總是在進步。AMD 在 Zen 中引入了極其強大的移動消除功能,而英特爾在 Sunny Cove 中也做了同樣的事情。這兩個 x86 CPU 都可以以匹配重命名器寬度的速率消除寄存器到寄存器移動指令。Graviton 3 無法做到這一點。MOV 顯然沒有被淘汰,因為吞吐量似乎受到 ALU 端口數的限制。與 Neoverse N1 一樣,Graviton 3 有時可以打破寄存器到寄存器 MOV 之間的依賴關系,但在該領域的功能非常有限。rename階段還可以打破依賴關系和/或消除將寄存器設置為零的指令,而不管其先前的值如何。據我們所知,只有將零移動到寄存器指令完全消除,并實現了等于renamer寬度的吞吐量。Graviton 3 在這方面比 Ice Lake 有優勢,因為英特爾的renamer可以在檢測到歸零慣用語時打破依賴關系,但不能消除它們。Zen 3 具有同等的能力——它可以識別常見的 x86 歸零慣用語并消除它們。亂序結構尺寸我們仍在忙于拆解 AWS 的新云 CPU。在這個預覽中,我們將展示一些原始測試結果和合理的解釋,因為結果并不總是直截了當的。讓我們從重新排序緩沖區大小開始。這個結構的大小對應于 CPU 的執行引擎可以跟蹤多少微操作。通常我們會用 NOP 進行測試,但 Graviton 3 的 NOP 融合能力使結果解釋變得復雜。對 NOP 的測試表明,Graviton 3 的 ROB 有 512 個條目。但是 ROB 的實際容量可能是 256 個條目,如果每個條目都存儲一個代表兩個 NOP 的融合微操作。因此,我們運行了一個在整數和 FP 指令之間交替進行的額外測試。該測試的重排序容量超過 256 個條目,這表明 Graviton 3 確實有 512 個 ROB 條目,并且融合的 NOP 在通過renamer后未融合。如果這個解釋是正確的,ARM 已經給 Graviton 3 一個比 Zen 3 和 Ice Lake 更大的亂序窗口。當我們繼續逆向工程寄存器文件大小時,另一個情況出現了。Graviton 3 似乎有 125 個 256 位寬的向量寄存器,但可以使用單個向量寄存器來跟蹤兩個標量 FP 寄存器。奇怪的是,它似乎無法使用單個 256 位 SVE 寄存器來跟蹤兩個 128 位 NEON 寄存器。另一個奇怪的現象是,如果我們排除內核對標量浮點寄存器的巨大renaming能力,Graviton 3 的寄存器文件的大小更適合 256 條目的 ROB。Graviton 3 的加載隊列容量也很突出。其他結構尺寸仍然適中,大致與我們在 Zen 2 和 Zen 3 上看到的一致。調度程序布局試圖弄清楚調度程序的大小需要太多的測試對分布式調度程序布局進行逆向工程非常困難、耗時且容易出錯。這就是為什么這是一個預覽而不是一個適當的深入研究。我們不會測試大量指令類型和組合以得出一個最合理的調度程序布局,而是提供一些指令類型的近似測量調度程序容量。Graviton 3 有很多調度程序條目可供常見操作使用。雖然我們仍然不確定調度程序的確切布局,但很明顯,Graviton 3 比 Neoverse N1 有了很大的飛躍。乍一看,它似乎與 Zen 3 和 Ice Lake 大致相當,至少在可用于常見操作的調度程序條目方面。這是 Graviton 3 調度程序的一種合理布局:執行單位Graviton 3 的執行單元相當強大,符合我們對高性能內核的期望。與 Neoverse N1 的三個相比,有四個整數 ALU,三個內存pipeline( Neoverse N1 只有兩個)。Graviton 3 的浮點和向量執行端得到了最大的升級,感覺就像是 Neoverse N1 的向量/FP 執行資源加了一個大的統一調度器的兩倍。256 位 SVE 浮點加法和乘法每個時鐘最多可以執行兩次,從而使 Graviton 3 的浮點吞吐量與支持 AVX 的 x86 內核相當。Graviton 3 還繼承了 Neoverse N1 的向量和浮點執行延遲,只是略微降低了整數乘法延遲。循環中某些操作的延遲。無論向量寬度如何,延遲似乎都是相同的,盡管我們尚未測試 SVE FMA 案例兩個周期浮點加法延遲非常可觀,與英特爾的 Golden Cove 相匹配。當然,這對于 ARM 來說要容易得多,因為 Graviton 3 運行在非常低的時鐘上。FP 乘法延遲與其他服務器 CPU 的延遲大致相當,并沒有什么特別突出的。向量整數執行延遲也很好,如果比 Zen 3 高一點,并且可能高于 Graviton 3 的低時鐘速度。就執行吞吐量而言,Graviton 3 可能有 4 個 128 位向量/FP pipeline ,因為它能夠為我們測試的所有操作(FP 加法、FP 乘法、整數加法)在每個周期執行一條以上的 SVE 指令。從理論上講,這將使 Graviton 3 為 NEON 和標量 FP 操作實現令人印象深刻的吞吐量,但對于 NEON FP 加法/乘法和整數加法,我們無法超過每周期三條指令的吞吐量。這可以通過寄存器文件帶寬限制來解釋,即每個周期所需的輸入。高速緩存和內存訪問潛伏Graviton 3 保留了 4 個循環,64 KB L1D。但是,ARM 改進了整個緩存層次結構的延遲。L2 容量保持不變,而延遲下降了兩個周期。L3 延遲在 Ampere Altra 上非常糟糕,謝天謝地,Graviton 3 的延遲要好得多。Graviton 2 和 Ampere Altra 使用相同的內核和相同的 L2 實現。這兩種設計主要在 L3 中有所不同,其中 Graviton 2 實現的延遲稍小一些,這可能要歸功于更小的網格。如果我們實時繪制延遲,Graviton 3 降低的周期計數在某種程度上被 Ampere Altra 的更高時鐘抵消了。在內存方面,與 Ampere Altra 和 Graviton 2 相比,Graviton 3 的延遲明顯下降。這可能是由于 DDR5 的延遲特性比 DDR4 更差。Graviton 3 還將內存控制器放置在單獨的 IO 小芯片上。這可能會加劇 DDR5 的延遲問題。Ice Lake 和 Graviton 3 采用大致并行的緩存策略。兩者都實現了芯片范圍內的統一 L3。并且兩者都為它們的內核提供了大型私有 L2 緩存,以使它們免受 L3 延遲的影響。AMD 采取了不同的方法,放棄了芯片級緩存,轉而為每個核心集群提供非常快的 L3。x86 競爭對手也使用多用途架構。Sunny Cove(在 Ice Lake 中使用)和 Zen 3 在客戶端平臺中提供雙重任務,它們可以達到遠遠超過 4 GHz 的時鐘速度,以最大限度地提高線程受限的性能。這種設計特征也出現在云中,Milan的 Epyc 和 Ice Lake Xeons 的時鐘明顯高于 Graviton 3。因此,在查看實際時間而不是時鐘周期時,我們看到了巨大的差異。Xeon 運行在 3.5 GHz,而 Epyc 運行在 3.23 GHz,基于寄存器到寄存器的附加延遲Zen 3 和 Ice Lake 都有更小、更快的 L1 緩存。在 L2,模式重復。Ice Lake 較高的周期計數延遲完全被其較高的時鐘所逆轉,使其超越了 Graviton 3。英特爾和 ARM 的基于網格的 L3 大致相當,具體取決于您在延遲圖中查看的位置。同樣,AMD 選擇了速度非常快的非統一 L3。當我們查看更大的測試規模時,DDR5 的延遲回歸再次出現。英特爾在單片芯片上使用 DDR4 控制器,為服務器芯片實現了極低的內存延遲。AMD 的 Epyc 使用小芯片,因此是與 Graviton 3 的一個非常有趣的比較。盡管兩者都會產生跨小芯片的損失,但 AMD 的內存訪問延遲比 Graviton 3 低大約 10 ns。我將這種差異歸結為 DDR5。帶寬在核心數量匹配的情況下,Graviton 3 的緩存提供了合理的性能,與 Ampere Altra 相比,提供了全面的帶寬改進。如果 SVE 發揮作用,Graviton 3 的 L1 和 L2 緩存帶寬將比 Neoverse N1 高出不少。借助廣泛支持的 NEON 指令,Ampere Altra 因其更高的時鐘而保持接近,但如果使用 SVE,Graviton 3 可能會失控但與其 x86 競爭對手相比,它并沒有那么令人印象深刻。由于高時鐘和同樣寬的矢量寬度,Zen 3 的緩存遠遠領先于 Graviton。Ice Lake 以更高的時鐘頻率和兩倍的矢量寬度更進一步,使其具有無與倫比的每核 L1D 帶寬。英特爾的服務器架構還具有到 L2 的寬 64 字節/周期路徑。使用 256 位 SVE 加載指令可以稍微縮小差距,但無法繞過低時鐘。DDR5 在我們的內存延遲測試中表現不佳,但它的優勢在帶寬測試中確實體現出來了。Graviton 3 的內存帶寬領先于其 x86 競爭對手。我們沒有太多關于整個服務器芯片的數據,主要是因為我們不是一個可以輕松獲得服務器東西的大型技術網站。但這是與我們擁有的數據的比較:正如預期的那樣,Graviton 3 比 Neoverse N1 具有巨大的優勢。與帶有 V-Cache 的 Epyc 相比,它在 L1、L2 和內存帶寬方面領先。然而,AMD 巨大、快速的 L3 仍然使其在某些測試規模上處于領先地位。最初的想法SVE 支持Graviton 3 之所以引人注目,是因為它是第一個支持 SVE 的通用 64 位 ARM 服務器 CPU。富士通的 A64FX 最先出現,但那是專為超級計算機設計的芯片,而非通用用途。我們還在一些最近發布的高端手機上看到了 SVE2 支持,但在其他服務器芯片上卻沒有。在不久的將來,這可能是一個有限的優勢。幾乎沒有支持 SVE 的軟件。GCC 將完全拒絕發出 SVE 指令(至少在我們有限的經驗中),即使您使用匯編,所以我們使用 Clang 來匯編我們的測試代碼。在接下來的幾年里,吸收可能會很緩慢。SVE 的市場滲透率遠不及 AVX(2),這讓 SVE 的情況讓人想起 2017 年 Skylake-X 面世時的 AVX-512。所以 Graviton 3 將不得不等待幾年才能判斷 SVE 是否給它帶來了顯著的優勢。但這也有問題。SVE2 已經推出,如果軟件使用 SVE2 中不存在的指令,那么 Graviton 3 將被拋在后面。對抗競爭AWS 的 Graviton 3 使用比 Neoverse N1 更強大的核心架構。N1 是當前 ARM 服務器產品的中流砥柱,這意味著 Graviton 3 是云中性能最高、廣泛可用的 ARM CPU。在接下來的幾年里,它很可能會留在那個位置。在 x86 的競爭中,Graviton 3 的單核性能可能比N1更接近 Zen 3 和 Ice Lake 。在分支預測、重新排序能力、執行資源和內核寬度方面,ARM 的 V1 微架構(假設這是 Graviton 3 的基礎)與英特爾和 AMD 當前的服務器產品處于同一水平。但我不指望 Graviton 3 能與 AMD 和 Intel 匹敵。Graviton 3 與其 x86 競爭對手之間存在巨大的時鐘速度差異,而且 V1 并不是更大更強大。從亞馬遜的角度來看該設計似乎非常狹隘地針對最大化云中的計算密度。為此,AWS 選擇了非常保守的核心時鐘。在 2.6 GHz 時,Graviton 3 的時鐘頻率僅比其前身 Graviton 2 高 100 MHz,而沒有增加每個芯片的核心數量。因此,Graviton 3 幾乎所有的性能優勢都來自每時鐘性能的提升。亞馬遜因此選擇使用臺積電最先進的 5 納米工藝來降低功耗。臺積電的 7 nm 工藝已經為低功耗設計創造了奇跡,而 5 nm 將進一步發展。雖然 Graviton 3 的核心比 N1 更強大,但它遠不如英特爾的 Golden Cove 雄心勃勃,仍應被視為中等設計。這樣一個在 5 nm 上以 2.6 GHz 運行的內核絕對可以降低功耗。這反過來又讓 AWS 將其中三個芯片打包到一個節點中,從而提高了計算密度。最終的結果是一種芯片可以讓 AWS 以更低的價格銷售每個 Graviton 3 內核,同時仍然比之前的 Graviton 2 芯片提供顯著的性能提升。