ADVERTISEMENT
AMD 利用自行開發的 Zen 處理器微架構,規劃 2 組 Core Complex 合併在一起的 IC 設計,從伺服器 EPYC 至桌上型 Ryzen 3,都是由此晶粒組合或屏蔽部分區塊而來。近日正式發售的 Ryzen Threadripper 為啟用 2 個晶粒的產品,各晶粒自行控制雙通道記憶體,這也帶來過去罕見的 NUMA 架構。
目前 Intel 和 AMD 兩大 x86 處理器製造商所推出的最新款 HEDT 平台,其記憶體模組均可利用 4 組匯流排通道達到增加讀寫頻寬目的,不過前者僅使用 1 組記憶體控制器支援 4 組通道,後者使用 2 組記憶體各自控制 2 組通道。雖然最終算出來的理論頻寬相同,可是「同款不同師傅」,實際應用上會有些差異。
以 Intel 代號 Skylake-X 的處理器為例,其多處理器架構為 SMP(Symmetric multiprocessing)對稱多處理,也就是每個處理器核心的地位都是相等的,處理器均連結至單一匯流排(或是類似功能的 Crossbar 交換機)並共享主要記憶體資源。這種結構不需要特別變更軟體,就能夠利用多核多處理器並行處理多個作業,提升整體效能。自從雙核心處理器在消費家用市場問世後,這就是你我家中電腦的結構。
▲當年 AMD Athlon X2 利用 Crossbar 將 2 個處理核心和記憶體控制器匯流排串接在一起。
不過這種將各個處理器統一連結至單一匯流排的結構,容易使得多核心多處理器的數量受限,因為單一匯流排頻寬有限的關係,效能無法跟隨核心或是處理器數量等倍數無限成長,反而會因為匯流排過於忙碌,核心或是處理器沒有辦法獲得所需資料或寫回運算結果。
「那就增加匯流排數量吧!」這種簡單又暴力的方法早在商業環境行之有年,各位讀者們就算沒摸過,也應該看過具備 2 組以上處理器插槽的主機板,由於記憶體控制器早已整合進入處理器封裝當中,也就意味著該主機板擁有與處理器插槽數量相等的記憶體匯流排,各自管理與控制對應的記憶體,處理器插槽之間再以其它形式的匯流排互通有無。這種架構就可以在增加核心或是處理器數量的同時,也提供同等倍數的匯流排數量,不怕單一匯流排被眾多存取指令與資料塞爆。
雖然各個處理器封裝內的記憶體控制器各自連結對應的記憶體模組,整體來看還是將所有的記憶體容量視為 1 個可以使用的大區塊,只是當 A 處理器插槽內部的處理器核心想要存取 B 處理器插槽連結的記憶體時,會有額外的存取延遲,頻寬也不會如存取連結至 A 處理器插槽的記憶體般快速。處理器核心存取記憶體空間會因為遠近而有不同的速度,這種架構就稱為 NUMA(Non-Uniform Memory Access)非統一記憶體存取;而先前連結至單一匯流排,記憶體空間存取速度一致的架構,稱之為 UMA(Uniform Memory Access)統一記憶體存取。
回到 AMD Ryzen Threadripper 的討論,該處理器內部啟用 2 個晶粒,單一晶粒分別連結雙通道四組記憶體模組插槽,合併起來就是四通道八組記憶體模組插槽。由於記憶體分屬不同的匯流排,所以是 NUMA 架構,具備 2 個節點(1 組匯流排所連結的處理器和記憶體),這在家用市場(或是更精細的說:HEDT 市場)可謂首見。
▲存取由該 Core Complex 連結的記憶體延遲為 78ns,存取另一組時為 133ns。
由於 NUMA 存取不同位置的記憶體會有不同速度的特性,軟體(無論是作業系統或是應用程式)必須要特地為 NUMA 最佳化,才可以提供最佳的運作效能。若是程式運作時需要較大的記憶體頻寬,則需最佳化成 Distributed Mode,反之對於記憶體存取延遲較為敏感,則變更為 Local Mode。依據 AMD 釋出的資料,Ryzen Threadripper 的 Distributed Mode 頻寬大約多出 0.56%~21.65%,Local Mode 延遲減少約 23.82%。
▲若是程式運作時對於記憶體延遲較為敏感,需要最佳化成 Local Mode。
▲使用 AIDA64 實際量測 2 種不同記憶體存取模式的頻寬和延遲差異。
作業系統部分,家用產品從 Microsoft Windows 7 開始之後的版本就支援 NUMA,Linux kernel 則是從 2.5 版開始提供基礎性支援。也就是說現在購買 Ryzen Threadripper 處理器搭配 Windows 10作業系統並沒有問題,端看軟體應用程式是否針對首次飛入尋常百姓家的 NUMA 最佳化。
請注意!留言要自負法律責任,相關案例層出不窮,請慎重發文!