gpu 編程簡介

 

一 目前最新的可編程圖形硬件已經具備瞭如下功能:

1  支持vertex programmability 和fragment programmability
2  支持IEEE32 位浮點運算
3  支持4 元向量,4 階矩陣計算
4  提供分支指令,支持循環控制語句
5  具有高帶寬的內存傳輸能力(>27.1GB/s)
6  支持1D、2D、3D 紋理像素查詢和使用,且速度極快
7  支持繪製到紋理功能(Render to Texture,RTT)
 
二、GPU和CPU
nGPU 具有高並行結構(highly parallel structure),所以GPU 在處理圖形數據和複雜算法方面擁有比CPU 更高的效率
 
gPU 採用流式並行計算模式,可對每個數據進行獨立的並行計算(流內任意元素的計算不依賴於其它同類型數據)
 

CPU 和GPU 上的代碼比較:提取2D 圖像上每個像素點的顏色值

三、GPU 圖形繪製管線
 
圖形繪製管線可分爲三個主要階段
–應用程序階段,使用高級編程語言(C、C++、JAVA 等)進行開發,主要和CPU、內存打交道,諸如碰撞檢測、場景圖建立、空間八叉樹更新、視錐裁剪等經典算法都在此階段執行
–幾何階段,主要負責頂點座標變換、光照、裁剪、投影以及屏幕映射,該階段基於GPU 進行運算,在該階段的末端得到了經過變換和投影之後的頂點座標、顏色、以及紋理座標
–光柵階段,基於幾何階段的輸出數據,爲像素(Pixel)正確配色,以便繪製完整圖像,,每個像素的信息存儲在顏色緩衝器(color buffer 或者frame buffer)中
 
四、Shade Language(着色語言)
shader language 被定位爲高級語言,如,GLSL 的全稱是“High Level ShadingLanguage”,Cg 語言的全稱爲“C for Graphic”,並且這兩種shader language 的語法設計非常類似於C 語言。
高級語言的一個重要特性是“獨立於硬件”,但是目前shader language 完全依賴於GPU 構架,
任意一種shader language 都必須基於圖形硬件,所以GPU 編程技術的發展本質上還是圖形硬件的發展。在shader language存在之前,展示基於圖形硬件的編程能力只能靠低級的彙編語言。
使用shader language 編寫的程序稱之爲shader program(着色程序)。着色程序分爲兩類:
–vertex shader program(頂點着色程序,運行在頂點處理器上)
–fragment shader program(片斷着色程序,運行在片段處理器上)
 

Vertex Shader Program

頂點着色程序從GPU 前端模塊(寄存器)中提取圖元信息(頂點位置、法向量、紋理座標等),並完成頂點座標空間轉換、法向量空間轉換、光照計算等操作,最後將計算好的數據傳送到指定寄存器中;
然後片斷着色程序從中獲取需要的數據,通常爲“紋理座標、光照信息等”,並根據這些信息以及從應用程序傳遞的紋理信息(如果有的話)進行每個片斷的顏色計算,最後將處理後的數據送光柵操作模塊。
 
 

Fragment Shader Program

片斷就是所有的三維頂點在光柵化之後的數據集合,這些數據還沒有經過深度值比較
片斷着色程序對每個片斷進行獨立的顏色計算,最後輸出顏色值的就是該片段最終顯示的顏色。可以這樣說,頂點着色程序主要進行幾何方面的運算,而片段着色程序主要針對最終的顏色值進行計算。
 
Shader language 目前有3 種主流語言:
–基於OpenGL 的GLSL(OpenGLShading Language,也稱爲GLslang)
–基於Direct3D 的HLSL(High Level ShadingLanguage)語言,
–NVIDIA 公司的Cg (C for Graphic)語言。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章