前不久我們體驗了Intel 12代酷睿桌面處理器。這代處理器的特點是CPU部分采用兩種核心,P-core和E-core。這種設計在PC世界里很少見。
其中的E-core乃是“刷分神器”,尤其是在Cinebench這樣的測試中。E-core作為占die面積顯著更小的一種核心,也讓今年Intel處理器的核心堆砌顯得比以往方便得多。所以今年酷睿i9-12900K也很輕易地達成了16核心設計,隔壁AMD再也無法秒天秒地秒空氣了。

2017-2018年,AMD通過Zen架構的推出,在PC處理器領域打了個翻身仗,讓Intel這些年的日子越來越不好過。但我們此前的分析文章也不止一次地提到過,AMD Zen就核心架構層面也沒什么了不得的,其核心層面的性能頂多也就是趕上了Intel。
AMD這兩年讓Intel真正不好過的是處理器的多核性能。說穿了就是AMD家PC處理器的核心數之多,能把Intel打得找不著北。當然就個人應用領域,很多CPU核心未必有太大實用價值,但跑分和媒體都喜歡嘛(誤)。
這里就有個疑問,AMD給自家處理器堆了這么多核心,Intel為什么不也這么干呢?偏要等到今年出了混合架構,才開始通過E-core堆出更多核心?很多同學首先想到的,應該是Intel工藝暫時落后于臺積電的事實。這的確是一個因素,更大線寬的工藝,堆起核心來自然要耗費更多的芯片面積——也就是成本;而且對功耗也相當的不利。
但實際上還有一些架構層面的原因,是相關于核心之間的連接方式的。
Intel的環形總線
Alder Lake架構分析文章提到過處理器內部的“Computer Fabric”是dual-ring雙環設計(如下圖),帶寬是1000GB/s。這其實是當代PC處理器的常規設計。簡單理解,就是將所有處理器核心掛在一個環上,當然這個環上還有一些別的模塊(比如GPU、I/O)。核心之間的通訊就通過環形結構進行。

這種設計最早可以追溯到2008年Intel的Nehalem架構處理器(當年確立酷睿處理器地位,把AMD徹底甩在身后的一代架構)。
更早年die內的核心間連接方式不是這樣的。如果只考慮CPU核心的話,兩個核心直接連接即可;如果是3個核心,則兩兩互聯,亦不是問題......不過此處還需要考慮到需要與核心產生連接的,遠不只是處理器核心。

在只有1個核心的情況下,其他周邊節點可以星型的方式,圍繞核心做星型連接。雙核大概可以采用雙星結構。但隨著核心數增加,這種連接關系就會顯得越來越復雜。
在處理器一個die內的核心數達到4個的時候,核心之間的連接就會產生分歧了。以全連接的方式連接,則核心之間需要兩兩相連——聽起來似乎也還好。而當核心數增加到6個的時候,全連接的復雜度顯著增加。

6核心全連接
這種全連接方案當然能夠達成最高的互聯性能,包括帶寬和延遲。但全連接也意味著設計復雜度、成本和功耗的增加。這個時候環形總線就成為一個不錯的選擇(如下圖),尤其這種方案對于增加核心數更友好——把模塊加上去就好了。不同模塊的互聯起碼是符合直覺的。
Intel的環形總線Ring Bus通常是雙環,數據流向是兩個方向。環形總線和全連接方案相比,每兩個模塊之間的平均通訊距離實際上是更長的,最長的時候可能需要經過半個環。這就產生了延遲、帶寬方面的變數。
這種Ring Bus在實施復雜度、成本和功耗方面都達到了相對的平衡——尤其在核心數更多的情況下。如果4個模塊做全連接,那么每個模塊都要做3個連接,每兩個模塊之間的通訊長度是1跳。這4個模塊若為雙向環形通訊,則每個模塊做2個連接,平均每兩個模塊之間的通訊長度是1.3跳。達到6個模塊的時候,全連接每個模塊就要做4個連接;環形連接時,每個模塊依然是2個連接,平均通訊距離為1.8跳。

