基於查找表的像素處理器圖形處理器新算法
在基本的像素處理算法的基礎上,提出了一種基於查找表的快速平滑插值算法。該算法不僅運算量小、精度較高,而且易於硬體實現,適合於高速顯示處理系統中。
算法概述
綜合考慮圖形顯示的速度和逼真兩方面因素,故該算法的光照明採用Phong模型,明暗處理採用Gouraud算法,選擇三角形面片作為像素處理模型,算法流程採用流水線結構,倒數值通過查找表獲得,加/減法、比較運算和乘法等採用並行硬體來實現。對每個三角形有:
·只需耗時較少的加法、減法、比較和乘法運算;
·沒有耗時較多的除法或求倒數運算;
·利用查找表法可以保證灰度的高精度;
·不會重複掃描任何像素。
算法的流程
該算法的處理過程可以分為5個功能塊,其數據流是單向的;同時5個功能塊又相對獨立,於是可以採用流水線操作,並且整個流程由5級流水組成。
step1: 數據輸入接口;
step2: 求d x、d z、d σ;
step3: 求d z、d c;
step4: 計算 LR端點、計算 LR掃描線;
step5: 數據輸出接口。
算法的硬體實現
採用FPGA技術和EPLD技術來實現該算法。FPGA(現場可程式邏輯門陣列)和CPLD(複雜可程式邏輯器件)各有優缺點:
(1)FPGA和CPLD在資源方面比傳統器件和PLD都要豐富;
(2)FPGA基於RAM工藝,不要求對FPGA母片編程,其編程數據寫到EPROM中,上電時通過引導讀入FPGA中的RAM,從而使FPGA具有所需要的構造。這個過程需要幾十到幾百毫秒。而CPLD基於EPROM或E2 PROM 工藝,無上電引導過程,需要對晶片本身編程;
(3)FPGA適合於暫存器密集型設計,但延時很難估計,速度較慢。而CPLD的延時固定,速度較快。
最後,運算器、數據輸出接口部分採用一片FPGA器件來實現,FIFO控制、系統控制時序部分採用一片CPLD器件來實現。
查找表的設計
在解析度為512×512、256級灰度、2 級深度信息的高解析度灰度圖形顯示系統中,要求坐標 x、 y的位數各 9位,深度信 z的位數取為16位,灰度信息 c的位數取為8位。此時,查找表的設計有如下特點:
(1) 採用存儲倒數型查找表,即插值變化率為分母的倒數值和分子的乘積,其中分母的倒數值由查找表獲得。
(2) 僅僅存儲分母的倒數值,可大大減少對存儲容量的要求。所需的存儲空間可估算如下: 1/(D1ty)所對應的查找表存儲容量約為512W(2 字),1/(D1tx)所對應的查找表存儲容量約為512W(2 字);
(3) 考慮到查找表存儲容量很小,所以共安排多個線性查找表,以字為單位進行定址。這樣像素處理器(圖形處理器)需要約2KW的查找表存貯空間。
GPU替代CPU崛起中的GPGPU套用
自從GPU於2001年進入可程式時代 以來,`’能否把GPU豐富的資源套用到通用計算中去‘’ 一直是業界討論的話題。畢竟通用計算設計的CPU實力有限。而在進行純CPU操作的時候。有浮點專長的GPU在 一邊睡大覺著實是一種浪費。早在DX8時代就有研究機構嘗試用Ti4200顯示卡進行資料庫操作。進入DX9時代 以後此類研究就更多了。
GPGPU的定義以及特點
1、可程式並行處理器
主流GPU有兩種可程式並行處理器即頂點處理器(Vertex Shader)和像素處理器(圖形處理器)(PixelShader)。在OPenGL中。後者又被稱作FragmentProcessor(片斷或子素處理器)。頂點處理器負責處理頂點數據流(由位置顏色、標準向量和其它屬性)。它們是組成三維幾何模型的元素。根據每個頂點相對於其視點的位置。用Vertex Shader程式對其進行變換。
像素處理器(圖形處理器)將Pixel Shader程式用於處理每個輸出像素以確定最後的顏色。如今無論是PS還是VS都是完全可程式的。可以對四個不同的數值同時執行一條指令。這是因為繪圖的基本要素是向量(X、Y、Z、W)和顏色《紅、綠、藍、alPha)。
Shader程式實際就相當於CPU的內循環,在CPU中。一個循環可以重複使用存在一個矩陣內的一個數據流內的各個元素,用該循環體內的各條指令處理這些元素。而在GPU中。類似的指令可以寫在Shader程式中並自動套用到相應數據流的所有元素上。在這個運算中。並行處理的數量取決於該GPU中並行處理器的數量。
2、光柵處理器(Rasterizer)
在頂點處理器轉換完頂點後,每三個一組的頂點就用來形成 一個三角形。從這個三角形出發,光柵處理器產生一個像素流。實際光柵處理器的功能非常專一,就是表現三角形的。並非可程式,但是可以將其看作一個地址內插器或者數據放大器(因為它根據幾個三角形頂點就可以產生許多像素)。
GPGPU的發展
進入DX9 SM2.0時代以後,GPGPU進入了新的時代第三代GPU以NVIDIA GeForce Fx和、ATi R3XX為代表,其像素和頂點可程式性更通用化。像素部分支持FP16/24/32浮點。可以包含上千條指令。依賴紋理更為靈活並且可以用作索引進行查找。紋理不再限制在[0.1]範圍,從而可以用作任意數組,這一點是對通用計算的一個重要貢獻。在這一代顯示卡中誕生了很多GPGPU的套用,第一個商用的GPGPU套用NVIDIA Gelato就是從這一 代的顯示卡開始支持的。這是一款電影后期處理軟體。用於進行電影幀渲染處理等工作。
主流的SM3.0顯示卡可以算作第四代GPU畢竟功能相對以前更為豐富和靈活,而且頂點程式可以訪問紋理(VTF)支持動態分支操作(尤其是ATi X1000系列)像素程式開始支持分支操作。包括循環、if/else、重複等。支持子函式調用64位浮點紋理濾波和融合多個繪製目標。同時面向大眾的GPGPU套用終於開始出現了(也就是開頭提到的FAH)。
GPGPU相關軟體的發展
使用HLSL、CG這樣的繪製語言(shadinglangugae)進行GPGPU編程存在著不少缺陷用戶必須編寫控制圖形流水線的許多任務。如分配紋理存儲、讀入繪製程式等,為此程式設計師對最新的API以及GPU硬體的特點與限制需要有詳細的了解。同時,程式設計師仍然需要利用紋理、三角形等圖形素元表達他們的算法這就使得GPU的通用計算編程工作仍然局限於只能由資深的圖形開發者進行,嚴重限制了其發展。
GPU中的Shader實際是典型的流處理機(stream processor)結構。流處理機與向量處理機的主要區別在於它不具有大容量的快取可以讀寫,只是直接在晶片上利用臨時暫存器作流數據的操作。對於GPU而言圖形流數據分別是頂點圖元及光柵化後的像素。根據圖形處理的特點GPU流處理的元素為4個單元的向量。可以用它表示三維齊次坐標、三維空間齊次向量、顏色等。正是這種流處理機的並行結構。為通用計算提供了並行計算的平台。其中頂點處理器操作在空間的幾何點上,因而比較適用於除圖形繪製以外的幾何操作類的套用:而像素處理器(圖形處理器)由於是操作在像素一級的單元上,具有較大容量的‘’紋理`’空間。可以模擬紋理數據及其操作。
Brook一for一GpU把Gpu的解構納入了流處理器模型這個通用模型中這使得GPGPU的推廣成為了可能因為廣大程式設計師不再需要了解GPU的具體物理解構了。此語言由於是為流處理機所設計。因而具有套用於GPU流處理機模型的良好結構與基礎有利於擴充該語言作為通用計算的軟體工具。Brook的設計本身通過流數據類型定義流數據。作用在數據上的操作或計算稱為核(krenel)。核作用於流數據結構實現並行操作,以保證較高的計算效率(即計算操作量相對於頻寬的比率)。Brook具有很好的可移植性除了基於Open G L、DirectX針對NVIDIA和ATi等的GPU編程以外。亦可對普通CPU編程。Brook運行系統是一個與GPU結構無關的程式庫。它允許由編譯器產生的編碼使用該庫函式去運行核。