蘋果新mac的M1 chip 用到了統一內存 unified memory,很好奇集成顯卡和CPU共享Main Memory不是很正常嗎,這有什麼值得宣傳的?


我也不能理解,一堆KOL都提到了UMA,但蘋果這個UMA到底有什麼獨特之處,卻沒人能說清。

蘋果重新定義一項技術也不是一回兩回了,我也希望它能做出新花樣,做出好成績,但大家千萬別看到個詞就沸騰吧……

UMA不是什麼新鮮玩意兒,Intel和AMD玩核顯這麼久了,也早就有類似的支持了

UMA到底是什麼定義,關鍵看怎麼理解這個A。UM是unified memory沒跑了,A卻可以是Access,或者Architecture(通常是後者)。

UMA的意義不僅僅是共享主存這麼簡單。BIOS里預留顯存也算共享主存,但顯然不太適合叫UMA。

我覺得UMA主要是這幾個階段發展起來的:共享數據,共享地址,共享內存(物理)

共享數據很簡單,OpenGL時代的persistent map,讓驅動去做同步、做數據搬運,從而給開發者營造「數據隨時可得」的假象(當然也可能的確就是隨時可得),這就已經達到共享數據的要求了。

共享地址的難度則增加了一些,其目標是為了讓你在CPU上跑的鏈表能直接在GPU等地方使用。x64時代到來使得內存地址擴充到48位,而且CPU上已經全面虛擬地址,GPU也要跟著加上地址轉換的能力。

共享物理內存則明確表明,實現了上兩者的獨顯(OpenCL的SVM就是前兩個要求)也要被排除。那就基本是核顯Only(主機的架構也可以看作是核顯)。


來看一下官網的描述:

M1 also features our unified memory architecture, or UMA. M1 unifies its high?bandwidth, low?latency memory into a single pool within a custom package. As a result, all of the technologies in the SoC can access the same data without copying it between multiple pools of memory. This dramatically improves performance and power efficiency. Video apps are snappier. Games are richer and more detailed. Image processing is lightning fast. And your entire system is more responsive.

說白了關鍵是「without copying it」,也就只是個zero copy而已。

而如果只是zero copy,那就真的是很不稀奇的了:

http://pc-internet-zone.blogspot.com/2011/08/cpu-to-gpu-data-transfers-exceed-15gbs.html?

pc-internet-zone.blogspot.com

AMD在2011年就發blog介紹zero copy的強大了,map/unmap只做邏輯上的控制權轉移

Getting the Most from OpenCL? 1.2: How to Increase Performance by...?

software.intel.com圖標

Intel晚了一些,2014年才發blog指導大家怎麼利用OpenCLCL_MEM_ALLOC_HOST_PTRCL_MEM_USE_HOST_PTR。(和AMD的是同一件事)。

當然OpenCL2.0帶來了SVM,不但可以不用map/unmap,甚至可以CPU/GPU同時操作數據了


當然具體怎麼實現的,不同的硬體有不同的解決辦法。可以參考這篇文章:

Xinzhao:GPU存儲體系-Integrated GPU?

zhuanlan.zhihu.com圖標

比如Intel,CPU和GPU都靠ringbus掛在LLC(CPU的L3)上,GPU就像是一個CPU核一樣,自然有辦法做同步,甚至能在緩存層面共享數據。

XZiar:Intel核顯的一些解析?

zhuanlan.zhihu.com圖標

內存控制器是在System Agent里的,也掛在ring上,或者說是掛在LLC上,自然CPU和GPU的訪存都被同化了(可能更像是LLC發起的訪存?)

再比如AMD,GPU和CCX是掛在Infinity Fabric上,GPU相當於NUMA Core,也能靠IF做通訊,只是由於L3是CCX內部的,無法共享而已。

內存控制器也算是依賴著IF的,CPU和GPU的訪存也被同化。

XSX其實和APU差不多,只不過GPU是IF的首要使用者而已。

移動端的ARM公版,也是核顯,CPU和GPU也掛在一個CCI匯流排上,訪存靠的DMC(dynamic memory controller)。

ARM Announces New CCI-550 and DMC-500 System IPs?

www.anandtech.com圖標

然後再來看看蘋果的圖:

我反正沒看出什麼奧秘,和AMD、ARM的架構圖沒什麼實質區別。

