隨著人工智能的飛速發展,和業界對人工智能項目落地的巨大需求,移動端GPU的競爭也日益激烈,除了來自各GPU廠商之間的競爭之外,也要與專用芯片展開競爭(例如寒武紀的NPU等),可謂群雄逐鹿。
在之前的一篇淺析移動端GPU的文章中介紹過移動端GPU領域主要的三家廠商。隨著蘋果棄用PowerVR,在手機領域Mali和Adreno有著絕對的優勢,而在物聯網和自動駕駛領域,三家都并未建立起完整的生態。這兩個領域除了GPU,也有一些專用芯片廠商入局,隨著物聯網和自動駕駛的發展,競爭將更加激烈。相對于其他移動廠商,PowerVR在GPU的技術方面披露的比較多,其中比較經典當屬Rogue架構。Rogue架構采用的是延后式分塊渲染架構(TBDR),憑借該技術,Rogue架構曾一直是移動端GPU的標桿。作為蘋果移動端GPU的獨家供應商,也曾風光無限。本文就對Rogue架構進行一些分析,歡迎高手點評斧正。
架構概述
Rogue架構是一種可編程的架構,能夠支持通用計算和圖形渲染。Rogue架構針對頂點和像素的傳輸、計算數據在內存之間的傳輸以及數據和計算核心之間的交互等提供了不同的硬件。本文將側重于通用計算方面的特性。
如上圖所示,Rogue架構中通用計算相關的部件有計算數據控制器(Compute Data Master,CDM),粗粒度調度器(Coarse Grain Scheduler,CGS),統一渲染集群(Unified Shading Clusters),L1混合緩存(L1 Mixed Cache)。
GPU的整個計算流程是,CDM負責將CPU分配的單個任務拆分為多個子任務,然后傳遞給CGS,由CGS將多個獨立的子任務部署到USC上去執行。只有計算任務是由CDM處理的,所以CDM是計算任務專用的通道。
每個USC pair包含兩個USCs和一個紋理處理單元(Texture Processing Unit,TPU),這樣可以有效的平衡紋理訪問和計算。USC是Rogue架構中的主要計算單元。TPU是一種專門加速內核代碼中訪問圖像和紋理的硬件,它擁有獨立的緩存,能夠加速處理器對圖像數據的訪問。對于一些需要對圖像進行專門訪問的算法和一些大尺寸的圖像,TPU可以提供很好的加速效果。
L1混合緩存是Rogue架構的主要緩存,所有對內存的訪問都會首先在這里緩存。當數據讀取不能使用該緩存的時候,則會使用系統級緩存。系統級的高速緩存直接與系統RAM交互,也是數據命中緩存的最后機會。
統一渲染集群(USC)
Rogue架構中負責計算的核心部件是USC,是一個可編程的標量SIMD處理器,通常包含16個ALU Pilelines,用來執行計算內核中代碼。下圖為Rogue架構中的USC示意圖。
圖中包含多種部件,我們只關心兩種,一種是內存,一種是ALU。USC內部的內存空間主要包括兩個寄存器組,一個是Common Store,由整個USC共享;一個是Unified Store,每4個ALU 管線(Pipelines)共享一塊。
Unified Store是USC中4個小的由寄存器組成的存儲體,每個存儲體被4個ALU Pipes所共享,對應于OpenCL中的私有存儲。每個Unified store包含1280個128-bit的寄存器,也就是說,每個ALU管線平均擁有320個寄存器。例如,如果每個線程申請10個寄存器,那么,每個USC上只能執行512個線程(每個ALU管線執行32個線程,需要320個寄存器),這也是達到推薦占有率所需最小的線程數。由于每個線程擁有獨立的寄存器等資源,所以可以實現0開銷的warp切換,切換的時候不需要進行中間數據轉存。當然在具體計算中,每個線程即OpenCL的WorkItem所能擁有的寄存器,與多種因素有關。
這128位的寄存器可以像4個32位寄存器一樣,被內核有效的訪問,所以內核最多可以使用40個32位寄存器,達到推薦的利用率。如果一個給定的內核需要的寄存器不止這些,此時駐留的任務就會減少,減少執行每個任務的線程數量,這樣每個線程就會獲得更多的寄存器空間。Imagination的編譯器只會降低利用率,因為占有率對于隱藏線程中的延遲是至關重要的。
USC利用率(USC/Multiprocessor utilization),是指USC執行活動的warp所用的時間與被阻斷的時間之比。如下圖所示,其利用率為75%。
USC的占有率是指駐留的warps與可用的駐留槽的比率。如下圖所示,展示了駐留的warps和可用warps的示意圖。駐留槽的數量與具體產品有關,大多是16個。圖中的占有率為6/16。
所以,當寄存器不夠用的時候,編譯器會犧牲利用率,保證占有率,有利于隱藏延遲。如果寄存器溢出嚴重,利用率不會無限制降低,會達到一個限度后,將溢出的寄存器分配到主存儲器中,也就是全局存儲(global memory),這樣會造成很高的帶寬和延遲成本,大幅度降低程序的性能。當然,這種調度是有軟件控制的,所以不同的設備之間會有區別。
Common Store就是通常意義上的共享內存,它是對一個USC中的所有ALU Pipelines可見的,主要用于線程之間的數據交換,任何共享的內存都存儲在這個位置,例如OpenCL的local memory,OpenGL的share memory。它也用于存儲對象句柄,例如圖像,紋理和采樣器狀態等。
Common Store被分配在4個存儲體中,每個存儲體可看作是一個128位寬的數列,如下圖所示。
在Common Store中,可以同時從4個存儲體中獲取數據,整個數據行可以在單周期內讀取,例如一個任務中的16個線程從同一行獲取連續數據(綠色部分),那么每個線程可以在一個周期內獲取32位值。但是,如果多于一個線程試圖從同一列訪問數據(紅色部分),則會導致存儲體沖突,因為每個周期,存儲體只能提供一次訪問請求,因此請求將被序列化,大大降低訪問性能。為了避免存儲體沖突,Common Store中的數據應該跨行訪問,每周期訪問不同存儲體中的4個128位寄存器。
ALU Pipelines是USC中的計算單元,結構圖如下圖所示。這是Series7XT ALUs示意圖。Rogue架構中每個USC包含16個ALU Pipelines,每個ALU中包含有FP16,FP32等核心用于計算。不同型號的GPU包含的ALU core類型不同,數量也不同。例如在Series7XT Plus GPU中增加了Integer Pipelines,能夠支持Int8和Int16等整數類型,可以大幅度提升GPU性能,在Series7XT GPU中增加了FP64。FP16核心也不是Rogue架構的標配,早期型號也是沒有的。
根據ALU core的數量和時鐘頻率,可以很方便的計算出GPU的理論峰值。可采用如下公式:
例如Series7XT系列中的GT7600包含6個USC,一共有192個FP32 core or 384個FP16 core。時鐘頻率有三種可定制,分別為650MHz, 800MHz和1GHz。以650MHz為例,其峰值性能為:
-
gpu
+關注
關注
28文章
4910瀏覽量
130654 -
人工智能
+關注
關注
1804文章
48705瀏覽量
246473 -
架構
+關注
關注
1文章
527瀏覽量
25852 -
寒武紀
+關注
關注
11文章
199瀏覽量
74212
原文標題:移動GPU的經典:淺析Rogue架構
文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
評論