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