現(xiàn)代GPU提供了頂點(diǎn)處理器和片段處理器兩個(gè)可編程并行處理部件。在利用GPU執(zhí)行圖像處理等通用計(jì)算任務(wù)時(shí),要做的主要工作是把待求解的任務(wù)映射到GPU支持的圖形繪制流水線上。
通常的方法是把計(jì)算任務(wù)的輸入數(shù)據(jù)用頂點(diǎn)的位置、顏色、法向量等屬性或者紋理等圖形繪制要素來(lái)表達(dá),而相應(yīng)的處理算法則被分解為一系列的執(zhí)行步驟,并改寫為GPU的頂點(diǎn)處理程序或片段處理程序,然后,調(diào)用3D API執(zhí)行圖形繪制操作,調(diào)用片段程序進(jìn)行處理;最后,保存在幀緩存中的繪制結(jié)果就是算法的輸出數(shù)據(jù)。
雖然數(shù)字圖像處理算法多種多樣,具體實(shí)現(xiàn)過(guò)程也很不相同,但是在利用GPU進(jìn)行并行化處理時(shí),有一些共性的關(guān)鍵技術(shù)問(wèn)題需要解決,如:數(shù)據(jù)的加載,計(jì)算結(jié)果的反饋、保存等。
下面對(duì)這些共性的問(wèn)題進(jìn)行分析,并提出相應(yīng)的解決思路。
1. 數(shù)據(jù)加載
在GPU的流式編程模型中,所有的數(shù)據(jù)都必須以“流”的形式進(jìn)行加載處理,并通過(guò)抽象的3D API進(jìn)行訪問(wèn)。在利用GPU進(jìn)行圖像處理時(shí),最直接有效的數(shù)據(jù)加載方法是把待處理的圖像打包為紋理,在繪制四邊形時(shí)進(jìn)行加載、處理。同時(shí)為了保證GPU上片段程序能夠逐像素的對(duì)紋理圖像進(jìn)行處理,必須將投影變換設(shè)置為正交投影,視點(diǎn)變換的視區(qū)與紋理大小相同,使得光柵化后的每個(gè)片段(fragment)和每個(gè)紋理單元(texel)一一對(duì)應(yīng)。對(duì)于圖像處理算法中的其他參數(shù),如果數(shù)據(jù)量很小,則可以直接通過(guò)接口函數(shù)進(jìn)行設(shè)置;如果參數(shù)比較多,也應(yīng)該將其打包為紋理的形式傳輸給GPU。在打包的過(guò)程中應(yīng)充分利用紋理圖像所具有的R、G、B、A四個(gè)通道。
2. 計(jì)算結(jié)果的反饋、保存
應(yīng)用程序是通過(guò)調(diào)用3D API繪制帶紋理的四邊形,激活GPU上的片段程序進(jìn)行圖像處理的,而GPU片段著色器的直接渲染輸出是一個(gè)幀緩沖區(qū),它對(duì)應(yīng)著計(jì)算機(jī)屏幕上的一個(gè)窗口,傳統(tǒng)上用來(lái)容納要顯示到屏幕的像素,但是在GPU流式計(jì)算中可以用來(lái)保存計(jì)算結(jié)果。雖然CPU可以通過(guò)3D API直接讀寫這個(gè)幀緩沖區(qū),將渲染處理的結(jié)果從幀緩存中復(fù)制到系統(tǒng)內(nèi)存進(jìn)行保存,但是幀緩存的大小受窗口大小限制,而且由于AGP總線的帶寬限制(2.1GB/s),從顯存到系統(tǒng)
鏡像變換 GPU 渲染主要包括以下幾個(gè)步驟:
設(shè)置 1 個(gè)輸入紋理;
對(duì)輸入紋理進(jìn)行紋理采樣;
設(shè)置變換矩陣;
在頂點(diǎn)著色器中,將輸入頂點(diǎn)與變換矩陣相乘;
輸出圖像數(shù)據(jù);
-
gpu
+關(guān)注
關(guān)注
28文章
4740瀏覽量
128948 -
圖像處理
+關(guān)注
關(guān)注
27文章
1292瀏覽量
56745
原文標(biāo)題:GPU圖像處理的基本流程
文章出處:【微信號(hào):Imgtec,微信公眾號(hào):Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論