為何Intel核心數會「堆」不過AMD?

作者 : 黃燁鋒

AMD為自家處理器堆了這麼多核心,Intel為什麼不也這麼做呢?偏要等到今年出了混合架構,才開始透過E-core堆出更多核心?

前不久體驗Intel第12代Core桌面處理器。這代處理器的特點是CPU部分採用兩種核心——P-core和E-core,這種設計在PC世界裡很少見。其中的E-core乃是「刷分神器」,尤其是在Cinebench這樣的測試中。E-core作為佔die面積顯著更小的一種核心,也讓今年Intel處理器的核心堆砌顯得比以往方便得多。所以今年Core 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,下圖),頻寬是1,000GB/s。這其實是當代PC處理器的常規設計。簡單理解,就是將所有處理器核心掛在一個環上,當然這個環上還有一些別的模組(如GPU、I/O),核心之間的通訊就透過環形結構進行。

 

 

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

 

 

在只有1個核心的情況下,其他周邊節點可以星型的方式,圍繞核心進行星型連接,雙核心大概可以採用雙星結構。但隨著核心數增加,這種連接關係就會顯得越來越複雜。

在處理器一個die內的核心數達到4個的時候,核心之間的連接就會產生分歧。以全連接的方式連接,則核心之間需要兩兩相連——聽起來似乎也還好。而當核心數增加到6個的時候,全連接的複雜度顯著增加。

 

6核心全連接。

 

這種全連接方案當然能夠達成最高的互連性能,包括頻寬和延遲。但全連接也意味著設計複雜度、成本和功耗的增加。這個時候環形匯流排(Ring Bus)就成為一個不錯的選擇(下圖),尤其這種方案對於增加核心數更友好——把模組加上去就好了,不同模組的互連起碼符合直覺。

Intel Ring Bus通常是雙環,資料流程向是兩個方向。Ring Bus和全連接方案相比,每兩個模組之間的平均通訊距離實際上更長,最長的時候可能需要經過半個環。這就產生了延遲、頻寬方面的變數。

這種Ring Bus在實施複雜度、成本和功耗方面都達到了相對的平衡——尤其在核心數更多的情況下。如果4個模組做全連接,那麼每個模組都要做3個連接,每兩個模組之間的通訊長度是1跳。這4個模組若為雙向環形通訊,則每個模組做2個連接,平均每兩個模組之間的通訊長度是1.3跳。達到6個模組的時候,全連接每個模組就要做4個連接;環形連接時,每個模組依然是2個連接,平均通訊距離為1.8跳。

 

Ring Bus。

 

如前所述,在考慮當代PC CPU多核心(比如現在高階桌面處理器是8核心),以及DRAM控制器、I/O、核心顯示之類的構成時,全連接的複雜性將變得難以為繼,Ring Bus至此都還是權衡利弊的方案。

但Ring Bus也不是萬能的,當核心數進一步增加時,問題就會變得比較大。在核心數增加到10個,甚至12個以後,環也將變得很大,核心間的延遲將進一步增大;要餵給核心的資料頻寬需求變大。

這其實也是Intel當代的Core處理器很難在核心上可與AMD Ryzen相比的重要原因。所以第10代Core處理器最多塞了10個核心,而11代則只塞了8個核心(與製程限制有很大關係)。單die之下,再塞核心一方面會讓die size變得過大,影響良率和成本;另一方面核間通訊效率也會大幅下降。

 

第12代Corei9-12900K die shot,請注意藍色的8個P-core,和青色的8個E-core。

 

所以第12代Core是怎麼做的呢?目前第12代Core桌面處理器最高階的型號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代Core達成了性能、成本和功耗的均衡。

這算是這一輪PC處理器核心大戰中,Intel有喘息之機、扳回一城的重要戰果。

 

 

實際上,對伺服器CPU這類核心數明顯又更多的處理器而言,Intel也嘗試過用兩個ring (兩個雙ring),然後把兩個ring再連起來的方案。在Xeon處理器(Broadwell-EP)這一例中,每個Ring Bus都掛上了12個核心,當然還有外部儲存、I/O相關的模組。左邊這個ring上掛了17個節點。左右兩個ring則用雙向Pipe Line連接。

