Graphics Processing Unit(GPU),即可編程圖形處理單元, 通常也稱之為可編程圖形硬件。
由于GPU有高并行結(jié)構(gòu)(highly parallel structure),所以GPU在處理圖形數(shù)據(jù)和復(fù)雜算法方面擁有比CPU更高的效率。圖 1 GPU VS CPU 展示了 GPU 和 CPU 在結(jié)構(gòu)上的差異,CPU 大部分面積為控制器和寄存器,與之相比,GPU擁有更多的 ALU(Arithmetic Logic Unit,邏輯運算單元)用于數(shù)據(jù)處理,而非數(shù)據(jù)高速緩存和流控制,這樣的結(jié)構(gòu)適合對密集型數(shù)據(jù)進行并行處理。CPU 執(zhí)行計算任務(wù)時,一個時刻只處理一個數(shù)據(jù),不存在真正意義上的并行,而 GPU 具有多個處理器核,在一個時刻可以并行處理多個數(shù)據(jù)。
GPU 采用流式并行計算模式,可對每個數(shù)據(jù)進行獨立的并行計算,所謂“對 數(shù)據(jù)進行獨立計算”,即,流內(nèi)任意元素的計算不依賴于其它同類型數(shù)據(jù),例如,計算一個頂點的世界位置坐標(biāo),不依賴于其他頂點的位置。而所謂“并行計算” 是指“多個數(shù)據(jù)可以同時被使用,多個數(shù)據(jù)并行運算的時間和 1 個數(shù)據(jù)單獨執(zhí)行的時間是一樣的”。圖 2 中代碼目的是提取 2D 圖像上每個像素點的顏色值,在 CPU 上運算的 C++代碼通過循環(huán)語句依次遍歷像素;而在 GPU 上,則只需要一條語句就足夠。
其一,object space coordinate 就是模型文件中的頂點值,這些值是在模型建模時得到的,例如,用 3DMAX 建 立一個球體模型并導(dǎo)出為.max 文件,這個文件中包含的數(shù)據(jù)就是 object space coordinate;其二,object space coordinate 與其他物體沒有任何參照關(guān)系,注意,這個概念非常重要,它是將 object space coordinate 和 world space coordinate 區(qū)分 開來的關(guān)鍵。無論在現(xiàn)實世界,還是在計算機的虛擬空間中,物體都必須和一個固定的坐標(biāo)原點進行參照才能確定自己所在的位置,這是 world space coordinate 的實際意義所在。
從 object space coordinate 到 world space coordinate 的變換過程由一個四階矩陣控制,通常稱之為 world matrix。需要高度注意的是:頂點法向量在模型文件中屬于 object space,在 GPU 的 頂點程序中必須將法向量轉(zhuǎn)換到 world space 中才能使用,如同必須將頂點坐標(biāo)從 object space 轉(zhuǎn)換到 world space 中一樣,但兩者的轉(zhuǎn)換矩陣是不同的,準確的說,法向量從 object space 到 world space 的轉(zhuǎn)換矩陣是 world matrix 的轉(zhuǎn)置矩陣的逆矩陣。
每個人都是從各自的視點出發(fā)觀察這個世界,無論是主觀世界還是客觀世界。同樣,在計算機中每次只能從唯一的視角出發(fā)渲染物體。在游戲中,都會提供視點漫游的功能,屏幕顯示的內(nèi)容隨著視點的變化而變化。這是因為 GPU 將 物體頂點坐標(biāo)從 world space 轉(zhuǎn)換到了 eye space。 所謂 eye space,即以 camera(視點或相機)為原點,由視線方向、視角和遠近平面,共同組成一個梯形體的三維空間,稱之為 viewing frustum(視錐), 如圖 4 所示。近平面,是梯形體較小的矩形面,作為投影平面,遠平面是梯形體 較大的矩形,在這個梯形體中的所有頂點數(shù)據(jù)是可見的,而超出這個梯形體之外的場景數(shù)據(jù),會被視點去除(Frustum Culling,也稱之為視錐裁剪)。
從視點坐標(biāo)空間到屏幕坐標(biāo)空間 (screen coordinate space)事實上是由三步組成:
1. 用透視變換矩陣把頂點從視錐體中變換到裁剪空間的 CVV 中;2. 在 CVV 進行圖元裁剪;3. 屏幕映射:將經(jīng)過前述過程得到的坐標(biāo)映射到屏幕坐標(biāo)系上。
從物理結(jié)構(gòu)而言,寄存器是 cpu 或 gpu 內(nèi)部的存儲單元,即寄存器是嵌入在 cpu 或者 gpu 中的,而內(nèi)存則可以獨立存在;
從功能上而言,寄存器是有限存儲 容量的高速存儲部件,用來暫存指令、數(shù)據(jù)和位址。
Shader 編成是基于計算機圖形硬件的,這其中就包括 GPU 上的寄存器類型,glsl 和 hlsl 的著色虛擬機版本就是基于 GPU 的寄存器和指令集而區(qū)分的。
頂點著色器控制頂點坐標(biāo) 轉(zhuǎn)換過程;片段著色器控制像素顏色計算過程。這樣就區(qū)分出頂點著色程序和片 段著色程序的各自分工:Vertex program 負責(zé)頂點坐標(biāo)變換;Fragment program 負責(zé)像素顏色計算;前者的輸出是后者的輸入。
-
寄存器
+關(guān)注
關(guān)注
31文章
5434瀏覽量
124582 -
gpu
+關(guān)注
關(guān)注
28文章
4949瀏覽量
131288
原文標(biāo)題:GPU學(xué)習(xí)筆記
文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
【「算力芯片 | 高性能 CPU/GPU/NPU 微架構(gòu)分析」閱讀體驗】+NVlink技術(shù)從應(yīng)用到原理
GPU架構(gòu)深度解析

搭建算力中心,從了解的GPU 特性開始

可以手動構(gòu)建imx-gpu-viv嗎?
OpenVINO?檢測到GPU,但網(wǎng)絡(luò)無法加載到GPU插件,為什么?
從CPU到GPU:渲染技術(shù)的演進和趨勢

GPU是如何訓(xùn)練AI大模型的
PyTorch GPU 加速訓(xùn)練模型方法
【「算力芯片 | 高性能 CPU/GPU/NPU 微架構(gòu)分析」閱讀體驗】--了解算力芯片GPU
【一文看懂】大白話解釋“GPU與GPU算力”

GPU超頻設(shè)置技巧
如何選擇適合的GPU
【「算力芯片 | 高性能 CPU/GPU/NPU 微架構(gòu)分析」閱讀體驗】--全書概覽
GPU云服務(wù)器架構(gòu)解析及應(yīng)用優(yōu)勢

評論