如果實(shí)施得當(dāng),移動(dòng)系統(tǒng)中的 GPU 可以提高性能。但這是一個(gè)很大的“如果”。
移動(dòng) GPU 或圖形處理單元是專用的協(xié)處理器,旨在加速智能手機(jī)、平板電腦、可穿戴設(shè)備和 IoT 設(shè)備上的圖形應(yīng)用程序、用戶界面和 3D 內(nèi)容。逼真的 3D 游戲和“實(shí)時(shí)”圖形用戶界面 (GUI) 是專為 GPU 設(shè)計(jì)的工作負(fù)載示例。
幾年前,GPU 是一個(gè)很好的功能,設(shè)計(jì)用于需要最新技術(shù)來(lái)保持其旗艦地位的高端消費(fèi)移動(dòng)產(chǎn)品?,F(xiàn)在,隨著圖形顯示無(wú)處不在并用于各種連接設(shè)備,GPU 已成為所有移動(dòng)應(yīng)用處理器和中/高端 MCU/MPU 產(chǎn)品規(guī)格的必要組成部分。GPU 還有助于產(chǎn)品差異化,因此公司可以為其目標(biāo)應(yīng)用程序創(chuàng)建引人注目的、以視覺為中心的解決方案。
GPU 設(shè)計(jì)為單指令多數(shù)據(jù) (SIMD) 處理引擎,專為大規(guī)模并行工作負(fù)載而構(gòu)建。3D 圖形是高吞吐量并行處理的最佳示例之一,因?yàn)?GPU 每秒可以處理數(shù)十億個(gè)像素/頂點(diǎn)或浮點(diǎn)運(yùn)算 (GFLOPS)。GPU 的核心是一個(gè)或多個(gè)著色器(SIMD 單元),它們處理獨(dú)立的頂點(diǎn)、圖元和片段(像素)。著色器是按頂點(diǎn)、按像素或其他基元執(zhí)行 3D 圖形程序的計(jì)算元素。
頂點(diǎn)著色器程序修改對(duì)象屬性以實(shí)現(xiàn)對(duì)位置、移動(dòng)、頂點(diǎn)光照和顏色的控制。像素或片段著色器程序計(jì)算最終的像素顏色、陰影、對(duì)象紋理、照明,并且可以通過(guò)編程為場(chǎng)景添加特殊效果,例如模糊、邊緣增強(qiáng)或過(guò)濾。還有更新類型的著色器程序,包括幾何、曲面細(xì)分和計(jì)算著色器。
像 OpenGL ES 3.1 中的計(jì)算著色器對(duì)于高級(jí)圖形渲染非常有用,您可以在其中混合 3D 和 GPU 計(jì)算 (GPGPU) 上下文以添加真實(shí)效果,如物理處理(游戲中的自然波浪和風(fēng)運(yùn)動(dòng)或生動(dòng)的爆炸)和全局照明(通過(guò)涉及直接和間接光源/光線的計(jì)算獲得更好的照明和陰影)。GPU 還可以從一個(gè)著色器單元有效地?cái)U(kuò)展到數(shù)千個(gè)互連的分組著色器單元,以根據(jù)從物聯(lián)網(wǎng)和移動(dòng)到高性能計(jì)算 (HPC) 科學(xué)計(jì)算的目標(biāo)應(yīng)用程序提高性能和并行性。高性能著色器設(shè)計(jì)可以運(yùn)行在 1.2 GHz 以上,每個(gè)周期執(zhí)行數(shù)十億條指令,以處理圖形、OpenCL、OpenVX(視覺處理)等。
圖 1 顯示了 CPU 和 GPU 架構(gòu)之間的一些主要區(qū)別。每種設(shè)計(jì)都有其優(yōu)勢(shì),必須協(xié)同工作以實(shí)現(xiàn)最優(yōu)化的解決方案(功率、帶寬、資源共享等)。最好的設(shè)計(jì)使用異構(gòu)系統(tǒng)架構(gòu),根據(jù)其優(yōu)勢(shì)將工作負(fù)載拆分/分配給每個(gè)處理核心。隨著行業(yè)向平臺(tái)級(jí)優(yōu)化發(fā)展,GPU 也正在成為系統(tǒng)的重要組成部分,其中 GPU 用于圖形以外的計(jì)算密集型應(yīng)用程序。請(qǐng)注意,在當(dāng)今的混合設(shè)計(jì)中,還有其他計(jì)算模塊,包括 DSP、FPGA 和其他可以與 CPU-GPU 組合一起使用的任務(wù)特定內(nèi)核。
圖1
GPU流水線介紹
較新的 GPU 使用“統(tǒng)一”著色器來(lái)實(shí)現(xiàn)跨不同類型著色器程序的最佳硬件資源管理,以平衡工作負(fù)載。統(tǒng)一著色器的第一個(gè)版本結(jié)合了頂點(diǎn) (VS) 和像素 (PS) 處理,隨著圖形 API 的發(fā)展,后續(xù)版本增加了對(duì)幾何 (GS)、曲面細(xì)分 (TS) 和計(jì)算 (CS) 著色器的支持。
對(duì)于統(tǒng)一著色器,分配給每個(gè)著色器的工作負(fù)載可以是基于頂點(diǎn)或基于像素的,允許著色器在任一上下文之間即時(shí)切換以保持高水平的著色器利用率。如果您有一個(gè)頂點(diǎn)或像素重的圖像,這可以最大限度地減少硬件資源瓶頸和停滯。在非統(tǒng)一著色器架構(gòu)中,有單獨(dú)的、固定的 VS 和 PS 著色器。例如,如果圖像的頂點(diǎn)很重,VS 可能會(huì)停止 GPU 管道,因?yàn)樗枰?GPU 繼續(xù)處理圖像的其余部分之前完成。這會(huì)導(dǎo)致管道泡沫和硬件的低效使用。圖 2 顯示了一個(gè)單獨(dú)的 VS 和 PS 與一個(gè)統(tǒng)一的著色器核心的情況。
圖 2
多年來(lái),GPU 著色器已經(jīng)超越了圖形,包括通用管道,可配置用于圖形、計(jì)算、圖像 (ISP) 協(xié)同處理、嵌入式視覺、視頻(HEVC 和 H.264 前/后處理等) 。),以及其他并行應(yīng)用程序。這就是為什么您會(huì)聽到諸如 GPGPU(通用 GPU)和 GPU 計(jì)算之類的術(shù)語(yǔ)來(lái)描述 GPU 在圖形渲染之外的廣泛使用。
從高層次上看,移動(dòng) GPU 管道由多個(gè)關(guān)鍵塊組成:
主機(jī)接口和(安全)MMU
通過(guò) ACE-Lite/AXI/AHB 接口與 CPU 通信。
處理來(lái)自 CPU 的命令并從幀緩沖區(qū)或系統(tǒng)內(nèi)存訪問幾何數(shù)據(jù)。
輸出發(fā)送到下一個(gè)階段(頂點(diǎn)著色器)的頂點(diǎn)流。
管理所有 GPU 事務(wù),包括向著色器發(fā)送指令/數(shù)據(jù),分配/取消分配資源,并為安全事務(wù)和數(shù)據(jù)壓縮提供安全性。
可編程統(tǒng)一著色器
頂點(diǎn)著色器 (VS) 包括頂點(diǎn)變換、光照和插值,可以從簡(jiǎn)單(線性)到復(fù)雜(變形效果)。
像素/片段著色器 (PS) 計(jì)算考慮到光照、陰影和其他屬性(包括紋理映射)的最終像素值。
幾何著色器 (GS) 采用圖元(線、點(diǎn)或三角形)并修改、創(chuàng)建(或破壞)頂點(diǎn)以增加對(duì)象的細(xì)節(jié)級(jí)別。GS 允許 GPU 管道訪問相鄰的圖元,因此可以將它們作為一個(gè)緊密結(jié)合的組進(jìn)行操作,以創(chuàng)建逼真的效果,其中相鄰頂點(diǎn)相互交互以創(chuàng)建具有平滑流動(dòng)運(yùn)動(dòng)(頭發(fā)、衣服等)的效果。GS/VS/PS 組合允許更自主的 GPU 操作在內(nèi)部處理狀態(tài)變化(最小化 CPU-GPU 交互),方法是添加算術(shù)和動(dòng)態(tài)流控制邏輯來(lái)卸載以前在 CPU 上完成的操作。另一個(gè)關(guān)鍵特性是 Stream Out,其中 VS/GS 可以將數(shù)據(jù)直接輸出到內(nèi)存,并且可以由著色器單元或任何其他 GPU 塊自動(dòng)重復(fù)訪問數(shù)據(jù),而無(wú)需 CPU 干預(yù)。
曲面細(xì)分著色器 (TS) 在 TS 管道中包括兩個(gè)稱為 Hull 和域著色器的固定功能單元。TS 采用曲面(矩形或三角形)并將它們轉(zhuǎn)換為具有不同數(shù)量的多邊形表示(網(wǎng)格/補(bǔ)丁),可以根據(jù)質(zhì)量要求進(jìn)行更改。較高的計(jì)數(shù)會(huì)創(chuàng)建更多的細(xì)節(jié),而較低的計(jì)數(shù)會(huì)在對(duì)象上創(chuàng)建較少的細(xì)節(jié)。鑲嵌單元由三部分組成:
外殼著色器 (HS) 是一種可編程著色器,它從基本輸入補(bǔ)丁(四邊形、三角形或線)生成幾何(表面)補(bǔ)丁并計(jì)算用于操縱表面的控制點(diǎn)數(shù)據(jù)。HS 還計(jì)算傳遞給 tessellator 的自適應(yīng) tessellation 因子,因此它知道如何細(xì)分表面屬性。
Tessellator 是一個(gè)固定(可配置)功能階段,它根據(jù)來(lái)自 HS 的 tessellation 因子將補(bǔ)丁細(xì)分為更小的對(duì)象(三角形、線或點(diǎn))。
域著色器 (DS) 是一種可編程著色器,它評(píng)估表面并為輸出補(bǔ)丁中的每個(gè)細(xì)分點(diǎn)計(jì)算新的頂點(diǎn)位置,并將其發(fā)送到 GS 進(jìn)行額外處理。
計(jì)算著色器 (CS) 將 GPGPU/GPU 計(jì)算能力添加到圖形管道中,因此開發(fā)人員可以編寫使用此著色器的 GLSL 應(yīng)用程序代碼,并且可以在正常渲染管道之外運(yùn)行。數(shù)據(jù)可以在管道階段和渲染計(jì)算上下文之間在內(nèi)部共享,因此兩者都可以并行執(zhí)行。CS 還可以使用與 OpenGL/OpenGL ES 渲染管道相同的上下文、狀態(tài)、制服、紋理、圖像紋理、原子計(jì)數(shù)器等,使其更容易和更直接地編程和與渲染管道輸出一起使用。
可編程光柵化器
將對(duì)象從幾何形式轉(zhuǎn)換為像素形式,并剔除(移除)任何背面或隱藏的表面。有許多級(jí)別的剔除機(jī)制可確保不處理隱藏像素以節(jié)省計(jì)算周期、帶寬和功率。
內(nèi)存接口
在將像素寫入幀緩沖區(qū)之前,使用 Z 緩沖區(qū)、模板/alpha 測(cè)試刪除看不見或隱藏的像素。
在此階段執(zhí)行包括 Z 和顏色緩沖區(qū)的壓縮。
即時(shí)模式與延遲渲染 GPU
有兩種常見的 GPU 架構(gòu)和渲染圖像的方法。兩種方法都使用前面描述的相同的通用管道,但它們用于繪制的機(jī)制不同。一種方法稱為基于 Tile 的延遲渲染 (TBDR),另一種稱為即時(shí)模式渲染 (IMR)。根據(jù)各自的用例,兩者都有優(yōu)點(diǎn)和缺點(diǎn)。
1995 年(在智能手機(jī)/平板電腦出現(xiàn)之前),許多圖形公司在 PC 和游戲機(jī)市場(chǎng)支持這兩種方法。TBDR 集團(tuán)擁有英特爾、微軟(Talisman)、Matrox、PowerVR 和 Oak 等公司。IMR 方面有 SGI、S3、Nvidia、ATi 和 3dfx 等名稱??爝M(jìn)到 2014 年——PC 和游戲機(jī)市場(chǎng)還沒有使用 TBDR 架構(gòu)。所有 PC 和游戲機(jī)架構(gòu),包括 PS3/PS4、Xbox 360/One 和 Wii,都是基于 IMR。
這種轉(zhuǎn)變的主要原因是因?yàn)?IMR 作為對(duì)象渲染架構(gòu)的內(nèi)在優(yōu)勢(shì),可以處理非常復(fù)雜的動(dòng)態(tài)游戲(例如,快速運(yùn)動(dòng)、FPS 或場(chǎng)景或視點(diǎn)不斷變化的幀到幀的賽車游戲) 。 此外,隨著 3D 內(nèi)容三角形速率的增加,TBDR 無(wú)法跟上,因?yàn)樗鼈冃枰粩嗟貙⒕彺鎯?nèi)存溢出到幀緩沖內(nèi)存,因?yàn)樗鼈兊募軜?gòu)限制。更高的三角形/多邊形數(shù)量允許 GPU 渲染絲般光滑和細(xì)致(逼真)的表面,而不是出現(xiàn)在傳統(tǒng)游戲中的塊狀曲面。通過(guò)在 IMR 中添加曲面細(xì)分著色器,三角形/多邊形進(jìn)一步細(xì)分的表面渲染使 3D 圖形更加接近現(xiàn)實(shí)。
今天的移動(dòng)市場(chǎng)密切反映了 IMR 技術(shù)正在取代 TBDR 的 PC 和游戲機(jī)市場(chǎng)趨勢(shì)。在 TBDR 市場(chǎng)上,有兩家公司,Imagination 和 ARM,盡管 ARM 正試圖轉(zhuǎn)向 IMR,因?yàn)樗麄兛吹搅嗽谝苿?dòng)設(shè)備上運(yùn)行下一代游戲的主要優(yōu)勢(shì)。在 IMR 方面,有高通、Vivante、Nvidia、AMD 和英特爾。
使用 IMR 的一大好處是游戲/應(yīng)用程序開發(fā)人員可以重用并輕松地將已經(jīng)在復(fù)雜 GPU(或游戲控制臺(tái))上運(yùn)行的現(xiàn)有游戲資產(chǎn)移植到移動(dòng)設(shè)備上。由于移動(dòng)設(shè)備對(duì)功率/散熱和芯片面積有嚴(yán)格的限制,因此縮小性能差距并最大限度地減少應(yīng)用程序移植或重大代碼更改的最佳方法是使用與他們開發(fā)的架構(gòu)類似的架構(gòu)。除了獲得等效的高質(zhì)量 PC 質(zhì)量渲染之外,IMR 還為開發(fā)人員提供了選擇,所有這些都封裝在比 TBDR 解決方案更小的裸片區(qū)域中。隨著行業(yè)超越 OpenGL ES 3.1 和 DirectX 12 應(yīng)用程序編程接口 (API),IMR 還提高了內(nèi)部系統(tǒng)和外部?jī)?nèi)存帶寬。
最后,TBDR 架構(gòu)針對(duì)低三角形/多邊形數(shù)量的 3D 內(nèi)容和簡(jiǎn)單的用戶界面進(jìn)行了優(yōu)化。IMR 架構(gòu)在動(dòng)態(tài)用戶界面和詳細(xì)的 3D 內(nèi)容方面表現(xiàn)出色,可為移動(dòng)設(shè)備帶來(lái)與 PC 和游戲機(jī)相同的用戶體驗(yàn)和游戲質(zhì)量。
多年來(lái)的圖形 API
領(lǐng)先的移動(dòng)設(shè)備 3D API 基于 Khronos Group 的 OpenGL ES API,可在大多數(shù)當(dāng)前智能手機(jī)和平板電腦中找到,適用于包括 Android、iOS 和 Windows 在內(nèi)的各種操作系統(tǒng)。OpenGL ES 基于 OpenGL 的桌面版本,針對(duì)移動(dòng)設(shè)備進(jìn)行了優(yōu)化,包括去除冗余和很少使用的特性以及添加移動(dòng)友好的數(shù)據(jù)格式。
初始版本 OpenGL ES 1.1 基于固定功能硬件,OpenGL ES 2.0 基于可編程頂點(diǎn)和片段(像素)著色器,同時(shí)刪除了 1.1 版的固定功能轉(zhuǎn)換和片段管道。OpenGL ES 3.0 通過(guò)添加基于 OpenGL 3.3/4.x 的功能并減少對(duì)擴(kuò)展的需求,從而通過(guò)對(duì)支持的功能提出更嚴(yán)格的要求并減少實(shí)現(xiàn)可變性來(lái)簡(jiǎn)化編程,從而進(jìn)一步推動(dòng)了行業(yè)發(fā)展。一些 GLES 3.0 功能包括遮擋查詢、MRT、紋理/頂點(diǎn)數(shù)組、實(shí)例化、變換反饋、更多可編程性、OpenCL 互操作性、更高質(zhì)量(32 位浮點(diǎn)數(shù)/整數(shù))、NPOT 紋理、3D 紋理等。
在 2014 年 3 月的游戲開發(fā)者大會(huì)上,Khronos 發(fā)布了 OpenGL ES 3.1,其中包含計(jì)算著色器 (CS)、單獨(dú)的著色器對(duì)象、間接繪制命令、增強(qiáng)的紋理和新的 GLSL 語(yǔ)言添加等進(jìn)步。在 OpenGL ES 3.1 發(fā)布的同時(shí),Google 還發(fā)布了其 Android L 擴(kuò)展包 (AEP),它需要移動(dòng)硬件中的幾何 (GS) 和曲面細(xì)分 (TS) 著色器功能,以便為 Android 平臺(tái)帶來(lái)先進(jìn)的 3D 功能以鏡像 PC 級(jí)圖形。圖 3 顯示了 OpenGL 和 OpenGL ES 多年來(lái)的進(jìn)展時(shí)間線。Microsoft 的 DirectX (DX) API 的轉(zhuǎn)換和映射如圖 4 所示。DX9 映射到 OpenGL ES 2.0,DX10/DX11 映射到 OpenGL ES 3.1。
GPU超越了圖形
在過(guò)去的幾年里,工業(yè)和大學(xué)的研究人員發(fā)現(xiàn),現(xiàn)代 GPU 的計(jì)算資源由于其固有的并行架構(gòu)而適用于某些并行計(jì)算。GPU 上顯示的計(jì)算速度提升很快得到了認(rèn)可,并且基于 GPU 的巨大處理能力構(gòu)建的另一個(gè) HPC 細(xì)分市場(chǎng)誕生了。
超越圖形的 GPU 可以稱為 GPU 計(jì)算核心或 GPGPU。OpenCL、HSA、OpenVX 和 Microsoft DirectCompute 等不同的行業(yè)標(biāo)準(zhǔn)已經(jīng)實(shí)現(xiàn),其中任務(wù)和指令并行性現(xiàn)在已經(jīng)過(guò)優(yōu)化,以利用不同的處理內(nèi)核。在不久的將來(lái),移動(dòng)設(shè)備將通過(guò)卸載 CPU、DSP 或自定義內(nèi)核來(lái)更好地利用系統(tǒng)資源,并使用 GPU 來(lái)實(shí)現(xiàn)最高的計(jì)算性能、計(jì)算密度、時(shí)間節(jié)省和整體系統(tǒng)加速。最好的方法是使用混合實(shí)現(xiàn),其中 CPU 和 GPU 緊密交錯(cuò)以達(dá)到性能和功耗目標(biāo)。
圖 5 | 下表在查看內(nèi)存延遲、線程管理和執(zhí)行并行性等不同因素時(shí)將 CPU 與 GPU 進(jìn)行了比較。
許多計(jì)算問題,如圖像處理、視覺處理、分析、數(shù)學(xué)計(jì)算和其他并行算法,都很好地映射到 GPU SIMD 架構(gòu)。您甚至可以對(duì) GPU 進(jìn)行編程以使用多 GPU 方法,其中計(jì)算任務(wù)和/或 3D 渲染幀在 GPU 之間拆分以提高性能和吞吐量。GPU 可以在多上下文模式下工作,以同時(shí)執(zhí)行 3D 和計(jì)算線程。例如,GPU 核心 1 和 2 分配給渲染圖像,核心 3 和 4 專用于 GPGPU 功能,如粒子效果(煙/水/火)、模擬真實(shí)世界運(yùn)動(dòng)的游戲物理或自然用戶界面(NUI ) 處理手勢(shì)支持。采用 GPGPU 的其他市場(chǎng),尤其是在嵌入式/計(jì)算機(jī)視覺領(lǐng)域,包括:
增強(qiáng)現(xiàn)實(shí):使用 GPU 生成的數(shù)據(jù)(圖像、數(shù)據(jù)、3D 渲染等)覆蓋現(xiàn)實(shí)世界環(huán)境,這些數(shù)據(jù)可以從各種傳感器(如 Google Glass)輸入。AR 可以處理在線(實(shí)時(shí)和直接)或離線內(nèi)容流。
特征提?。簩?duì)許多視覺算法至關(guān)重要,因?yàn)樾枰獎(jiǎng)?chuàng)建圖像“興趣點(diǎn)”和描述符,以便 GPU 知道要處理什么。SURF(加速魯棒特征)和 SIFT 是可以在 GPU 上有效并行化的算法示例。物體識(shí)別和符號(hào)識(shí)別是這種應(yīng)用的形式。
點(diǎn)云處理:包括特征提取以創(chuàng)建 3D 圖像,以檢測(cè)雜亂圖像中的形狀和分割對(duì)象。用途可能包括將增強(qiáng)現(xiàn)實(shí)添加到街景地圖中。
高級(jí)駕駛輔助系統(tǒng) (ADAS):不斷實(shí)時(shí)計(jì)算多種安全功能,包括線路檢測(cè)/車道輔助(Hough 變換、Sobel/Canny 算法)、行人檢測(cè)(定向梯度直方圖或 HOGS)、圖像去扭曲、盲點(diǎn)檢測(cè)等。
安全與監(jiān)控:包括通過(guò)人臉地標(biāo)定位(Haar 特征分類器)、人臉特征提取和分類以及對(duì)象識(shí)別的人臉識(shí)別。
運(yùn)動(dòng)處理:自然的用戶界面,如手勢(shì)識(shí)別,將手與背景分離(如顏色空間轉(zhuǎn)換為 HSV 顏色空間),然后對(duì)手進(jìn)行結(jié)構(gòu)分析以處理運(yùn)動(dòng)。
視頻處理:使用著色器程序和高速整數(shù)/浮點(diǎn)計(jì)算的 HEVC 視頻協(xié)同處理。
圖像處理:將 GPGPU 與圖像信號(hào)處理器 (ISP) 相結(jié)合,以實(shí)現(xiàn)流線型的圖像處理管道。
傳感器融合:將視覺處理與其他傳感器數(shù)據(jù)(如激光雷達(dá))相結(jié)合,以創(chuàng)建具有深度的 3D 空間地圖。圖形中使用的一個(gè)類似概念是光線追蹤,您可以射出一條光線并在圖像中追蹤其路徑,并計(jì)算所有光線與對(duì)象的交點(diǎn)和反彈以生成逼真的 3D 圖像。
消費(fèi)者和行業(yè)正在推動(dòng)移動(dòng)領(lǐng)域的前沿技術(shù)向前發(fā)展。因此,GPU 供應(yīng)商必須不斷創(chuàng)新并跟上最新趨勢(shì)、API 和用例,同時(shí)最大限度地提高性能并最大限度地減少高級(jí)圖形和計(jì)算功能的功耗和芯片面積增量。移動(dòng) GPU 設(shè)計(jì)必須從算法層面進(jìn)行架構(gòu)設(shè)計(jì),并經(jīng)過(guò)深思熟慮,以實(shí)現(xiàn)業(yè)界最小的集成設(shè)計(jì)和硬件占用空間。直接取自 PC GPU 的設(shè)計(jì)無(wú)法有效地按比例縮小以實(shí)現(xiàn)移動(dòng)電源效率。秘訣在于配置引擎蓋下的內(nèi)容,以使移動(dòng)應(yīng)用程序點(diǎn)擊,而不限制功能、穩(wěn)健性或所需的性能。
審核編輯:郭婷
-
傳感器
+關(guān)注
關(guān)注
2565文章
52946瀏覽量
766983 -
處理器
+關(guān)注
關(guān)注
68文章
19884瀏覽量
234990 -
gpu
+關(guān)注
關(guān)注
28文章
4937瀏覽量
131185
發(fā)布評(píng)論請(qǐng)先 登錄
Condor使用Cadence托管云服務(wù)開發(fā)高性能RISC-V微處理器
如何基于Kahn處理網(wǎng)絡(luò)定義AI引擎圖形編程模型

評(píng)論