為什么“性能暴漲”?
那么達成這種性能暴漲的原因是什么?Imagination PowerVR產品管理和技術營銷高級總監Kristof Beets在接受我們采訪時,首先提到的就是“完全重構的ALU(算術邏輯單元),我們對其進行了大量精簡,現在其內部就是相當簡單、干凈的MAD管線(MAD是指乘法累加單元)”,執行單元從過去的2個MAD單元,變為現在的1個MAD(而且還拋棄了Furian架構中的MUL乘法單元),也就是說每個時鐘周期單條管線的執行能力實際是下降的——這也是ALU拓寬的重要前提。

A-Series在架構上也因此有了“128條ALU管線同時并行”,也就是128-wide ALU。128線程寬度是什么概念呢?早前的Rogue架構采用的是32線程寬度wavefront(wavefront是GPU代碼的最小可執行單元,SIMD過程中數據處理的最小單元,在所有線程中同時執行同一指令,Nvidia稱其為warp),不過單個SIMD僅支持16-wide;Furian架構則真正加寬到了32-wide,即單個時鐘周期執行32-wide wavefront。
作為對比,Arm Mali G77的SIMD寬度是16-wide,這還是相較G76的一倍拓寬。所以A-Series單就ALU結構來看,顯然是獨占鰲頭的。這也表明Imagination真正開始從指令級并行徹底轉往線程級并行(TLP),實現ALU的更高利用率。這么做理論上能夠極大提升性能密度。Beets補充說由于管線精簡,“compiler也大幅簡化了,它只需要在管線中找乘法累加實現100%運算即可,架構中也更容易實現高利用率,是設計中實現性能密度和能效提升的重要組成部分。”
不過有這么寬的ALU,如何改進整個架構的前端,去喂飽這么寬的執行單元就成為一個問題了。前端調度效率低的話,這么寬的ALU管線只會出現大量閑置,以及效率的下降。
針對這部分,Beets在演講著重介紹了data master(數據管理)——各種不同的data master將工作負載分配到GPU中去,比如有Geometry Data Master負責幾何數據管理;還有2D Data Master、3D Data Master,以及Compute Data Master(負責通用型計算數據管理)。這些不同的data master基于內存的命令隊列中讀取數據,驅動任務負載進入GPU。

比如3D Data Master,還執行一些其他的固定功能預處理,包括HSR(隱面消除,是GPU的核心技術之一)、針對shader的工作負載生成。隨后進入到“Triangle Task Merging”(三角形合并)——Beets表示這是一個關鍵模塊;PDS(Programmable Data Sequencer,可編程數據定序器)再對資源進行分配管理,為工作負載和管理任務預留寄存器空間——這個組件能夠針對未來的線程從cache中預取數據。
接下來是指令scheduler(調度器)和decoder(解碼器),分發解碼后才正式進入到執行單元。然后就是128-wide的ALU了,這里值得一提的是,在主ALU管線之外還有一個副ALU線路方案(Secondary ALU),如上圖所示。這部分管線僅有主ALU管線1/4的寬度,每周期并行執行32個線程,不過有一些更為復雜的指令,執行任務包括各種操作與迭代、數據轉換、超越指令等。Beets表示,在更低的速率上工作,是基于對真實應用場景各種工作負載所做的權衡。“針對ALU結構,我們分析了大量應用,去理解其中的平衡點,實現最高的效率。”
彈性化擴展
以上是對單個ALU簇的大致理解,也是A-Series獲得性能暴漲的主要原因。我們往更高層級看一看其架構變化。在多年前的Rogue架構分享中,Imagination曾有一度將每個USC(Unified Shading Cluster)算作一個核心。到A-Series看來,大概已經不能這么算了,因為其性能擴展方式比較“模塊化”。
前文談到的這樣一個主體128-wide ALU管線實際就是一個USC。這樣一個USC,加上周邊的固定功能單元,比如TPU(紋理處理單元)、HSR(隱面消除)、各種針對不同數據的管線(如針對幾何數據處理、光柵處理、混合處理等),以及可實現更高層級共享的cache,也就共同組成了一個真正意義上的“核心”,只不過這個核心比較大型。下面這張圖就是一個完整的核心,在A-Series的彈性架構中構成真正的、完整的一個IP方案。