Ring Bus
如前文所述,在考慮當代PC CPU多核心(比如現在高端桌面處理器是8個核心),以及DRAM控制器、I/O、核顯之類的構成時,全連接的復雜性將變得難以為繼。環形總線至此都還是權衡利弊的方案。
但環形總線也不是萬能的,當核心數進一步增加時,問題就會變得比較大了。在核心數增加到10個,甚至12個以后,ring也將變得很大,核心間的延遲將進一步增大;要喂給核心的數據帶寬需求變大。
這其實也是Intel當代的酷睿處理器很難在核心上可與AMD Ryzen去比的重要原因。所以10代酷睿處理器最多塞了10個核心,而11代則只塞了8個核心(與工藝限制有很大關系)。單die之下,再塞核心一方面會讓die size變得過大,影響良率和成本;另一方面核間通訊效率也會大幅下降。

12代酷睿i9-12900K die shot,注意看藍色的8個P-core,和青色的8個E-core
所以12代酷睿是怎么做的呢?目前12代酷睿桌面處理器最高端的型號i9-12900K包含8個P-core與8個E-core。其中E-core的面積效益非常高,占die面積比P-core小多了。更重要的是,在Intel的設計中,每4個E-core構成一簇,在Ring Bus環形總線上才相當于一個stop。于是8個E-core,實際上總共只占了Ring Bus上的2個位置。加上Intel 7工藝的加持,12代酷睿達成了性能、成本和功耗的均衡。
這算是這一輪PC處理器核心大戰中,Intel有喘息之機、扳回一城的重要戰果。

實際上,對于服務器CPU這類核心數明顯又更多的處理器而言,Intel也嘗試過用兩個ring(兩個雙ring),然后把兩個ring再連起來的方案。在至強處理器(Broadwell-EP)這一例中,每個Ring Bus都掛上了12個核心,當然還有外部存儲、I/O相關的模塊。左邊這個ring上掛了17個節點。左右兩個ring則用雙向Pipe Line連接。
另外,針對多模塊互聯,Intel其實也嘗試過其他的方案。通常是介于環形總線和全連接的方案,主要都是為了權衡功耗、性能和成本。但當核心數再行增加之時,又該怎么做呢?
mesh與crossbar方案
參考Arm面向服務器的Neoverse處理器IP:比如Neoverse N1,就核心微架構層面,它與手機上很多人熟知的Cortex A76是比較類似的,只是因為服務器處理器核心數可能會非常多(Arm這兩代的最高配都預設了128個核心),自然不可能用環形或全連接方案。

此前我們針對Neoverse N1、N2的解析文章都談到過連接用到的mesh網絡;當然x86現在的服務器處理器普遍也都是這么干的。在2D mesh網絡連接下,大致連接方案如上圖所示,就像圍棋棋盤一樣互聯。

這種方案在不同節點之間的延遲上依然存在變數,對于某些較重的數據流事件而言,數據可能需要經過比較長的路徑才能到達目的地。以Skylake-SP為例,當時mesh和L3 cache跑在1.8-2.4GHz的頻率上,低于同期的ring運行頻率(Boradwell-EP)。Mesh對于更多核心的支持本身也會增加延遲。比如說某個核心要訪問臨近的L3 cache,每1跳要多1個周期。最壞的情況是,從右上角的節點,獲取左下角的節點數據,需要13個周期。
其實Skylake-EP問世之際采用mesh連接方案,雖然比此前的Broadwell-EP多連了幾個核心,但平均延遲其實跟后者是差不多的。
不過這些都會隨著核心數的進一步增加而顯得沒那么重要。Mesh連接的layout簡單,而且靈活性、可擴展性很強——這是Ring Bus無能為力的,起碼對于再增加核心數有著更高的適應性。
如果仔細對比:在處理器核心數再增多的情況下,采用兩個ring,以及采用2D mesh網絡相比,平均兩個核心間的通訊,以及核心與DRAM、I/O的通訊會顯著更優。前文中至強處理器那種兩個ring的方案,尤其某個核心如果要跨越ring,去訪問另一個ring上的內存控制器,則所需的周期開銷會非常巨大。
另外,在2D mesh之外,現在探討3D mesh的文章似乎也都很熱門。即在chip-on-chip堆疊方案開始廣泛采用之際,mesh網絡在interposer硅中介層實施,也就能夠進一步降低核心通訊的延遲。

