輕松讀懂移動處理器 CPU微架構(gòu)全解析
PowerVR 的渲染模式是 tile-based deferred rendering(分塊式延后渲染)。
分塊式渲染(TBR)并不難理解,就是把畫面切成若干個 16x32 或者 16x16 的像素塊進(jìn)行渲染,這樣的好處是可以在芯片上建立一個中間緩存(也可以稱作 Tiler Buffer,分塊緩存,里面用于存放當(dāng)前渲染 Tiler(像素塊)的深度/蠟版幀緩存、色彩幀緩存、渲染對象等),不再需要片外的顯存來存放 Z-buffer,讓渲染過程中的讀寫盡量在片上完成,減少內(nèi)存的讀寫。
由于在中間緩存渲染的時候都是很高的精度(IEEE 32-bit),減少了以 16-bit(例如 R:G:B=5-bit:6-bit:5-bit)幀緩存模式時在內(nèi)存上進(jìn)行透明混合等操作時的精度損失,因此 TBR 可以較低的內(nèi)存讀寫和占用實(shí)現(xiàn)高品質(zhì)的輸出。
ARM 的 Mali、當(dāng)年 Bitboys 的 Glaze3D 都屬于 TBR,不過也僅此如此,它們并非 TBDR,仍然屬于 IMR(立即渲染器),只有有限的 HSR 能力(例如 Early-Z、Hi-Z 之類的技術(shù)),并不能完全消除無效渲染。
TBDR 是在上面的分塊式渲染(TBR)基礎(chǔ)上增加了對場景中當(dāng)前屏幕畫面三角形的篩選分倉(binning)的步驟,將三角形的前后位置關(guān)系標(biāo)記起來并存放于片外的顯存中,這樣就能實(shí)現(xiàn)將不可見面在進(jìn)入著色渲染流水線之前剔除掉,實(shí)現(xiàn)完全消除無效渲染。
由于增加了分倉動作,貼圖和著色必須等待三角形可視性問題解決后才渲染,渲染上增加了時延,所以這種渲染方式被稱作分塊式延后渲染。
不過在 OpenGL 中缺乏專門的標(biāo)記來指示一幀畫面什么時候開始和結(jié)束,所以 TBDR 對一幀畫面什么時候才接收到所有的三角形進(jìn)行偵測將會有點(diǎn)麻煩,這會導(dǎo)致三角形分倉陷入迷失中。
在 Direct3D 中有 BeginScene() 和 EndScene() 這樣的標(biāo)記,但是由于在幾乎所有的硬件上都沒有效果,所以開發(fā)人員都會懶得去用這些標(biāo)記并且隨意地在這些界限外使用 z-buffer,這會導(dǎo)致 API 無法確保 z-buffer 中存放有效的數(shù)據(jù)。PowerVR 硬件本體雖然可以把 Z-buffer 存放在片外顯存中,但是代碼必須編寫正確。
TBDR 可以減少無效渲染、實(shí)現(xiàn)極高的低內(nèi)存占用渲染輸出品質(zhì),但是它的缺點(diǎn)是需要做一塊容量不小的片上緩存和大量的晶體管確保 TBDR 時候的兼容性,因此 PowerVR 的芯片面積一般都比 GeForce 這類 IMR(立即模式渲染器)大不少,另一個麻煩之處在于行銷的時候,PowerVR 的紙面規(guī)格相當(dāng)難看(當(dāng)年 PowerVR3 就是搭配 SDR 作為顯存上市的,而此時市場上的許多顯卡都已經(jīng)搭配 DDR 顯存了),當(dāng)然這個可以透過一些媒體測試實(shí)證加以解決。
上圖是 PowerVR SGX54X MP4 的微架構(gòu)圖,這個系列中的 PowerVR SGX 543 MP4 曾經(jīng)應(yīng)用于蘋果 iPad 3 中的 A5X 應(yīng)用處理器中,MP4 表示它是以四內(nèi)核形式組成的 GPU。
需要注意的是,PowerVR 說的內(nèi)核是真正的內(nèi)核而非 NVIDIA/AMD 那樣的把單個 ALU 都當(dāng)成 core 的市場行銷術(shù)語,它這里的四個內(nèi)核可以并行處理四個三角形渲染,NVIDIA 到了 Fermi(GTX 480)開始實(shí)現(xiàn)多三角形渲染,而 AMD 是在 Tahiti(7970)開始實(shí)現(xiàn)。
在 PowerVR 54x MP4 中,每個圖芯渲染計(jì)算單元被稱作 Multi-Threaded Co-Processor,對應(yīng) OpenCL 的術(shù)語就是 PE(Processing Element,處理部件)。每個 PE 每個周期可以完成兩個浮點(diǎn)操作。
每四個 PE 構(gòu)成一個 Pipe(渲染流水線,因此 Pipe 本質(zhì)上就是一個四路 SIMD),每個 PowerVR SGX54X 內(nèi)核包括四個這樣的 Pipe,即 16 個 PE,故此 PowerVR SGX54X MP4 就有 64 個 PE。
因此如果 PowerVR SGX 54x MP4 運(yùn)行于 300MHz 的話,浮點(diǎn)性能就是 38.4 GFLOPS。
即使是同一代的 PowerVR,不同的內(nèi)核版本具體的實(shí)現(xiàn)細(xì)節(jié)都可能有些差別,例如 Pipe 內(nèi)的 PE 數(shù)或者是每個內(nèi)核內(nèi)的 Pipe 數(shù),例如 PowerVR SGX 554 MP4(Apple A6X 采用該 GPU)的每個內(nèi)核有 8 條 Pipe 而非 PowerVR SGX 54x MP4 的四條。
PowerVR SGX 5 被設(shè)計(jì)成統(tǒng)一渲染結(jié)構(gòu),即幾何體頂點(diǎn)和屏幕像素計(jì)算都是由上面說的 PE 執(zhí)行,這樣的好處是讓 GPU 內(nèi)的計(jì)算單元可以盡量保持運(yùn)作狀態(tài),而不是像分離式架構(gòu)那樣遇到非平衡負(fù)載的處理時候,VS(頂點(diǎn)計(jì)算單元)有時候在等 PS(像素著色計(jì)算單元)或者 PS 在等 VS。
根據(jù) PowerVR 的資料,SGX 54X 的每個 Pipe 內(nèi)有一個線程調(diào)度器(Thread Scheduler),每個線程調(diào)度器內(nèi)有 16 個線程可供派發(fā),每次可以派發(fā)其中的 4 個線程給下面的 PE 執(zhí)行。
PowerVR SGX 5 系列中有明確的 API 支持規(guī)格的內(nèi)核基本上都是支持 DX9.X,但是有一個特例,那就是 PowerVR SGX 545,可以實(shí)現(xiàn) DX 10.1、OpenGL 3.2 支持。
如果資料沒有錯誤的話,PowerVR SGX 5 的 ALU:TEX 比例為 2:1,即每兩個 PE 就會配上一個紋理單元,因此我們這里的 PowerVR SGX 54x 單個內(nèi)核具備 8 個紋理單元。
雖然說 PowerVR 微架構(gòu)的資料并不是很多,但是相對于除了 Intel 的其他對手而言,已經(jīng)是非常大方了。
關(guān)注我們



