與 CPU 一樣,現(xiàn)代 GPU 已經(jīng)發(fā)展為使用復(fù)雜的多級緩存層次結(jié)構(gòu)。集成 GPU (Integrated GPUs:iGPU)也不例外。事實上,它們是一種特殊情況,因為它們與 CPU 內(nèi)核共享一條內(nèi)存總線。iGPU 必須與 CPU 爭奪有限的內(nèi)存帶寬,這使得緩存比專用 GPU 更加重要。
同時,集成 GPU 的集成特性提供了許多有趣的緩存設(shè)計選項。我們將看看 AMD、Intel 和 Apple 所采取的路徑。
全局內(nèi)存延遲(求職招聘)
GPU 被賦予了很多明確的并行性,因此內(nèi)存延遲并不像 CPU 那樣重要。盡管如此,延遲仍然可以發(fā)揮作用。GPU 通常不會滿負(fù)荷運行——也就是說,它們跟蹤的并行工作量沒有最大化。
測試延遲也是探測緩存設(shè)置的好方法。使用帶寬做到這一點并不那么簡單,因為請求可以在內(nèi)存層次結(jié)構(gòu)中的各個級別組合,并且要在緩存級別之間獲得干凈的中斷可能會非常困難。
Ryzen 4800H 的緩存層次結(jié)構(gòu)正是您對 AMD 著名的 GCN 圖形架構(gòu)所期望的。4800H 的七個基于 GCN 的 CU 中的每一個都有一個快速的 16 KB L1 緩存。然后,所有 CU 共享更大的 1 MB L2。AMD 處理內(nèi)存總線限制的策略看起來很簡單:使用比離散 GPU 更高的 L2 容量與計算比率。完全啟用的 Renoir iGPU 有 8 個 CU,每個 CU 提供 128 KB。將此與 AMD 的 Vega 64 進(jìn)行對比,其中 4 MB 的 L2 使其每個 CU 為 64 KB。
GCN 具有 16 KB L1 的簡單兩級緩存層次結(jié)構(gòu)可立即識別出跨代和外形尺寸。
Apple 的緩存設(shè)置類似,快速的 L1 和 1 MB 的大 L2。Apple 的 L1 大小為 AMD 的一半,大小為 8 KB,但延遲相似。這種低延遲表明它被放置在 iGPU 內(nèi)核中,盡管我們沒有測試來直接驗證這一點。與 AMD 相比,Apple 的 L2 延遲要低一些,這應(yīng)該有助于彌補較小的 L1。我們還希望看到 8 MB SLC,但這并沒有真正出現(xiàn)在延遲測試中。它可能是稍低的延遲區(qū)域,最高可達(dá) 32 MB。
然后,看看英特爾的設(shè)計。與 AMD 和 Apple 相比,英特爾傾向于使用不太傳統(tǒng)的緩存設(shè)置。這就是他們提供了一個由所有 GPU 內(nèi)核共享的大型緩存的原因。它的大小至少為 1.5 MB,比 AMD 和 Apple 的 GPU 級緩存還要大。在延遲方面,它介于 AMD 和 Apple 的 L2 緩存之間。這不是特別好,因為我們看不到它前面有更小、更快的緩存。但它的大尺寸應(yīng)該有助于英特爾在 iGPU 塊內(nèi)保持更多的內(nèi)存流量。英特爾應(yīng)該在大型共享 iGPU 級緩存之前擁有更小、可能更快的緩存。但是我們無法通過測試看到它們。
與 Apple 一樣,英特爾擁有一個大型共享芯片級緩存,在延遲圖上很難發(fā)現(xiàn)。這很奇怪——我們的延遲測試清楚地顯示了前幾代英特爾集成顯卡上的共享 L3。
看起來共享芯片級 L3 在某些英特爾 iGPU 設(shè)計中對延遲沒有太大幫助
從對延遲的第一眼看,我們已經(jīng)可以很好地了解每個制造商如何處理緩存。現(xiàn)在讓我們繼續(xù)討論帶寬。
全局內(nèi)存帶寬
帶寬對 GPU 來說比對 CPU 更重要。通常,CPU 只會在高度矢量化的工作負(fù)載中看到高帶寬使用情況。但對于 GPU,所有工作負(fù)載本質(zhì)上都是矢量化的。即使緩存命中率很高,也會出現(xiàn)帶寬限制。
AMD 和 Apple 的 iGPU 私有緩存具有大致相當(dāng)?shù)膸挕S⑻貭柕囊偷枚唷2糠衷蚴且驗?Alder Lake 的集成顯卡有一些不同的目標(biāo)。比較 GPU 配置,這一點非常明顯:
AMD 的 Renoir 和 Apple 的 M1 旨在為難以安裝單獨 GPU 的輕薄筆記本電腦提供低端游戲功能。但桌面 Alder Lake 肯定希望與獨立的 GPU 配對用于游戲。可以理解的是,這意味著英特爾的 iGPU 在電源和芯片面積分配方面遠(yuǎn)遠(yuǎn)落后于優(yōu)先級列表。較小的 iGPU 將具有較少的緩存帶寬,因此讓我們嘗試通過使用向量 FP32 吞吐量來標(biāo)準(zhǔn)化 GPU 大小來平衡比較。
使用測量的帶寬值。如果緩存級別不存在,則使用下一個緩存級別。GTX 1070 Max-Q 使用 Vulkan 進(jìn)行了測試,因為 L1 不用于 OpenCL。即使使用 Vulkan,英特爾也沒有顯示出更快的緩存級別
英特爾的緩存帶寬現(xiàn)在看起來更好,至少如果我們從 L2 開始比較的話。每個 FLOP 的字節(jié)數(shù)大致與其他 iGPU 相當(dāng)。它的共享芯片級 L3 看起來也很出色,主要是因為它的帶寬對于這么小的 GPU 來說是超額配置的。
就緩存而言,AMD 是這場秀的明星。Renoir 的 Vega iGPU 享有比 Intel 或 Apple 更高的緩存帶寬與計算比率(compute ratios)。但它的性能可能取決于緩存命中率(cache hitrate)。L2 未命中(misses)直接進(jìn)入內(nèi)存,因為 AMD 后面沒有另一個緩存。Renoir 擁有所有 iGPU 中最弱的內(nèi)存設(shè)置。DDR4 可能既靈活又經(jīng)濟,但它并沒有贏得任何帶寬競賽。Apple 和 Intel 都擁有更強大的內(nèi)存設(shè)置,并由大型片上緩存增強。
本地內(nèi)存延遲
GPU 內(nèi)存訪問比在 CPU 上更復(fù)雜,在 CPU 上,程序訪問單個內(nèi)存池。在 GPU 上,有像 CPU 內(nèi)存一樣工作的全局內(nèi)存。有恒定的內(nèi)存,它是只讀的。還有本地內(nèi)存,它充當(dāng)由一小組線程共享的快速暫存器。每個人對這個暫存器都有不同的名字。Intel 稱之為 SLM(共享本地內(nèi)存),Nvidia 稱之為 Shared Memory,AMD 稱之為 LDS(Local Data Share)。Apple 稱之為 Tile Memory。為簡單起見,我們將使用 OpenCL 術(shù)語,并將其稱為本地內(nèi)存。
使用本地內(nèi)存的Pointer chasing
延遲
AMD 和 Apple 訪問本地內(nèi)存所需的時間與訪問其一級緩存所需的時間差不多。當(dāng)然,延遲并不是這里的全部。AMD 的每個 GCN CU 都有 64 KB 的 LDS——是其 L1D 緩存容量的四倍。本地內(nèi)存的帶寬也可能更高,盡管我們目前沒有對此進(jìn)行測試。M1 上的 Clinfo 顯示 32 KB 的本地內(nèi)存,因此 M1 至少有這么多可用。該數(shù)字可能僅表明一組線程的最大本地內(nèi)存分配,因此硬件價值可能更高。
與此同時,英特爾享受對本地內(nèi)存的快速訪問,英偉達(dá)也是如此。在 Gen10 之前,英特爾將他們的 SLM 放在 iGPU 的 L3 上,在子切片之外(英特爾的 cloest 相當(dāng)于 Apple 的 GPU 內(nèi)核和 AMD 的 CU)。長期以來,這意味著英特爾 iGPU 的本地內(nèi)存延遲不高。
表現(xiàn)不錯的英特爾
從第 11 代開始,英特爾將 SLM 移到了子片中(subslice),使本地內(nèi)存配置類似于 AMD 和 Nvidia 的。Apple 可能也會這樣做(在 iGPU 內(nèi)核中放置“tile memory”),因為 Apple iGPU 上的本地內(nèi)存延遲也非常低。
CPU 到 GPU 復(fù)制帶寬
共享的芯片級緩存可以帶來其他好處。理論上,CPU 和 GPU 內(nèi)存空間之間的傳輸可以通過共享緩存,基本上在 CPU 和 GPU 之間提供了非常高的帶寬鏈接。由于時間和資源的限制,這里測試的設(shè)備略有不同。但Renoir 和 Cezanne應(yīng)該是相似的,英特爾的行為不太可能從 Skylake 倒退。
測試顯示,只有英特爾能夠利用共享緩存來加速不同塊之間的數(shù)據(jù)移動。只要緩沖區(qū)大小適合 L3,Skylake 就會完全在芯片內(nèi)處理副本,性能計數(shù)器顯示的內(nèi)存流量非常少。較大的副本仍然受到內(nèi)存帶寬的限制。這里測試的 Core i7-7700K 只有雙通道 DDR4-2400 設(shè)置,所以這并不是一個強項。
蘋果理論上應(yīng)該也能做到。但是,對于應(yīng)該適合 M1 系統(tǒng)級緩存的小副本大小,我們沒有看到任何改進(jìn)。有幾種解釋。一是 M1 無法保持 CPU 到 GPU 的片內(nèi)傳輸。另一個是小傳輸保持在裸片上,但是到 GPU 的命令延遲非常高,導(dǎo)致小副本的性能很差。英特爾的 Haswell iGPU 也存在同樣的問題,因此第二個很可能是解釋。當(dāng)我們獲得更大的副本大小時,M1 的高帶寬 LPDDR4X 設(shè)置做得非常好。
AMD的表現(xiàn)很容易理解。沒有共享緩存,因此 CPU 和 GPU 之間的帶寬受到內(nèi)存帶寬的限制。
最后,值得注意的是,這里的所有 iGPU 以及現(xiàn)代專用 GPU 理論上都可以通過在 CPU 和 GPU 上映射適當(dāng)?shù)膬?nèi)存來進(jìn)行零拷貝傳輸。但是我們目前沒有編寫測試來分析映射內(nèi)存的傳輸速度。
最后的話
GPU 往往是內(nèi)存帶寬消耗者,為集成 GPU 提供數(shù)據(jù)尤其具有挑戰(zhàn)性。它們的內(nèi)存子系統(tǒng)通常不如專用 GPU 強大。更糟糕的是,iGPU 不得不與 CPU 爭奪內(nèi)存帶寬。
蘋果和英特爾都通過復(fù)雜的緩存層次結(jié)構(gòu)來應(yīng)對這一挑戰(zhàn),包括為 CPU 和 GPU 提供服務(wù)的大型片上緩存。這兩家公司根據(jù)他們?nèi)绾胃倪M(jìn)他們的設(shè)計,采用不同的方法來實現(xiàn)該緩存。英特爾擁有最集成的解決方案。它的 L3 緩存具有雙重職責(zé)。它與高速環(huán)形互連上的 CPU 內(nèi)核非常緊密地聯(lián)系在一起,以便為 CPU 端訪問提供低延遲。iGPU 只是環(huán)總線上的另一個代理,L3 切片以相同的方式處理 iGPU 和 CPU 核心請求。
英特爾擁有快速、靈活的環(huán)形總線,可以連接各種代理。iGPU 只是環(huán)形總線上的另一個代理
Apple 使用更專業(yè)的緩存,而不是嘗試為 CPU 和 GPU 優(yōu)化一個緩存。M1 在 Firestorm CPU 集群中實現(xiàn)了一個 12 MB L2 緩存,從 CPU 的角度來看,它的作用與 Intel 的 L3 相似。一個單獨的 8 MB 系統(tǒng)級緩存有助于減少芯片上所有塊的 DRAM 帶寬需求,并作為到達(dá)內(nèi)存控制器之前的最后一站。通過劃分職責(zé),Apple 可以嚴(yán)格優(yōu)化 12 MB L2 以實現(xiàn) CPU 內(nèi)核的低延遲。由于 L2 足夠大,可以吸收大量 CPU 端請求,因此系統(tǒng)級緩存的延遲可以更高,以節(jié)省電力。
M1還有一點改進(jìn)的余地。它的緩存帶寬與計算比率可能會更高一些。CPU 和 GPU 之間的傳輸可以充分利用系統(tǒng)級緩存來提高帶寬。但這些都是很小的抱怨,總體而言,Apple 的設(shè)置非常可靠。
Apple 有一個速度較慢的 SoC 范圍的互連和各種模塊。僅繪制 Firestorm 集群和 GPU 以節(jié)省空間
相比之下,AMD 的緩存設(shè)置很簡單。Renoir (和Cezanne)基本上是將 CPU 和 GPU 粘合在一起。額外的 GPU 端 L2 是為降低內(nèi)存帶寬要求而做出的唯一讓步。而這里的“額外”僅適用于與離散 GCN 卡相比。與 Apple 和 Intel 相比,1 MB 的 L2 并沒有什么特別之處,它們的 iGPU 中都有 1 MB 或更大的緩存。如果 L2 丟失,AMD 直接進(jìn)入內(nèi)存。內(nèi)存帶寬并不是 AMD 的強項,這讓 Renoir 缺乏緩存更加糟糕。Renoir 的 CPU 端設(shè)置也無濟于事。只有桌面 Zen 2 大小的 1/4 的 L3 設(shè)置將導(dǎo)致來自 CPU 內(nèi)核的額外內(nèi)存流量,給內(nèi)存控制器帶來更大的壓力。
Cezanne 的布局非常相似,但 Zen 3 核心位于單核心復(fù)合體中
AMD 的 APU 緩存設(shè)置還有很多不足之處。不知何故,AMD 的 iGPU仍然能夠與英特爾的 Tiger Lake iGPU 競爭,這說明了他們的 GCN 圖形架構(gòu)的實力。我只是希望他們利用這種潛力來提供殺手級 APU。畢竟,AMD 有很多可以改進(jìn)的低級成果。基于 RDNA 2 的離散 GPU 使用位于 Infinity Fabric 后面的大型“Infinity Cache”來降低內(nèi)存帶寬需求。實施該緩存所獲得的經(jīng)驗可能會滲透到 AMD 的集成 GPU 上。
AMD 的 RDNA2 使用巨大的 128 MB 無限緩存來與 Nvidia 競爭,同時內(nèi)存帶寬要少得多
不難想象,Infinity Cache 除了降低 GPU 內(nèi)存帶寬需求外,還能帶來其他好處。例如,緩存可以在 GPU 和 CPU 內(nèi)存之間實現(xiàn)更快的復(fù)制。而且它可以提高 CPU 性能,特別是因為與臺式機芯片相比,AMD 喜歡為其 APU 提供更少的 CPU 端 L3。
但這樣的舉動在下一代或兩代人中不太可能發(fā)生。隨著 AMD 轉(zhuǎn)向 LP/DDR5,帶寬提升以及大型架構(gòu)更改使 AMD 能夠?qū)?Rembrandt 的 iGPU 性能提高一倍。考慮到Renoir (and Cezanne)已經(jīng)獲得足夠的圖形性能、英特爾無法利用其卓越的緩存設(shè)置以及蘋果封閉的生態(tài)系統(tǒng),AMD 幾乎沒有采取積極行動的壓力。(求職招聘網(wǎng))
APU 上的無限緩存也需要很大的芯片面積才能有效。使用 8 MB 系統(tǒng)級緩存的命中率(hitrate)非常糟糕:
28% 的帶寬減少意味著 28% 的命中率。
緩存命中率往往會隨著大小的對數(shù)而增加,因此 AMD 可能希望從至少 32 MB 的緩存開始以使其值得付出努力。這意味著更大的芯片,不幸的是,我不確定消費級 x86 領(lǐng)域是否有強大的 APU 市場。