實現UMA相當稀鬆平常?

作者 : 黃燁鋒,EE Times China

如今應用於PC的APU更像是單純將CPU、GPU放在同一顆die上的普通處理器,HSA開發生態已經處在荒廢狀態…那麼UMA呢?

蘋果M1實現的「統一記憶體架構」(Unified Memory Architecture,UMA)實際上並沒有什麼稀奇,AMD在十多年前就在APU產品上進行這一理念更全面的實踐。只不過AMD未能將APU with HSA的生態做起來,因為APU的理念是讓GPU和CPU整合,並同時處理日常工作,尤其是在CPU的向量及其他大規模平行運算算力不足時,整合在同一片SoC上的GPU能馬上頂上——這個思路固然是好,但也要求開發生態的配合,CPU不會無緣無故就將工作分給GPU去完成。

如「現僅蘋果M1力挺 UMA已消失在處理器世界?」一文所述,AMD高估了自己的生態話語權,除了遊戲主機這個主場,PC領域APU完全體的HSA聯盟和生態未能如預期般強盛發展。如今應用於PC的APU更像是單純將CPU、GPU放在同一顆die上的普通處理器,HSA開發生態已經處在了荒廢狀態;而且AMD的APU產品如今整合的GPU核心顯卡,在性能上也未能如十多年前APU剛誕生之時預期的那樣,顯著優於競爭對手;AMD處理器的UMA也就隨之成為歷史了…嗎?

 

 

蘋果雖然晚於其他市場競爭者很久才入世,在發佈M1之時才提出了UMA統一記憶體架構,但憑藉其在生態構建方面的獨特話語權,卻在CPU+GPU+其他加速器的異質運算方面,有著無與倫比的優勢。不過有關桌上型PC處理器異質整合、UMA的故事並未就此結束,因此,本文將補充談談各路競爭對手在UMA實現上的努力

UMA如何運作?

以「UMA」這個說辭來做市場宣傳的,其實遠不只是AMD、蘋果——畢竟異質整合是市場發展的總體趨勢,市場的主要參與者普遍都能看到UMA這樣的技術紅利。比如Nvidia也在大約6、7年前就提到了Unified Memory,雖然在實現方法和階段上,各家仍有差別(比如是否真正實現了共同記憶體位址,還是部分實現,抑或對上層隱藏了更多複雜的實現細節)。

首先回顧蘋果的UMA究竟是怎麼回事。為普羅大眾所知的是,蘋果M1實現的UMA,主要是讓RAM記憶體針對CPU、GPU時,採用統一可訪問的記憶體池。因為傳統方案的CPU和GPU即便放在同一顆SoC上,且訪問相同的實體記憶體,但由於它們對記憶體的不同訪問習慣及資料結構,所以CPU和GPU針對記憶體的存取空間是分開的,需要在記憶體的不同空間之間來回複製資料,而M1則不需要執行這種資料複製操作。

但蘋果在其M1晶片的UMA實現上語焉不詳,新聞稿中只提到了兩句:「M1採用UMA…..這讓SoC上所有的技術組成部分,不需要在多個記憶體池之間進行複製操作,就能訪問相同的資料,進一步提升了性能和效率。」

 

 

其實「訪問相同的資料」這一點,在硬體層面以及中間層實現方式上是多種多樣的,且歷史悠久,這句話約等於什麼也沒說。至於「不需要進行複製操作」,這一點也不稀罕。在此,蘋果並沒有說清楚他們定義中的UMA究竟是什麼概念,尤其硬體層面究竟要走到哪一步。

從蘋果公佈的這張圖來觀察,其實也看不出什麼花樣。CPU、GPU、Cache (應該是SLC)、NPU都連接到Fabric上,兩片DRAM亦如是。這種方案算不算得上高階呢?來看看別家公司是怎麼做的。

 

 

上圖是Intel第六代Core處理器(Skylake,2015年) i7-6700K的ring互連架構。這一代的Core處理器整合了Intel Gen9核心顯卡(上圖左邊部分),從這張圖就能看出來,CPU核心、LLC (last level cache)、GPU,還有System Agent之間有個片上匯流排,稱SoC Ring Interconnect,而且每個連線物件都有這個專門的本地介面。

這裡的SoC Ring Interconnect是個雙向ring。GPU在這個層面,就像是CPU的某個核心一樣,也處在互連ring的一個Agent環節上。右邊這一側的System Agent包含了DRAM記憶體管理單元、顯示控制器、其他晶片外的I/O控制器等。

記憶體控制器自然就要通往記憶體。Intel表示,所有來自或者去往CPU核心,以及來自或者去往Intel GPU的(片外)系統記憶體資料交換事務,都經由這條互連ring實施,透過System Agent,以及統一DRAM記憶體控制器。

仔細想一想這種結構,再回頭看蘋果M1的那張圖,是否感覺雙方的差別並不大?另外,值得一提的是,Gen9這張互連架構圖中可見,LLC cache也作為單獨的Agent節點連在ring上。Intel在文件中提到:「該LLC也與GPU共用。對於CPU核心與GPU而言,LLC著力於降低訪問系統DRAM的延遲,提供更高的有效頻寬。」

也就是說,從很多年前開始,Intel處理器內部的核心顯卡其實是連片內的LLC cache都是可以訪問的,和CPU核心算是平起平坐。這裡面當然有更複雜的一些存取機制,包括儲存一致性、分層級的儲存訪問問題,以及到系統記憶體如何實現CPU與GPU的「統一訪問」等。這其中似乎關係到很多奇技淫巧,對於「UMA」的定義可能不是本文上篇提到的「共同位址空間」這麼簡單。