在AXM 8-256方案中,這樣的一個GPU“核心”內部有一個ALU簇(即一個USC),一個TPU紋理處理單元,以及其他專用單元。而在更高配置的AXT 16-512產品中,一個“核心”則包含了兩個128-wide的ALU簇(達成每個時鐘周期512次浮點運算),兩個TPU(達成每個時鐘周期采樣16個雙線性過濾texel)。
作為對比,Mali G77標稱每個時鐘周期 64 FLOPs、2 texels,也就是說一個AXM 8-256核心就相當于8個Mali G77核心的性能水平。這其實也表明了Mali仍在走GPU的小核心、多核心路線,而Imagination在走寬核心路線。

而如果是性能更高的AXT 32-1024,就是將這樣一個GPU核心“復制”一份,實現性能翻番;那么達到最高配的AXT 64-2048實際上就是四個這樣的核心。與此同時,針對各種單元的調度和監控,有一個小型的固件處理器(firmware processor),這一點將在后文中進一步提及。
Beets說這樣的彈性架構,可以方便地選擇性能提升,或者通過減少并行管線、紋理單元的方式,實現符合自身應用所需的配置。

尤為值得一提的是,他特別列舉了各種操作類型在流經GPU時的全套邏輯。比如上面這張圖就是幾何圖形處理過程(geometry processing flow)的例子,綠色模塊表示的是需要處理這些數據和操作所涉及的模塊,箭頭則表示整個流程方向:GPU獲取到內存中的命令結構,Geometry Data Master首先檢查內存中的命令隊列,獲取命令并將工作負載推到GPU內部;隨后讀取幾何圖形,各種各樣的三角形就會填充到cache中,再進入幾何圖形管線(geometry pipeline),之后流經ALU,返回的結果還需要進入到Tiling Engine(因為Imagination的GPU IP是典型的Tile-based Rendering基于塊渲染的架構),將這些三角形轉換至應用于屏幕不同的tile區域,最終輸出到內存。

不同類型的操作,整個流程及涉及的模塊會有差別,比如像素處理對應3D Data Master,后續要做隱面消除、計算像素渲染等;還有比如一些內部操作(housekeeping operations)、2D操作等等。上圖是像素處理流程(Pixel Processing Flow),以紫色示意。
全棧并發的HyperLane技術
以上提到的這些各類別操作,可以通過一種名為“HyperLane”的技術做硬件級并行,這也是Imagination這次隨同A-Series GPU IP發布的一種技術。這種技術對內存做完全隔離,多任務同時提交給GPU,實現GPU的多任務執行,或者說GPU硬件的“全棧并發”。典型的比如說圖形計算和AI計算同時進行。

實際針對前文提到的各種不同類型的操作,HyperLane可將GPU的所有任務負載切分成(subdivide)幾份,這其中不僅包括了物理層面的隔離切分(模塊層面的并發),還包括按照時間切分做負載資源切換。不同的Data Master可以同時保持活躍狀態,在整個GPU硬件資源之間進行動態的工作執行,每個時鐘周期不同的模塊可以執行不同的任務,ALU可以做Compute操作、像素操作、幾何圖形操作、2D操作等。

多種顏色表示HyperLane激活的多種操作正在同時進行
另外,HyperLane還有優先級機制,Evans說:“比如有客戶希望,在同時執行任務的時候,確保圖形計算性能不會受到AI工作負載的影響,那么就可以調高圖形計算優先級,即便芯片正在處理復雜的AI任務,圖形性能也能被保護起來。”這部分操作需要借用到這次IP架構中的固件處理器(即前文提到的firmware processor)。
HyperLane技術包含了動態的8路切分(eight way split/multi-tasking),也就是至多8條hyperlane。“所有工作同時進行,在硬件層面完整隔離和實現虛擬化,硬件級別的高級調度機制實現靈活性。”
HyperLane的一個副產品是內容保護,每條hyperlane都是隔離的,彼此之間的內容就能實現隔離。Evans說:“比如有個流視頻應用,帶DRM,那么內容在整個GPU中都是完全隔離起來的,在多任務環境中受到保護。”這也算是種安全防護方案了。

Imagination PowerVR產品管理和技術營銷高級總監Kristof Beets