如果你們有內部資料的話,歡迎暗示一些革新之處。

如果沒有內部資料的話……你開心就好。


為啥有人覺得這個很神奇。

現在的soc晶元,從低端到高端,cpu, gpu,各種片上加速器都可以看到同一個物理地址空間,畢竟soc的內存介面基本就ddr一種。這裡和pc加獨顯是不同的。

本質的區別在於上層怎麼使用這個空間。比如可以將cpu gpu掛在coherence的區域上,那麼cpu和gpu可以保證數據一致性。但是對於codec,編解碼單元等,這些單元一般不會去做一致性硬體,那怎麼保證數據一致性?cpu用clflush這類指令把數據強制同步到ddr,然後再通知這些單元開始工作,那麼直接讀取ddr的數據也是一致的。或者使用類似arm acp那種單向一致性的介面。這裡本質上都是沒有多餘的數據copy。當然換一種形式,統一的物理地址空間劃分給各個單元,互相不能訪問別人的區域,cpu可以訪問所有區域,那麼不同單元之間傳遞數據就需要copy了。

當然再引入vm這些概念後會更複雜一些,但本質上來說還是一點,只要soc內的兩個單元可以訪問同一個物理地址,那麼就可以不用copy實現數據傳遞,生產者寫數據,然後地址指針傳給消費者,消費者直接就可以讀。當然上層還有很多不同的方式來控制這個,比如是否直接在片上做一致性,還是使用cache invalid做軟體一致性,又或者是否使用vm,引入iommu等。


僅做推測,M1所帶的最高16GB的高速統一內存/UMA(官方口徑是:「這種合而為一的高帶寬、低延遲mem pool,讓各種應用能在CPU、GPU和神經網路引擎間高效地共享數據,從而提高任務處理速度)」。 那麼我們算一算SoC上的模塊建的搬數帶寬就很了不起。並可以猜測M1的mem底層結構不是傳統構型的,Mem fabric(mem over fabric) 也許是最可期待的亮點;

可能體現在:各種xPU通過高速fabric訪問mem pool,那就是多通道了,加上不必與CPU同步時序,那麼集成顯核的傳統瓶頸也就因此弱化甚至不存在了;以及在此基礎上做到了mem pool一體化,推想未來可能有機會演進SCM結構咯;

展開點說,我們知道PC上的顯存共享是按地址劃分,即使雙通道,GPU還是受制於匯流排訪問速度,還要跟CPU分時序…,倘若用高速fabric,則xPU之間的工作頻率甚至不需要同步了(SerDes本身不受匯流排頻率驅動 也不傳送時鐘信號)。當然,有關fabric細節是不會披露的設計秘密,特別是底層PHY,其中還包括各種xPU訪問的topology/ 時序/ 衝突解決機制等等;

目前,只能猜測它的多通道topology,那麼多xPU能夠非同步大帶寬工作的話就很不易(匯流排只是對CPU而言,GPU和NPU可以是單純數據驅動的),所以mem pool底層設計就可能大有文章。簡單舉例,GDDR4比DDR4快一倍,倘若在傳統設計里,GPU和CPU一旦要共享mem,理論上GPU就是降半速運行,這是掛傳統匯流排的弊端,只能有一個時鐘;那麼倘若是fabric,可能突破點就在於允許xPU工作在不同時鐘上,這樣GPU就不必降速了。

當然,類似的Mem fabric和內存分頻訪問技術也廣泛運用在Intel/AMD/Nvidia的設計中,比如傳統Ringbus/Mesh,以及AMD的Infinity Fabric(還用來link chiplets)等,CPU和xPU掛在這些fabric上面,劃分各自的時鐘域(地址範圍),沒有什麼CPU/GPU的頻率約束;雖然它們都是為了大幅提升xPU載入大型數據集的速度,減輕CPU I/O的瓶頸,提升I/O帶寬和傳輸數據的量;但多數都與UMA這種整體內存空間共用共分配的模式不同,通常意義的UMA與內存共享池的根本差異,在於內存空間的所有權以及其服務的方式;那麼其中topology/ 時序/ 衝突解決機制,甚至fabric的底層PHY等等細節就是M1不會披露的設計亮點。

