GPU如何工作:PowerVR/高通Adreno/ARM Mali的渲染模式分析

2020-12-13 電子產品世界

  在上一篇文章《【技術解析】GPU如何實現三維渲染及非圖形計算?》我們已經了解了GPU工作流程以及作用,但GPU絕無這麼簡單。目前市場上的 GPU 主要由三家公司主導,分別是ImgTec的PowerVR系列、Qualcomm(高通)的 Adreno 以及 ARM(安謀)的 Mali,其中PowerVR被蘋果採用,Adreno被高通整合到驍龍SoC當中,Mali應用最為廣泛,有三星Exynos、MTK Helio、Mstar等等,按渲染模式可以劃分為IMR與TBR/TBDR兩大流派,下面我們先從PowerVR說起。

本文引用地址:http://www.eepw.com.cn/article/201606/292810.htm

  PowerVR —— 延後式分塊渲染架構

  ImgTec(或者說 Imagination Technologies)的前身是 1985 年在英國成立的VideoLogic公司,在上世紀90年風靡一時的世嘉DreamCast遊戲機就是採用該公司技術授權生產的圖形處理器。



  ImgTec目前旗下有多個分部,PowerVR是其中專門從事GPU、視頻處理單元、攝像機智慧財產權內核技術開發的分公司。

  PowerVR雖然從事GPU開發,但是它並不直接售賣晶片實體,而是透過授權的方式,將晶片內核技術以收取權利金的方式讓第三方晶片廠商生產、銷售、使用,例如蘋果公司、英特爾公司、聯發科、索尼等,商業模式和同樣是英國公司的ARM一樣。

  技術內核授權方式給了晶片廠商和系統集成廠商非常高的靈活性和快速切入市場的能力,他們可以在較短的時間裡就實現各種配置的靈活組合。如果你看過我前面介紹的圖形流水線就知道,要做好一枚具競爭力的GPU難度是相當大的,中間涉及大量的技術積累。

  像NVIDIA、AMD這樣的廠商都不是突然冒出來的,他們都經歷過非常慘烈的市場競爭、有業界最強大的研發團隊以及與周邊軟體開發商經年累月的開發合作關係,現在一個新丁公司仿效NVIDIA模式貿然闖進GPU開發領域的話,如果不是手握十億美元級規模的資金來換取技術和各種市場資源的話,恐怕連響都聽不到。

  在上世紀90年代末和本世紀前兩年,PowerVR也在桌面市場和NVIDIA、3dfx進行過捉對廝殺,不過由於商業模式並不十分適合桌面市場,所以在僅有母公司VideoLogic(1999年更名為Imagination Technologies)推出的Kyro II後就不再踏足桌面獨立顯卡市場,轉而全力發展嵌入式領域,從此一發不可收拾。



  PowerVR在桌面獨立顯卡市場的最後一款產品是PowerVR3系列,原定用於Kyro III/IV的後續產品PowerVR4由於退出桌面市場,對公眾而言只停留在幻燈片(上圖的STG5000就是原本計劃用在Kyro III的PowerVR4)中。

  當然,PowerVR並沒有完全退出桌面市場,他們和Intel達成了技術授權協議,英特爾可以在其集成GPU中採PowerVR MBX架構,英特爾在很長的一段時期內的集成GPU都採用了這個微架構內核。



  PowerVR MBX據聞是世嘉DreamCast那枚PowerVR PCX 2的升級版,從技術資料來看的話,其實PowerVR MBX有些類似於PowerVR4,官方的PowerVR MBX白皮書裡也明確寫著:

  4th generation tile-based deferred rendering(第四代塊元式延後渲染)

  從規格表來看,PowerVR MBX支持OpenGL ES 1.1,相當於OpenGL版本1.5或者DirectX 8.x的變種版。

  所以,PoweVR MBX應該是和PowerVR Series 4一脈相承的,PowerVR MBX屬於後者的移動版本。

  什麼是TBDR呢?

  在前面介紹的圖形渲染流水線,GPU在渲染的時候,一般是逐個三角形渲染的,如果以深度順序來劃分,可以分為從遠到近(畫家畫法)、從近往遠,開發人員可以在編寫代碼的時候指定渲染順序。

  如果依照在圖形流水線什麼階段進行三角形排序,又可以分為sort-first、sort-middle、sort-last,middle是中間的意思,指的是從模型空間到屏幕空間這部分工位,sort-middle就是指在這段進行三角形前後順序排序。sort-last是指在這之後進行三角形排序,sort-first是指在這之前進行三角形排序。



  Sort-First一般用於多GPU渲染方案,基於片元方式的Sort-Last在目前絕大多數的GPU微架構中使用,而Sort-Middle則是PowerVR的三角形排序方案,需要在幾何變換和光柵化之間進行圖元的排列/分倉處理,在解決了可視性問題後再進行貼圖和著色處理。

  這個步驟會造成一定的延遲,加上採用了塊元式渲染,所以像PowerVR這種渲染架構被稱作塊元式延後渲染器(Tile Based Deferred Rendering,TBDR)。

  而一般的GPU被認為是看到一個三角形就馬上渲染,所以被稱為立即渲染器(Immediate Mode Rendering),立即渲染器也可以分為塊元式(例如ARM Mali)和非塊元式(例如AMD、NVIDIA 「目前」的GPU)。



  (IMR)

  什麼是TBDR?

  PowerVR 微架構誕生於上世紀90年代初期,針對的是初代的三維遊戲機,當時的人們希望這枚晶片的效率要儘可能地高,由於受到半導體技術的限制,所以在這時期有各種現在看來稀奇古怪的偏重於某個技術指標的晶片。

  要效率高,其中一個辦法就是只渲染屏幕上能看到的三角形所覆蓋的片元,人們引入了名為HSR(Hidden Surface Removal,隱面消除,這裡的隱面是指被其他實體多邊形遮蓋的多邊形)來消除無效片元來實現這個目標。



  (TBDR)

  在TBDR的渲染流水線裡,幾何階段生成(已經經過裁剪)的多邊形或者說三角形參數信息都存放在一個名為Scene Buffer(場景緩存)或者Parameter Buffer(參數緩存,這是相對新近的叫法)的內存裡,理論上裡面保存的應該是同一幀畫面裡的所有三角形信息,其位置在顯存裡(對於採用統一內存架構的手機而言,則是和系統內存一樣位於同一塊物理內存上)。

  這一步是TBDR獨有的,相較之下,傳統的GPU在幾何階段扔出到三角形後紋理單元/著色單元就馬上渲染,因此人們將傳統的GPU渲染方式稱作立即渲染器。



  這裡請不要把TBDR 和延後式渲染混淆,後者是指把多個片元渲染後在進行後期處理(例如打光、模糊等效果),同樣是「延後」一詞,但是對應的渲染節點完全不一樣。

  在生成Scene Buffer的同時,PowerVR GPU內部的塊元加速器會對這些三角形進行分倉(Binning)或者說篩選(sorting)處理,這個動作會依照16像素*16像素(取決於具體的GPU實現,像PowerVR PCX2可以是32*32或者32*16,PowerVR SGX 5上是16*16,「新的」PowerVR Series 6/7是32*32,這樣的分塊被稱作塊元,即Tile)的大小,將Scene Buffer中位於塊元內的所有三角形的指針存放到一個對應的塊元緩存(Tile Buffer)中。



  對於一個大小為1920x1080的全高清屏幕,用16*16的塊元大小進行切分,可以切成大約8100個塊元,每個塊元在「顯存」中都有一個對應的塊元緩存,裡面存放的就是上面所說的位於塊元內的三角形數據指針(指向Scene Buffer對應的三角形數據)。

  所謂指針,是程式語言中的一個對象或變量,用來存儲某一個地址,這個地址的值直接指向(points to)存在電腦存儲器中另一塊存儲器空間的值。

  從編程的角度而言,在這些塊元緩存存放的數據結構可以稱作圖元列表(primtive list)。

  按照PowerVR或者說ImgTec的說法,他們在新的微架構中引入了幾何體壓縮技術,存放在Scene Buffer的幾何體數據是壓縮過的,在GPU頂點內存單元讀取時候再解壓,這樣的好處是可以顯著節省存放Scene Buffer的內存空間和帶寬,而這通常意味著:省電。

