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