事實上我們也並不清楚蘋果在M1晶片上究竟是怎麼來定義和實施「UMA」。但我們起碼也知道了,UMA這個東西是大家都在做的。不光是AMD、Intel,其實還有Arm (蘋果以前的晶片有沒有在做呢?),雖然可能大家對於UMA的實現方法和效率都存在差異。

 

 

Intel最早是從什麼時候開始研發類似的方案?筆者簡單查了一下:從維基百科的記錄來看,Intel是從Gen5開始將主機板上的「集顯」,移往處理器SoC內部成為「核心顯卡」(Arrandale/Clarkdale,2010年)。不過Gen5時代的內部互連架構已經不大可考,但找到了前人總結的Gen6核心顯卡(Sandy Bridge,2011年)互連架構,如上圖所示。

或許Intel和AMD對於廣義上UMA的實現差不多是同期。這一刻是否感覺蘋果M1的UMA也沒什麼大不了?雖然還是那句話,不清楚蘋果究竟是怎麼去實施UMA,或者從過去的A系列晶片到如今的M1,期間是否經歷了什麼。

以另一種方式延續的HSA

回到AMD本身,雖然現在PC領域的HAS生態和工具似乎已經「停更」了,不過在這其中筆者關注的UMA架構/訪問的問題,AMD從2012年以來的更新節奏還是比較清晰。

 

 

這是AMD當年提出的APU HSA特性更新。從2012年GPU能透過HSA MMU訪問整個系統記憶體,到後來CPU的MMU和GPU的IOMMU共用相同位址空間,指標能夠在CPU和GPU之間傳遞,實現所謂的「zero-copy」(零拷貝),這跟蘋果所說不就是同一回事嗎?

與此同時,2014年的APU也有了CPU和GPU之間的完全一致儲存——這和前文提到Intel片內共用LLC的方案異曲同工,雖然實現上差別似乎不小;還有GPU能夠使用頁交換的虛擬記憶體。

不過AMD在2011年就發佈文章提到APU對開發者而言的zero-copy。AMD APP SDK 2.5導入zero copy傳輸路徑,在實現上似乎是在可訪問的GPU記憶體區創建一個記憶體buffer,將其映射到CPU,CPU和GPU從邏輯上實現對這部分buffer的傳輸控制。其更底層的實現不得而知,不過極有可能,AMD對於「zero-copy」的實現在2011年之後,晶片設計或者說硬體層面又有新的變化——畢竟UMA的實現這麼多年都有各層面的進步。

而2013年OpenCL 2.0帶來了shared virtual memory特性,其中第一項就是共用虛擬位址空間。Intel當時還特別在宣傳中提到這項特性需要專門的硬體一致性支援,例如其當時的Gen8 GPU。從當年Llano系統架構分析來看,它在CPU與GPU的一致性儲存實現上可能比Intel還稍稍晚了一點,不過這種差距最晚於2014年補上,實現方式和Intel差別較大——此處或許還有許多問題值得商榷。

 

 

從時代的發展,以及當代AMD處理器架構圖來看,大概能發現兩件事。其一是,桌上型APU核心顯卡,和筆記型電腦行動端的核心顯卡,從構成和互連方式上也都沒什麼太大分別——這或許能夠一定程度表示,「APU」如今也就剩個名字,或者也可以說現在的行動處理器普遍也都發展成APU那樣。

另一點是UMA就處理器層面的實現,是個極其稀鬆平常的事情——看上圖中的Infinity Fabric,再回顧下蘋果M1的那張架構圖,都是這麼串聯。UMA不是蘋果一家在做,而是大家都在研發;只是或許每家每戶的實現方式是不大一樣,在程度和效率上也無從得知誰高誰低。

如AMD如今的處理器這樣,也是一堆東西都掛在Infinity Fabric互連上,包括CPU、GPU、記憶體控制器等。與Intel和蘋果的區別,大概就是LLC (或system level cache)並不共用;當然更多實現細節,是無從得知的。

 

 

從HSA最初的設定來看,AMD的APU with HSA理想和生態終未能實現。這個時代若說運算力,即便只是圖形運算,也得依靠獨立顯卡和大容量的顯存,APU with HSA又怎麼談得上第三階段的性能飛躍?

不過UMA的實施和現狀,其實都說明HSA的故事還在延續,即便UMA也只是HSA生態中的一環;即便這可能不單是AMD的HSA生態促成。只不過時代發展至今,即便UMA的硬體實現如此稀鬆平常,x86開發生態對於UMA的接受度仍然並不算高(此處仍能體現出蘋果的生態優勢)。

但AMD有一點沒有料錯,就是異質運算時代的到來,是運算力的又一次飛躍。即便這個時代不叫HSA,或者與AMD帶頭建立的HSA Foundation聯盟關係不大,異質運算的發展卻也從不曾停歇。比如Intel的XPU和oneAPI,比如Arm的Total Solution,比如Arm的超域架構,還有Nvidia的CUDA;只不過不是以AMD期望的方式那樣發展罷了——AMD自己現在不也有其他的異質運算發展方向嗎?HSA正以各種方式延續著。

本文原刊登於EE Times China網站

 

 

 

 

 

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

發表評論