AMD Zen架構處理器的一個簇(CCX)
那么說回AMD,AMD在PC處理器上用的是mesh網絡連接,所以堆核心才那么容易嗎?并不是。AMD當代Zen架構處理器還是比較特殊的,我們在此前的文章里曾經介紹過。
從比較高的層面來看,AMD的PC處理器現在普遍在采用chiplet方案。也就是每個芯片是由好幾片die(或chiplet)構成的。每個die上都有幾個核心;然后通過一枚I/O die作為通訊中心,連接所有包含了處理器核心的die。
具體來看,Zen 2架構處理器,每4個核心組成一個簇(CCX),每2個簇組成一個die(CCD)。而兩個或更多的die構成一顆完成的芯片(當然還要加一個負責通訊的I/O die)。到了現在的Zen 3,則每8個核心構成一個簇。
像AMD Ryzen R9(5950X)能堆出16個核心,這種基于chiplet的方案首先就是功不可沒的。基于chiplet的方案,至少從工藝層面上就擺脫了核心數增多讓die變得過大導致成本急劇增長的問題,因為把整個芯片切分成了很多的小die,那么在生產制造時也就可以增加良率、降低成本。這和Intel把那么多核心都塞到同一個die上的方案不一樣。(雖然筆者認為,AMD的這種做法對PC行業本身是否真的有很好的正向價值,是值得商榷的)
當然,這只是制造層面堆核的基礎。我們其實并不清楚AMD Zen架構處理器的核心之間究竟是如何通訊的。有可能每個簇(每8個核心)之間采用的是Ring Bus,此前AnandTech采訪AMD問及其簇內部的8個核心是否是全連接的,AMD回答稱并非如此,但比較接近。所以可能是某種介于環形和全連接的方案。


看看下面的I/O die
而die之間又是怎么連接的呢?從高層級來看,AMD現在的處理器的計算die之間當然需要經由I/O die來做通訊。而這個I/O die,在扮演的角色上其實更像是crossbar:就像一個路由器或者指揮中心一樣,負責不同網絡之間的通訊。
其實在更高層級上,物理外置的crossbar比較具有代表性的如英偉達的NVSwitch:將多GPU連在一起——可能層級有差異。不過crossbar內部總是采用某些連接方式,比如說mesh;從抽象維度來看,每個節點到crossbar都只需要1個連接,但其能夠實現的帶寬、效率仍然可能是可觀的。
AMD Zen架構處理器的I/O die連接所有的計算die,這是個Ring Crossbar結構設計。AnandTech在探討文章中提到,I/O die的這個環可以掛8個stop。在ring連接之外,某些stop之間也會有連接——所以不同節點之間的通訊延遲也存在差異,以及I/O die也并不是單純的環形連接。似乎將計算die內互聯,和die間互聯考慮進來,這樣的方案也還是比較復雜的。

其實AMD當前做多die封裝的技術并不先進,未來基于硅中介的2.5D封裝才是此間的趨勢,雖然成本也會更高。這一點,此前談臺積電與Intel先進封裝技術的文章都已經分析過。加上3D堆疊垂直封裝,可能未來基于chiplet堆核心的空間還是很大的。
而且不僅是CPU,今年隨同12代酷睿一同發布的、Intel面向數據中心市場的GPU Ponte Vecchio才是chiplet方案的集大成者吧。要看到Intel持續在PC CPU上堆料也不會遙遠。雖然我們始終覺得,堆核心對個人用戶而言存在更為嚴重的邊際遞減效應。核心數量大戰未見得是好事。
- 作者不知道AMD Infinity fabric的情況下也可以寫科普文?厲害了ee times china