相關焦點

  • 【深度】移動GPU全解讀: PowerVR, GC, Mali, GeForce
    基本的3D流水線首先我們來簡單的介紹下3D的畫面是如何生成的,一個基本的3D流水線如下圖所示:IMR架構的GPU渲染完物體後,都會把結果寫到系統內存中的幀緩存裡,因此就可能出現GPU花了大量的時間渲染了一個被遮擋的看不見的物體,而最後這些結果在渲染完遮擋物後被覆蓋,做了無用功。這個問題稱之為Overdraw。雖然現代的IMR架構GPU在一定程度上可以避免這個問題,但要求應用程式將場景裡的三角形按照嚴格的從前往後的順序提交給GPU,要完全避免Overdraw還是很困難的。
  • Mali GPU: 抽象機器(二) – 基於區塊的渲染
    「傳統」方式  在傳統的主線驅動型桌面 GPU 架構中 — 通常稱為直接模式架構 — 片段著色器按照順序在每一繪製調用、每一原語上執行。現代設備的典型工作集是 32 位/像素 (bpp) 顏色,以及 32 bpp 封裝的深度/模板。因此,1080p 顯示屏擁有一個 16MB 工作集,而 4k2k 電視機則有一個 64MB 工作集。由於其大小原因,這些工作緩衝必須存儲在晶片外的 DRAM 中。
  • ARM正式發布A75和A55,助華為海思趕超高通
    ARM正式發布了其新一代的核心A75和A55,依據當前的發展趨勢來看,華為海思將成為首家採用這兩個核心的手機晶片企業,預計將用於今年下半年量產的麒麟970晶片上,該款晶片的CPU和GPU性能都有望趕超高通的驍龍835晶片。
  • ARM架構是什麼?為什麼連高通都離不開?
    為什麼高通都離不開?本文引用地址:http://www.eepw.com.cn/article/201906/401175.htm  ARM是一家好很厲害的公司 ,ARM處理器是英國Acorn有限公司設計的低功耗成本的第一RISC微處理器。全稱為Advanced RISC Machine。
  • TensorFlow Lite的 GPU 委託代理(Delegate)是什麼
    如果出錯了還請讀者指出,本文僅從TensorFlow Lite的文檔出髮結合我的思考,不做代碼層面的分析。需要注意的是,TensorFlow Lite的官網對於委託代理(Delegate)API的聲明為仍處於試驗階段並將隨時進行調整。1.
  • 揭秘高通驍龍888,這些重點你需要知道
    全新架構,性能升級   驍龍888集成全新高通Kryo 680 CPU,包含1 x arm Cortex-X1 + 3 x arm Cortex-A78 + 4 x arm Cortex-A55,主頻高達2.84GHz,是首個基於arm Cortex-X1打造的商用CPU子系統。
  • 麒麟最強芯kirin980初問世便爭議連連,能否PK高通驍龍845
    新一代集成AI晶片的soc—kirin980正式發布了,貌似GPU只是從G72-mp12提升到了G76-mp10引發了很多性能黨的不滿,Harry覺得還是有必要客觀分析一下kirin980對比kirin970的提升以及優點和缺點。
  • 如何選擇Embedded Linux的圖形框架
    打開APP 如何選擇Embedded Linux的圖形框架 發表於 2019-05-27 14:59:53 對於Android
  • 視覺藝術家Joana Choumali ,以刺繡照片療愈苦難
    1974年生於象牙海岸阿比尚(Abidjan)的視覺藝術家Joana Choumali ,在她近半世紀的人生,目睹阿比尚這塊她深愛的桑梓之邦如何從往昔繁榮,走向後殖民獨立國家的政治腐敗和內戰騷亂命運,致使社會長年動蕩,人民飽受經濟痿蹶之苦。
  • 「強制進行GPU渲染」是什麼意思?手機究竟要不要打開呢?
    【強制進行GPU渲染】又是怎麼回事呢?雖然圖像處理是GPU的本行,但是在日常使用的時候,2D圖像處理方面的工作,CPU自己就做了,沒有調用GPU;只有執行3D任務的時候,比如玩3D遊戲,才使用GPU來處理。這樣一來就產生問題了:CPU又要負責計算,又要負責圖像處理,壓力會很大。
  • 高通835和高通660相差遠嗎?
    高通 835基於三星10nm的製造工藝。與14nm相比,10nm製程將使晶片速度提高27%。主頻率為1。9ghz + 2.45ghz。核尺寸為Kryo280體系結構,大核心2.45 GHz頻率,大核心簇,2mb L2緩存,小核心1.9 GHz頻率,性能提升25%,支持4k屏幕,2.1,雙攝動和LPDDR4x四通道內存,集成16基帶。
  • 《GPU Gems 3》:真實感皮膚渲染技術總結
    其決定了任何兩個位置之間的漫散射的描述問題,且無論兩者之間的幾何形狀如何,如下圖所示。那麼,如何確定這幾個高斯函數的權重和方差?這是一個很經典的問題,即給定一條曲線,如何用多項式或者三角函數去擬合。五、常規基於模糊的次表面散射方法上文提到,擴散剖面(diffusion profile)是描述光線如何在半透明物體中進行擴散和分布的函數。得到擴散剖面(diffusion profile),即光線是如何在半透明物體中進行擴散和分布之後,接下來就可以對附近的像素進行加權求和,以模擬次表面散射的效果。
  • 小米9如何開啟GPU超頻模式 - IT之家
    IT之家5月16日消息 據小米社區消息,小米9該如何打開GPU超頻模式呢?這裡需要借用一款第三方工具「創建快捷方式」,通過該工具來搜索活動,檢測是否有「GPU超頻」活動項。四、普通模式與超頻模式跑分對比GPU指的是圖像處理器,負責圖像運算工作,而「GPU超頻」就是指使GPU的最大工作頻率,開啟超頻從而提升手機性能。我們下面通過安兔兔跑分來直接對比,直觀的了解GPU超頻後提升的主要是哪方面性能。左圖是正常跑分,右圖是開啟GPU超頻後跑分。
  • VRay for SketchUp渲染器GPU渲染優勢的測試及分析
    除此之外,VRay最大的改進是GPU渲染引擎開始成熟了,在3.6版本更是支持GPU與CPU的混合渲染,這樣無疑會充分利用電腦的硬體資源,提高渲染速度。關於CPU和GPU我們的計算機,通常包括二個具有計算功能的晶片,一個是位於主板上的CPU,一個位於顯卡上稱為GPU。
  • 深度學習中GPU和顯存分析
    向AI轉型的程式設計師都關注了這個號👇👇👇機器學習AI算法工程   公眾號:datayx深度學習最吃機器,耗資源,在本文,我將來科普一下在深度學習中:何為「資源」不同操作都耗費什麼資源如何充分的利用有限的資源
  • 渲雲GPU升級至P40 與京東雲聯手實現雲端極速渲染
    隨著雲時代的興起,正在催生著以移動端應用為主的全新業務模式,渲染業務雲化發展是大勢所趨。它的最大特點在於,不但大大縮減製作時間,成本更低,並可完成超高精細度視覺效果。那麼,渲染行業需要什麼樣的雲?回答這個問題,首先分析下渲染行業面臨的主要問題。第一,硬體投入成本大,還需要承擔硬體損耗的費用。第二,會產生資源浪費,如果不能保證一直有大量的渲染工作排期就會出現機器靜置進而產生浪費。第三,當出現突發性的短暫但海量的業務需求,導致超過本身集群規模能提供的算力支持時,只能選擇購入新的GPU硬體來擴大集群。第四,需要承擔超大集群的運維工作。
  • 線上線下如何更好結合,世界5G大會高通展示創新模式
    由於全球再次受到疫情的衝擊,各國均加強了防疫工作,這使得國際大型會議的召開變得非常的困難。如果跨國參加的話,很可能就得接受來去兩個14天的隔離,也就是耗費一個月的時間參加一次會議,這個時間成本顯然是巨大的。如果單純以視頻形式參加的話,又少了商業會議所需要的線下互動環節。
  • 使用GPU.js改善JavaScript性能
    在該初學者指南中,我們將演示如何使用GPU.js執行複雜的數學計算並提高JavaScript應用的性能。什麼是GPU.js?GPU.js是一個針對Web和Node.js構建的JavaScript加速庫,用於在圖形處理單元(GPGPU)上進行通用編程,它使你可以將複雜且耗時的計算移交給GPU而不是CPU,以實現更快的計算和操作。
  • 高通驍龍888發布背後,是ARM的野心和手機產業的狂歡
    ,這在之前高通旗艦晶片的發布史上,是罕見的。而相對於A78的性能而言,X1標準模式下的提升是巨大的: 每時鐘周期指令解碼數量從4提升到5;L0-BTB(Zero cycle Bubble Taken-Branch)容量從64提升到96;宏操作緩存容量從1.5K提升到3K;亂序窗口數量從160提升到224;每時鐘周期指令發射數量從6提升到8;浮點單元從2×128 NEON提升到4×128 NEON。