此外,過往慣例上講,增加了那麼多cache/buffer的代價是指令周期得加,不提高頻率的話,個別操作也許就顯得慢(比如高IPC的任務 - 但是M1是降頻加了超寬的8發射架構來支持高IPC),當然升頻的話相信流水線也會增加;且PC這個form factor要嚴肅考慮向後兼容性了,手機則不必考慮。

上述的推測,在Apple幾位SVP的解釋中可以得到佐證,包括Johny Srouji和主持軟體工程的SVP Craig Federighi的口述:「UMA本質上是指所有的組件——CPU、GPU、NN處理器(NPU)、圖像信號處理器(ISP)等——共享一個速度極快的Mem pool,並且位置非常接近;這與常見的桌面範例相反,比如把一塊內存池分配給CPU,另一個分配給另一邊的GPU。而M1使用統一化的內存架構,不需要不斷地來回移動數據,也減少重複的數據存儲,也不需要改變格式來減慢速度。性能就有很大的提升……M1可以移動到極快的片上內存,然後執行一個巨大的操作序列。這是極高帶寬效率的方式。」

另外封裝方面:其他位的作者也說過,M1這種在有機封裝中嵌入DRAM的封裝方式對Apple來說已經習以為常;從A12開始就一直在使用這種方式。當涉及到高端晶元時,Apple傾向於使用這種封裝而不是通常的智能手機POP,因為這些晶元在設計時考慮到了更高的TDP。所以將DRAM放在這顆CPU的旁邊,而不是放在其上,這樣有助於確保這些晶元仍能得到有效冷卻。這也意味著,幾乎可以肯定M1上的128位DRAM匯流排,與上一代a-X晶元非常相似。

當然上述僅僅猜測,具體看未來的分析報告吧;當然TSMC知曉的信息只會更清楚。


很多引經據典的詳細回答了。都挺不錯的。

蘋果的統一內存細節目前還不得而知。一般意義上的UMA與內存共享的根本區別,在於內存的所有權,以及其服務的方式。

就好像有一套三室一廳,你和別人合租,一人一個房間,共用客廳。每人有對自己房間的所有權,共用部分雖然合用,但是很多地方需要避嫌,一人在用另外一人就需要躲遠遠的,這叫內存共用。

你一家人入住,可能依然是一人一房間,但是每個人都是享有整個房屋的所有權。所有的地方都在某種程度上都屬於共用,一個洗澡另一個可以在邊上拉屎還能聊天,這叫UMA。


蘋果的這個統一內存應該是Unified Memmory Achitecture/Access(UMA),和傳統見到的CPU和GPU共享內存(例如現在的安卓SoC,或者Intel集成顯卡的共享內存)在內存訪問上明顯差別。

UMA和傳統共享內存在宏觀上都是讓CPU和GPU共享同一個內存沒錯,但是傳統共享內存的模式下,雖然內存在物理上是共享的,但在操作系統、編程層面他們還是兩個不同的東西。相當於說雖然共享了內存,但是會顯式的區分他們的內存地址空間,CPU和GPU都沒辦法直接訪問修改對方所佔用內存的數據,互相訪問和非共享內存大同小異。簡單來說就是互相訪問可能需要先從對方的地址空間拷貝一份到自己的地址空間,然後再處理和同步。

Apple MacBook Pro 13.3 新款八核M1晶元 8G 256G SSD京東¥ 9999.00去購買?

而UMA的好處是CPU和GPU的訪問完全打通了,互相可以直接訪問,一份數據不需要再來回拷貝兩份,這樣對CPU和GPU進行異構計算時有莫大的幫助。

UMA在傳統的遊戲場景下沒有什麼太大幫助,但對於計算場景則幫助很大,打通了數據共享的瓶頸,不需要無謂的消耗。Intel未來在PCIE5時代通過CLX會實現,AMD則在Infinity 膠水3.0時代出現。

另外其實UMA喊的最早的是AMD,很多年前的APU就在畫UMA大餅,至今都沒有實現,Apple話少活狠,Intel因為工藝被耽誤很久。

Apple MacBook Air 13.3 新款八核M1晶元 8G 256G SSD京東¥ 7999.00去購買?

Apple iPad Pro 11英寸平板電腦 2020年新款(128G WLAN京東¥ 6229.00去購買?


推薦閱讀:
相关文章