另外,針對多模組互連,Intel其實也嘗試過其他的方案。通常是介於Ring Bus和全連接的方案,主要都是為了權衡功耗、性能和成本。但當核心數再行增加之時,又該怎麼做呢?

mesh與crossbar方案

參考Arm針對伺服器的Neoverse處理器IP:如Neoverse N1,就核心微架構層面,它與手機上很多人熟知的Cortex A76比較類似,只是因為伺服器處理器核心數可能會非常多(Arm這兩代的最高配都預設了128個核心_,自然不可能用環形或全連接方案。

 

 

先前談到過連接用到的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連接的佈局簡單,而且靈活性、可擴展性很強——這是Ring Bus無能為力的,起碼對於再增加核心數有著更高的適應性。

如果仔細對比:處理器核心數再增多的情況下,採用兩個ring,以及採用2D mesh網路相比,平均兩個核心間的通訊,以及核心與DRAM、I/O的通訊會顯著更佳。前文中Xeon處理器那種兩個ring的方案,尤其某個核心如果要跨越ring,去訪問另一個ring上的記憶體控制器,則所需的週期開銷會非常巨大。

另外,在2D mesh之外,現在探討3D mesh的文章似乎也都很熱門。即在chip-on-chip堆疊方案開始廣泛採用之際,mesh網路在interposer矽仲介層實施,也就能夠進一步降低核心通訊的延遲。

 

AMD Zen架構處理器的一個簇。

 

AMD在PC處理器上用的是mesh網路連接,所以堆核心才那麼容易嗎?並不是,AMD當代Zen架構處理器還是比較特殊。從比較高的層面來看,AMD的PC處理器現在普遍在採用chiplet方案,也就是每個晶片是由好幾片die (或chiplet)構成。每個die上都有幾個核心;然後透過一枚I/O die作為通訊中心,連接所有包含了處理器核心的die。

具體來看,Zen 2架構處理器,每4個核心組成一個簇,每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比較具有代表性的如Nvidia的NVSwitch:將多GPU連在一起——可能層級有差異。不過crossbar內部總是採用某些連接方式,比如mesh;從抽象維度來看,每個節點到crossbar都只需要1個連接,但其能夠實現的頻寬、效率仍然可能是可觀的。

AMD Zen架構處理器的I/O die連接所有的運算die,這是個Ring Crossbar結構設計。AnandTech在探討文章中提到,I/O die的這個ring可以掛8個stop。在ring連接之外,某些stop之間也會有連接——所以不同節點之間的通訊延遲也存在差異,以及I/O die也並不是單純的環形連接。似乎將院算die內互連,和die間互聯考慮進來,這樣的方案也還是比較複雜。

其實AMD當前做多die封裝的技術並不先進,未來基於矽仲介的2.5D封裝才是此間的趨勢,雖然成本也會更高。加上3D堆疊垂直封裝,可能未來基於chiplet堆核心的空間還是很大。而且不僅是CPU,今年隨同第12代Core一同發佈的、Intel鎖定資料中心市場的GPU Ponte Vecchio才是chiplet方案的集大成者。要看到Intel持續在PC CPU上堆料也不會遙遠,雖然筆者認為堆核心對個人用戶而言存在更為嚴重的邊際遞減效應,且核心數量大戰未見得是好事。

本文原刊登於EE Times China

 

 

 

 

 

活動簡介
未來寬能隙半導體元件會在哪些應用成為主流?元件供應商又會開發出哪些新的應用寬能隙元件的電路架構,以協助電力系統開發商進一步簡化設計複雜度、提升系統整體效率?TechTaipei「寬能隙元件市場與技術發展研討會」將邀請寬能隙半導體的關鍵供應商一一為與會者解惑。
贊助廠商

加入我們官方帳號LINE@,最新消息一手掌握!

發表評論