基于gpu的通用計算研究_第1頁
基于gpu的通用計算研究_第2頁
基于gpu的通用計算研究_第3頁
基于gpu的通用計算研究_第4頁
基于gpu的通用計算研究_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

基于gpu的通用計算研究

人們驚訝地預(yù)測到計算機(jī)圖形處理器(gpu)用于通用計算的研究非常受歡迎。令人驚訝的是,在計算機(jī)圖形處理器多年發(fā)展的過程中,很少有人認(rèn)真預(yù)測這一重大應(yīng)用。到目前為止,計算機(jī)圖形處理器擁有無與倫比的性能和強(qiáng)大的技術(shù)、工業(yè)和應(yīng)用基礎(chǔ),因此人們對gpu的獨特應(yīng)用前景有著前所未有的期望和熱情。例如,2004年,nigge社會保障2800達(dá)到40g/s,而英特爾3g武裝力量4使用sse指令只能達(dá)到6g/ga。自1993年以來,gpu的性能已每年增長2.8倍,并且預(yù)測它可以保持每年的增長率約5年。因此,如果人們認(rèn)為圖形處理器可以有效地應(yīng)用于通用計算,他們首先會受到圖形行業(yè)的影響。2003年,世界上唯一的圖形硬件年(賽姆魯姆魯姆2009)很快將重點轉(zhuǎn)向計算機(jī)圖形處理器的非圖形應(yīng)用。一些專家認(rèn)為,gpu已經(jīng)進(jìn)入計算的主流。盡管這一結(jié)論是正確的,但去年的新研究在各個方面都取得了重要進(jìn)展。本文首先從GPU發(fā)展的歷史開始簡單地介紹圖形處理器用于通用計算的發(fā)展過程及其技術(shù)原理,然后介紹GPU用于通用計算的主要成功領(lǐng)域及發(fā)展現(xiàn)狀,包括軟件領(lǐng)域的發(fā)展,最后從硬件結(jié)構(gòu)和軟件發(fā)展兩方面總結(jié)和展望未來的發(fā)展趨勢及其面臨的挑戰(zhàn).1計算機(jī)圖形中圖像輸出處理當(dāng)我們驚嘆計算機(jī)圖形處理器近兩、三年來不可思議地迅速擴(kuò)展到通用計算領(lǐng)域時,簡單地回顧一下圖形處理器的主要發(fā)展進(jìn)程是一件很有意義的事情.在計算機(jī)圖形學(xué)發(fā)展初期的20世紀(jì)六、七十年代,由于受硬件條件的限制,圖形顯示只是作為計算機(jī)輸出的一種手段.為此,在規(guī)范化圖形應(yīng)用的設(shè)計實現(xiàn)即定義圖形用戶界面時,人們只是純粹地從軟件實現(xiàn)的角度考慮問題.圖形用戶界面國際標(biāo)準(zhǔn)GKS(GKS3D),PHIGS的出現(xiàn)是這種規(guī)范化的典型代表.它所定義的圖形輸出流水線(如圖1所示)曾經(jīng)在一段時間內(nèi)引導(dǎo)了圖形軟件的實現(xiàn)和應(yīng)用,甚至曾經(jīng)有人試圖使用完整的硬件設(shè)計實現(xiàn)其流水線的全部功能,生產(chǎn)出所謂“GKS工作站”.然而眾所周知,這種企圖很快便銷聲匿跡,因為硬件的發(fā)展尚未達(dá)到這樣的能力.其后的發(fā)展證明,當(dāng)時用戶界面標(biāo)準(zhǔn)的設(shè)計只是理想化的標(biāo)準(zhǔn)而已.從20世紀(jì)80年代初期開始,以GE(geometryengine)為標(biāo)志的圖形處理器的出現(xiàn)和不斷更新使得計算機(jī)圖形的發(fā)展進(jìn)入了由圖形處理器引導(dǎo)其發(fā)展的年代.20世紀(jì)80年代初期,GE芯片的推出是計算機(jī)圖形處理器開始進(jìn)入市場的標(biāo)志,它對其后的圖形發(fā)展和變革產(chǎn)生了巨大影響.GE的核心是實現(xiàn)四維向量的浮點運算功能.它可由一個寄存器的定制碼定制出不同功能,分別用于圖形輸出流水線中的矩陣乘法、裁減計算、投影縮放等操作,從而用12個GE單元完整地實現(xiàn)三維圖形輸出流水線的功能.該芯片的設(shè)計者JamesClark以GE作為核心技術(shù)建立的SGI公司在其圖形學(xué)發(fā)展和計算機(jī)圖形工業(yè)應(yīng)用中產(chǎn)生了巨大影響,這已為人熟知.基于其圖形處理器功能的圖形界面GL其后發(fā)展為OpenGL,至今一直成為圖形用戶界面事實上的工業(yè)標(biāo)準(zhǔn).在20世紀(jì)80年代以及90年代的大部分時間里,計算機(jī)圖形特別是三維圖形的應(yīng)用,主要集中在工作站以上的處理機(jī)上.此時,圖形處理流水線的大部分功能尚由CPU完成.GE及其圖形處理器功能的不斷增強(qiáng)和完善促使圖形處理功能不斷從CPU向GPU轉(zhuǎn)移,而且GPU本身亦不斷增強(qiáng)了圖形處理的各種高級功能,比如遮擋剔除、紋理映射、透明/半透明處理、景深效果等.現(xiàn)代圖形處理的流水線主要集中在順序處理的兩大部分(如圖2所示):第1部分是對圖元實施幾何變換及對圖元屬性進(jìn)行處理,即將幾何模型的多邊形/三角形頂點數(shù)據(jù)流從CPU交由圖形處理部件實現(xiàn)幾何變換及屬性處理(包括部分光照計算).第2部分則是在實現(xiàn)掃描轉(zhuǎn)換進(jìn)行光柵化以后進(jìn)行一系列圖形繪制處理,包括各種光照效果的合成、紋理映射、遮擋處理、反混淆處理等.圖形輸出處理本身具有規(guī)范的流水線操作,當(dāng)越來越高級的圖形繪制功能需要在光柵一級處理時,SIMD(單指令多數(shù)據(jù))結(jié)構(gòu)的處理機(jī)是最合適的并行硬件結(jié)構(gòu).用這一方法實現(xiàn)圖形處理加速最典型的代表是20世紀(jì)80年代北卡羅萊那大學(xué)的PixelPlane系列[6~8]以及PixelFlow圖形處理機(jī).PixelPlane5作為當(dāng)時圖形處理能力最強(qiáng)的繪制系統(tǒng),可達(dá)到每秒一百萬Phong多邊形的圖形繪制能力.它的高度并行性是由像素級的陣列處理單元所完成.其硬件系統(tǒng)包括多達(dá)32個數(shù)字處理器和16個繪制部件,每個繪制部件可以對一個128×128的像素陣列的每個像素實現(xiàn)二次多項式的并行計算,這種在圖素處理上使用MIMD(多指令多數(shù)據(jù))結(jié)構(gòu)并在像素級采用SIMD結(jié)構(gòu)的并行處理,第一次為用戶提供了可以編程的圖形處理能力.伴隨著虛擬現(xiàn)實、計算機(jī)仿真、計算機(jī)影視及游戲等應(yīng)用不斷增長的需求,圖形處理的計算需求(計算量)一直也在不斷增長.從SGI的GeometryEngine到Nvidia的GeForce3GPU歷經(jīng)了20年,其芯片的線寬從3ìm提高到0.18ìm(2004年GeForce6800為0.13ìm,集成度1.5億晶體管),集成電路的邏輯設(shè)計能力提高了300倍,但是處理帶寬僅提高了十幾倍.而圖形處理計算需求的增長還將繼續(xù)下去.這樣,固定流水線的模式已經(jīng)很難適應(yīng)圖形處理不斷增長的計算需求以及虛擬現(xiàn)實等應(yīng)用的實時需求,可編程的靈活性是勢在必行的.以Nvidia和ATI為代表的GPU的技術(shù)和產(chǎn)品則是適應(yīng)了這種需求.與此同時,這種可編程且具有高速計算功能的圖形處理能力則在通用計算領(lǐng)域找到了應(yīng)用的舞臺.圖2所示的GPU繪制管道的可編程并行處理能力分布在兩部分:頂點處理器(vertexprocessor)和子素處理器(fragmentprocessor).它們都是典型的流處理機(jī)(streamprocessor).這種流處理機(jī)與向量處理機(jī)的主要區(qū)別在于,它不具有大容量的快存/存儲器可以讀寫,只是直接在芯片上利用臨時寄存器作流數(shù)據(jù)的操作.對于GPU而言,圖形流數(shù)據(jù)分別是頂點圖元及光柵化后的像素(理論上多個子素即Fragment組成一個像素).根據(jù)圖形處理的特點,GPU流處理的元素為4個單元的向量,可以用它表示三維齊次坐標(biāo)、三維空間齊次向量、顏色等.正是這種流處理機(jī)的并行結(jié)構(gòu),為通用計算提供了并行計算的平臺.其中,頂點處理器操作在空間的幾何點上,因而比較適用于除圖形繪制以外的幾何操作類的應(yīng)用上,而子素處理器由于是操作在像素一級的單元上,具有較大容量的“紋理”空間,可以模擬紋理數(shù)據(jù)及其操作,因而可以更廣泛地用于各種通用計算.這是GPU用于通用計算的最主要的平臺.自從1998年以來,GPU的功能迅速更新,平均每一年多便有新一代的GPU誕生.在現(xiàn)代GPU概念出現(xiàn)以前,特殊的圖形硬件只出現(xiàn)在諸如SiliconGraphics(SGI)等圖形工作站上,具有基于硬件的頂點變換和紋理映射功能.第一代現(xiàn)代圖形處理器出現(xiàn)在1998年后期,主要代表為NvidiaTNT2,ATIRage和3DFXVoodoo3.這些處理器主要處理光柵化部分,有些芯片支持多紋理,可以在光柵化過程中完成多幅紋理的融合操作.從1999年后期開始,第二代GPU(NvidiaGeForce256,GeForce2和ATIRadeon7500)可以處理頂點的矩陣變換和進(jìn)行光照計算,但此時還未出現(xiàn)真正的可編程性.第三代GPU(NvidiaGeForce3,GeForce4,ATIRadeon8500,2001年和2002年早期)代表著第一次重要變革,這時可以將圖形硬件的流水線作為流處理器來解釋.頂點級出現(xiàn)可編程性,而在像素級出現(xiàn)有限的可編程性.在像素級程序中,訪問紋理的方式和格式受到一定限制,只有定點數(shù)可用.正是這個時候,采用GPU作通用計算開始出現(xiàn).第四代GPU(NvidiaGeForceFXseries,ATIRadeon9700/9800)的像素和頂點可編程性更通用化,可以包含上千條指令.依賴紋理更為靈活,可以用作索引進(jìn)行查找.GPU具備了浮點功能,紋理不再限制在范圍,從而可以用作任意數(shù)組,這一點是對通用計算的一個重要貢獻(xiàn).最新的第五代GPU以NvidiaGeForce6800為代表,功能相對以前更為豐富、靈活.頂點程序可以訪問紋理,支持動態(tài)分支操作像素程序開始支持分支操作,包括循環(huán)、if/else、重復(fù)等,支持子函數(shù)調(diào)用,64位浮點紋理濾波和融合,多個繪制目標(biāo).第2節(jié)將介紹到目前為止利用GPU作通用計算的最重要和典型的成功應(yīng)用.由于我們在文獻(xiàn)中已經(jīng)重點介紹了GPU在代數(shù)計算方面的應(yīng)用,因而本文除介紹我們在這一方面(流體計算)的工作經(jīng)驗之外,代數(shù)計算只作簡略介紹.其后將把重點放在介紹其他領(lǐng)域的通用計算,以及軟件領(lǐng)域為這一課題所作的研究工作及其最新進(jìn)展上.最后展望和討論GPU用于通用計算的前景及其面臨的問題.2基于gpu的幾何誤差處理由于圖形處理器并行流處理和可編程性的出現(xiàn),越來越多的人開始用其做一些非繪制方面的計算.這些計算涉及的范圍很廣,從圖形輸出流水線以外的非繪制處理,到幾何計算、碰撞檢測、運動規(guī)劃、代數(shù)運算、優(yōu)化計算、偏微分方程PDEs(partialdifferentialequations)數(shù)值求解等,不一而足.如在幾何處理方面,Govindaraju等人采用兩個GPU來做遮擋剔除的運算,外加一個GPU用于最終的繪制.同樣,Govindaraju等人利用GPU來進(jìn)行快速碰撞檢測.Sud等人采用GPU來加速三維距離場的計算.Tomov等人則用GPU來進(jìn)行蒙特卡洛仿真.2.1基于gpu的流體模擬很早就有人利用圖形卡進(jìn)行一些簡單的代數(shù)運算,如Larsen等人在2001年利用多紋理技術(shù)做矩陣運算操作.后來隨著頂點可編程的出現(xiàn),Thompson等人在頂點級實現(xiàn)了一個代數(shù)運算的框架系統(tǒng),其中包括矢量運算和矩陣乘法等.而像素可編程的出現(xiàn)加速了這方面的研究,如Krüger等人利用像素程序做基本代數(shù)運算,Hall等人對于矩陣乘法運算利用像素程序做了若干優(yōu)化,以充分利用GPU的高速緩存.近年來,這方面的研究越來越多,詳細(xì)內(nèi)容可以參考文獻(xiàn).流體模擬一直是計算機(jī)圖形學(xué)中的熱點問題,其在電影特效和游戲中應(yīng)用很多,而且在工程上的應(yīng)用也很廣泛.為了能夠很好地描述流動現(xiàn)象,許多研究者不得不求解復(fù)雜的運動方程,如Navier-Stokes方程組NSEs(navier-stokesequations).然而,NSEs的求解相當(dāng)耗時,且對時間步長極為敏感,很容易導(dǎo)致結(jié)果發(fā)散.近年來,為了加速流體運動問題的求解,人們開始利用GPU的并行性和可編程性通過求解有限差分方程解偏微分方程,以使整個模擬實時化.在像素程序出現(xiàn)以前,人們采用硬件本身支持的顏色融合操作和多紋理來計算傳熱和各向異性擴(kuò)散有限單元方程,從而實現(xiàn)圖像處理的功能.Harris等人通過RegisterCombiner編程求解CML(coupledmaplattice)問題,從而實現(xiàn)交互的對流模擬、反應(yīng)擴(kuò)散以及沸騰效果模擬.Li等人采用RegisterCombiner結(jié)合LBM(LatticeBoltzmannmethod)模擬流體和煙的效果.隨著硬件可編程性的進(jìn)一步發(fā)展,基于像素程序的流體模擬開始出現(xiàn).Krüger等人利用像素程序做基本代數(shù)運算,并在此基礎(chǔ)上實現(xiàn)了共軛梯度法和高斯-賽德爾迭代法,從而完成流體PDEs的求解.Bolz等人實現(xiàn)了基于像素編程的稀疏非結(jié)構(gòu)化矩陣的共軛梯度法和正交網(wǎng)格的多重網(wǎng)格法,并用于加速幾何處理和流體模擬.Goodnight等人實現(xiàn)了基于像素程序的多重網(wǎng)格算法,用來求解邊界值問題(熱傳導(dǎo)問題、流體力學(xué)問題).Harris等人利用GPU求解云彩運動的流體方程.Li等人在其原來的基礎(chǔ)上采用更為靈活的像素程序來求解.但是直到現(xiàn)在,大多數(shù)研究者只是集中在二維問題域,而且對于邊界條件的處理過于簡單,以至于很難滿足實際問題的需要.造成這一問題的主要原因是,目前GPU缺乏像CPU那樣的靈活性,編程也不如在CPU上那樣容易.Kim等人將冰晶體生長過程采用GPU來實施物理計算,整個物理方程組的計算在GPU上執(zhí)行.Lefohn等人將level-set的等值面數(shù)據(jù)壓縮為一個動態(tài)稀疏紋理格式,針對不同邊界情況采用不同的像素程序計算level-set的PDEs.在利用GPU求解流體運動方程方面,我們亦開展了研究工作.為了充分利用GPU的并行性加速整個算法,以滿足實時模擬的需要,我們在GPU上采用穩(wěn)定性好的半拉格朗日方法求解NSEs,整個方程組形式如下:這里,u為速度矢量,v為運動粘性系數(shù),f是外部作用力,p是流體壓強(qiáng),而密度ρ和溫度T是兩個標(biāo)量.整個方程描述了流體中的對流擴(kuò)散等現(xiàn)象.我們通過結(jié)合模板緩沖器對三維場景進(jìn)行剪切操作,形成一系列實心的剖切截面以構(gòu)成整個流動邊界.這樣,通過修正因子來處理任意復(fù)雜的邊界條件,整個計算過程與幾何場景的復(fù)雜度無關(guān).圖3所示為系統(tǒng)算法流程,整個計算由4步構(gòu)成,先不考慮壓強(qiáng)的影響求出一個中間速度分布,然后求解壓強(qiáng)泊松方程,以修正速度場滿足質(zhì)量連續(xù)性條件.對于中等規(guī)模的問題,整個模擬和顯示能夠?qū)崟r進(jìn)行,圖4給出了一個氣流在城市上空流動的計算結(jié)果圖.我們在二維問題上的GPU算法比對應(yīng)的CPU算法效率要高出十幾倍,具體內(nèi)容可以參考文獻(xiàn)[31~33].這一工作為我們下一步利用GPU做通用計算提供了一個很好的范例.具體實現(xiàn)的時候,利用像素程序結(jié)合紋理操作完成整個運算.這里以密度(ρ)的擴(kuò)散過程為例,說明具體的實現(xiàn)方法.如果采用7點格式離散其擴(kuò)散方程,并采用顯式迭代,則整個求解形式如下:為了減少繪制的次數(shù),避免繪制句柄切換導(dǎo)致的性能損失,我們采用了平鋪三維紋理的方式,即將整個三維計算域平鋪到二維空間,如圖5所示,因此整幅紋理即代表了整個密度分布,一個紋元即代表一個節(jié)點的密度值.在像素程序中利用紋理位置偏移即可完成對周圍7個節(jié)點的采樣操作,從而完成整個計算.2.2多像素綜合查詢將GPU運用于數(shù)據(jù)庫的研究工作最近獲得一些可喜的結(jié)果.美國北卡羅萊那大學(xué)在這一研究中用GPU實現(xiàn)數(shù)據(jù)庫的某些基本操作取得樂觀的效果.這些操作主要是對數(shù)據(jù)庫記錄實行各類查詢,其中包括關(guān)系查詢(relationalquery)﹑合取選擇(conjunctiveselection)﹑聚集操作(aggregation)等.GPU對數(shù)據(jù)庫的操作是將GPU本身的紋理存儲用作記錄數(shù)據(jù)庫的屬性,而利用子素處理器對紋理實行并行操作且作檢測,并利用深度緩沖區(qū)(depthbuffer)和模板緩沖區(qū)(stencilbuffer)的深度檢測和模板檢測協(xié)助其數(shù)據(jù)庫操作的執(zhí)行.舉例來說,對數(shù)據(jù)庫某屬性項進(jìn)行范圍查詢(rangequery)的操作過程是首先將紋理存儲(數(shù)據(jù)庫項)拷貝到深度緩沖區(qū),然后調(diào)用“深度限界檢測”的GPU硬件功能去“繪制”具有下界深度的長方形,最后在模板緩沖區(qū)生成(留下)通過了“深度限界檢測”的結(jié)果,其結(jié)果的每個置了1的Pixel對應(yīng)于符合條件的數(shù)據(jù)庫項.對于數(shù)據(jù)庫各項操作的研究工作是在NvidiaGeForce5900GPU上進(jìn)行的,與之對比測試的是具有雙CPU、2.8GH的IntelXeon,并在具有針對該CPU的SIMD并行的優(yōu)化編譯下進(jìn)行.測試的數(shù)據(jù)庫記錄數(shù)量達(dá)到百萬量級.其測試結(jié)果表明,對于大部分類型數(shù)據(jù)庫操作,GPU相對于CPU具有明顯的優(yōu)勢,而對于某些少部分操作,則CPU占先.其中對于半線性關(guān)系查詢(semi-linearquery)及選擇查詢(selectivequery),GPU比基于CPU的實現(xiàn)具有一個數(shù)量級的加速效果.這種加速主要來自于幾個方面:一是子素處理器的多像素并行處理(GeForce5900有8個像素的并行,而最新的GeForce6800有16個像素的并行)以及每個像素上具有的向量計算——選擇查詢主要得益于前者,而關(guān)系查詢則得益于二者;第2方面,GPU的高度流水線結(jié)構(gòu),使得多個素元可以在流水線上同時得到處理,因此對于多個屬性的同時查詢特別有好處;第3方面,GPU的深度剔除硬件功能使得部分子素(fragments)可以在流水線中較早地被排除在外,免除進(jìn)入像素處理和深度檢測,從而大大地提高了處理效力;第4方面,在GPU實現(xiàn)的這些查詢操作中,不存在分支,如誤預(yù)期(misprediction)操作.此操作在CPU上具有很大開銷,例如,在PentiumIV上每個分支誤預(yù)期操作會消耗17個時鐘周期.第2類數(shù)據(jù)庫操作如“第k個最大數(shù)查詢”等,由于這種操作只能利用GPU的部分而不是全部的優(yōu)化功能,其實驗結(jié)果僅具有2~4倍的性能改進(jìn).這部分功能來自于像素處理器的并行性,其80%的時間花費在像素處理的計算開銷上,這意味著其他方面如數(shù)據(jù)傳輸?shù)乳_銷很小.由于GPU本身結(jié)構(gòu)的局限性,并不是所有的數(shù)據(jù)庫操作都能在GPU上運行而達(dá)到良好的效果.實驗結(jié)果表明,累加算法在GPU上運行比基于CPU實現(xiàn)的算法要慢.其主要原因是,子素處理器不支持整數(shù)算術(shù),因此在子素程序中諸如檢測第i位的簡單工作就需要5條指令去完成.這種情況下,CPU對于GPU的主頻優(yōu)勢(2.8GH相對于450MH)便可以顯現(xiàn)出來,再加上其CPU(IntelXeon)本身每個處理器亦具有4個SIMD的處理器并行工作.2.3頻譜變換和濾波頻譜變換在一維或二維(特別是二維)的空間/時間域上進(jìn)行,均可以在其離散的函數(shù)上實施統(tǒng)一的計算操作,即使用選定的核作卷積運算.為此,頻譜變換和濾波是比較適于作SIMD運算和流處理的計算模型.Moreland等人報道了他們利用常規(guī)算法在GPU上實現(xiàn)了快速傅立葉變換(FFT).在其變換過程中,為了避免改變寫入中間存儲,他們設(shè)計了特殊算法和數(shù)據(jù)結(jié)構(gòu)以避免對數(shù)據(jù)的排序操作.利用兩個紋理存儲之間的交換(通過幀存儲器),使得不同趟的像素程序相繼操作在前趟程序的執(zhí)行結(jié)果上.在求卷積的過程中,FFT的實部和虛部分別占用紋理存儲的一半空間.其運行測試的結(jié)果表明,在Geforce5800Ultra上實現(xiàn)的快速傅立葉變換與GPU(1.7GHzIntelZeon)上執(zhí)行的優(yōu)化FFTW具有相當(dāng)?shù)男?對512×512的圖像可以在1秒之內(nèi)實施正向或反向的傅立葉變換.小波變換近年來受到了廣泛的關(guān)注.作為多分辨率表示和分析的重要數(shù)學(xué)工具,它在時域和空域均具有很好的局部性能,有利于表示有限空間分布的高頻信號如對圖像作多分辨率分解和表示,在邊緣檢測、圖像分割、圖像壓縮等方面具有重要應(yīng)用.早在1999年,Hopf和Ehl便利用SGIOctane工作站的圖形處理器MXE基于OpenGL實現(xiàn)了Haar和Daubechies小波的變換及反變換用于邊緣檢測.其測試效率比純軟件實現(xiàn)的小波變換提高了2~5倍.根據(jù)最新的報告,香港中文大學(xué)王劍清等人在最新發(fā)展的GPU上實現(xiàn)了完整的小波變換,包括小波多尺度分解變換和重建逆變換,二者使用類似的實現(xiàn)框架完成.該實現(xiàn)用圖像處理作為應(yīng)用實例,實現(xiàn)了小波變換對圖像的多分辨率表示,圖像基于頻譜變化的變形、圖像壓縮(JPEG2000標(biāo)準(zhǔn))等.此變換同樣在子素處理器上完成.在小波變換分解的過程中,對于每個尺度(分辨率)的卷積計算都是在存儲于紋理上的前一個尺度計算結(jié)果的基礎(chǔ)上進(jìn)行,并生成新的結(jié)果輸出到另一紋理上,如此反復(fù)轉(zhuǎn)換,直到所需要的精度滿足為止.對于二維函數(shù)的變換,按常規(guī)分解到兩個方向上輪流進(jìn)行,其變換所分解成的子帶自始至終占據(jù)設(shè)定分辨率的紋理存儲.離散小波變換在算法執(zhí)行時分別在低趟(lowpass)和高趟(highpass)兩個層次上交錯進(jìn)行,并有選擇地使用源數(shù)據(jù),然而,子素處理器不允許對紋理存儲進(jìn)行存儲調(diào)整(重新安排數(shù)據(jù)如分類等),因此有效地實現(xiàn)對讀(從源紋理)寫(幀存儲)存儲的尋址是變換獲得成功的關(guān)鍵.該實現(xiàn)在解決這一問題時利用了子素處理器紋理存儲的間接尋址功能,用一個中間紋理作間接尋址存儲器,變換時,每次根據(jù)當(dāng)前分辨率及其趟數(shù)類別,對每個變換的像素求取對應(yīng)源數(shù)據(jù)的地址,存入其中間紋理.離散小波變換(DWT)已用于圖像壓縮標(biāo)準(zhǔn)JPEG2000并且是該壓縮編碼的主要開銷部分,當(dāng)基于GPU的DWT引擎引入這一標(biāo)準(zhǔn)(GPEG2000Part-1標(biāo)準(zhǔn),即ISO/IEC15444-1)的實現(xiàn)時,其測試結(jié)果證明編碼速度可以得到顯著提高.在IntelPentiumⅣ2GHCPU和GeForce5900UltraGPU平臺上用Cg基于OpenGL的運行結(jié)果表明,只有當(dāng)圖像大小低于400×400時,GPU的運行性能才低于軟件運行的性能,這時,GPU起始化及數(shù)據(jù)傳輸?shù)仍从贠penGL的開銷(不依賴于圖像大小,基本為常數(shù))占據(jù)了開銷的大部分.當(dāng)源圖像尺寸增大時,GPU運行開銷的增加很慢,而軟件運行的開銷卻增長很快.以至于當(dāng)圖像大小為2048×2048時,基于GPU運行的開銷比軟件運行的開銷具有幾乎超過一個數(shù)量級的改進(jìn).3采用gpu的擴(kuò)充功能以Nvidia和ATI為代表的GPU產(chǎn)品正處于不斷改進(jìn)的過程當(dāng)中,正如前面所提及的,每隔半年左右,新一代的產(chǎn)品便會誕生,會增加更多的功能及提供更強(qiáng)的處理能力,但同時亦為用戶使用這些新功能帶來了諸多困難和問題.由于GPU是以芯片產(chǎn)品提供給微機(jī)廠家的,而近年來GPU的產(chǎn)品更新速度可以說是大規(guī)模集成電路產(chǎn)品發(fā)展歷史上最快的,由GPU芯片直接提供的高級而復(fù)雜的功能一下子提到用戶的面前,而且頻繁更新,使得無論是PC廠家,還是用戶都顯得措手不及.在這種倉促應(yīng)付的情況下,GPU的應(yīng)用途徑至今主要是通過圖形API(OpenGL或DirectX)擴(kuò)充新GPU的功能,其擴(kuò)充功能或由GPU廠家提供,或由API軟件開發(fā)者提供.利用高級語言實現(xiàn)不依賴于具體硬件(GPU)及計算平臺的編程自然是GPU使用的努力目標(biāo).為此目標(biāo)努力而在繪制語言(shadinglanguage)和實時繪制語言方面所作的研究一直在進(jìn)行之中.但針對GPU的通用計算,非圖形用戶最終需要擺脫圖形流水線及其繪制的概念,從流處理機(jī)的角度利用高級語言編程,這方面的研究工作在2004年開始具有新的進(jìn)展.GPU所提供的可編程功能以頂點處理器和像素處理器的操作形式完成,由每個處理器執(zhí)行用戶定義的匯編級的繪制程序(shaderprogram),對流數(shù)據(jù)(頂點/像素)執(zhí)行繪制程序的操作.標(biāo)準(zhǔn)圖形界面用戶在使用這些GPU的新功能時一般通過GPU設(shè)計者或用戶界面的設(shè)計者以擴(kuò)充函數(shù)庫的形式提供給用戶.OpenGL作為事實上的工業(yè)標(biāo)準(zhǔn)已為學(xué)術(shù)界和工業(yè)界所普遍接受,因而絕大部分與圖形有關(guān)的應(yīng)用產(chǎn)品一直以O(shè)penGL作為實現(xiàn)界面.對于使用GPU的擴(kuò)充函數(shù),OpenGL中包括了GPU設(shè)計者(如Nvidia)以及OpenGL“架構(gòu)委員會(ARB)”所擴(kuò)充的函數(shù).DirectX作為微軟視窗的標(biāo)準(zhǔn),其圖形界面Direct3D從新世紀(jì)開始亦得到廣泛接受和應(yīng)用,特別是作為游戲軟件的實現(xiàn)界面.為適應(yīng)GPU應(yīng)用的需求,DirectX則根據(jù)GPU新產(chǎn)品功能的擴(kuò)充與進(jìn)展及時地定義新的版本以擴(kuò)充VertexShader和PixelShader的新功能,DirectX軟件接口所提供的功能幾乎與GPU提供的功能同步.對于熟悉OpenGL或DirectX的用戶或軟件專業(yè)用戶來說,直接使用其擴(kuò)充的接口軟件應(yīng)該是比較好的選擇,因為這樣可以從底層更靈活地控制和對GPU編程.而對于使用GPU進(jìn)行通用計算的用戶,當(dāng)前這一方法似乎是唯一的選擇,盡管這一方法對使用者來說繁瑣而困難,編程者往往需要考慮硬件結(jié)構(gòu)的許多具體問題.3.1新型標(biāo)準(zhǔn)繪制語言使用類似于C的高級語言對GPU直接編程一直是圖形界努力追求的目標(biāo),也是將來應(yīng)該達(dá)到的目標(biāo).在這方面,繪制語言(shadinglanguage)以及實時繪制語言的研究一直針對此目標(biāo)在不斷改進(jìn)和完善.使用繪制語言及高級語言進(jìn)行繪制編程可以方便用戶書寫各種不同功能的繪制程序以及對其繪制程序提供各種控制,以使GPU硬件的具體功能對于用戶而言具有透明性.繪制程序(shader)設(shè)計的思想源自于早年P(guān)ixar設(shè)計的RenderMan[41~43]繪制軟件.此軟件多年來廣泛應(yīng)用于好萊塢電影制作的繪制.關(guān)于新型標(biāo)準(zhǔn)繪制語言的研究工作,近年來具有較大影響的是:OpenGLshadinglanguage,斯坦福大學(xué)的RTSL(real-timeshadinglanguage),Microsoft的HLSL(high-levelshadinglanguage)以及Nvidia的Cg.盡管還未形成統(tǒng)一的繪制語言,這些語言的研究和應(yīng)用為用戶提供了直接基于API(OpenGL或DirectX)編程的較為方便和高層次的工具,尤其是Nvidia的Cg.3.2gpu的高可移植性結(jié)構(gòu)然而,使用繪制語言編程仍然存在著不少缺陷,對使用者來說仍然是一件十分麻煩的工作.首先,用戶必須編寫控制圖形流水線的許多任務(wù),如分配紋理存儲、讀入繪制程序、構(gòu)造圖形素元等,為此,用戶對最新的API以及圖形處理器硬件的特點與限制需要有詳細(xì)的了解.此外,用戶仍然需要利用紋理、三角形等圖形素元表達(dá)他們的算法,這就使得GPU的通用計算編程工作仍然局限于只能由資深的圖形開發(fā)者進(jìn)行.如果這一問題不能很好地解決,GPU用于通用計算的發(fā)展和普及將會受到很大的限制.因為,熟悉GPU圖形編程的人畢竟太少,而這些資深的圖形開發(fā)者對通用計算的各個應(yīng)用領(lǐng)域又比較生疏.為解決這一問題,當(dāng)前的努力方向主要是將GPU的結(jié)構(gòu)純粹納入流處理機(jī)的模型而以高級語言編程,使得程序說明、運算操作、模塊化定義等一系列運算和控制規(guī)范化,使用戶在實現(xiàn)高效率利用GPU的同時,不必考慮GPU的具體圖形結(jié)構(gòu).這一研究工作的代表是最近發(fā)表于ACMSIGGRAPH2004的斯坦福大學(xué)的Brook-for-GPU系統(tǒng)和加拿大Waterloo大學(xué)的ShaderAlgebra系統(tǒng).由于Brook-for-GPU系統(tǒng)建立在扎實的前期工作基礎(chǔ)之上并對于解決以上問題更具有代表性而且Brook是開放源代碼的系統(tǒng),本文在此對該系統(tǒng)作一簡單介紹.Brook原先是為諸如斯坦福大學(xué)的Merrimac超級流處理計算機(jī)、MIT的MITRaw處理機(jī)等流處理機(jī)開發(fā)的語言.此語言由于是為流處理機(jī)所設(shè)計,因而具有應(yīng)用于GPU流處理機(jī)模型的良好結(jié)構(gòu)與基礎(chǔ),有利于擴(kuò)充該語言作為通用計算的軟件工具.Brook的設(shè)計本身通過流(stream)數(shù)據(jù)類型定義流數(shù)據(jù),作用在數(shù)據(jù)上的操作或計算稱為核(kernel).核作用于流數(shù)據(jù)結(jié)構(gòu)實現(xiàn)并行操作,以保證較高的計算效率(arithmeticintensity,即計算操作量相對于帶寬的比率).Brook具有很好的可移植性(portability),除了基于OpenGL,DirectX針對Nvidia和ATI等的GPU編程以外,亦可對普通CPU編程.Brook的GPU系統(tǒng)包括編譯器及運行系統(tǒng).其編譯器完成從Brook源程序到CgShaders(Cg繪制程序)源程序的編譯工作,然后特定GPU廠家提供的Shader翻譯程序再將CgShaders編譯成GPU的匯編程序.Brook運行系統(tǒng)是一個與GPU結(jié)構(gòu)無關(guān)的程序庫,它允許由編譯器產(chǎn)生的編碼使用該庫函數(shù)去運行Kernels.Brook-for-GPU的最大特點表現(xiàn)在兩方面:首先,作為面向流處理機(jī)的語言,它允許用戶定義兩種截然不同的同構(gòu)數(shù)據(jù)集,一種是“輸入流(inputstream)”類型,另一種是“聚集流(gatherstream)”類型.前者允許Kernel以規(guī)則順序讀入但不可重用,而后者則可以隨機(jī)讀寫,并可重用.另一方面,在使用Kernel時,對于流數(shù)據(jù)和向量數(shù)據(jù)的編程明顯地區(qū)分開來,對流數(shù)據(jù)可以有任意的函數(shù)計算,而對向量僅有簡單的數(shù)學(xué)操作;向量運算需要大的臨時存儲用于對大規(guī)模向量寄存器文件的讀寫,而與此相對比,Kernel用局部寄存器作臨時存儲,并且只在最后得到結(jié)果時才寫進(jìn)內(nèi)存,以此提高計算效率.4基于gefige-pcr的shda算法在持續(xù)高速發(fā)展多年之后,GPU仍然處在高速發(fā)展的過程當(dāng)中.最新的GPU,如NvidiaGeforce6800、ATIRadeonX800,其主頻為500M,紋理達(dá)到最大4096×4096的容量,具有平均每秒4.5Gfloats紋理帶寬.其PixelShader自GeforceFX以來即具有了浮點計算能力,這對于GPU的通用計算是一個極大的推動,因為僅有定點運算的計算能力會是十分有限的.PixelShader部件可編程指令的數(shù)目,從Geforce3的96條提高到幾乎沒有限制,大大地提高了程序處理能力.如前所述,通用計算的主要平臺是PixelShader部分.可以預(yù)見,PixelShader部分將會不斷增加和加強(qiáng)新的功能.4.1gpu加速的通用計算對通用計算來說,最關(guān)鍵的功能是浮點的精度.目前GPU已經(jīng)提供IEEE單精度浮點標(biāo)準(zhǔn),這在很大程度上已能滿足相當(dāng)一部分通用計算的需求.但是,如果要真正滿足許多應(yīng)用領(lǐng)域計算的需求,IEEE雙精度浮點運算是必需的條件.很難說GPU在近期會達(dá)到這一條件,因為我們認(rèn)為這一發(fā)展需要在以下條件滿足時才有可能:一是可以充分證明GPU確實能在通用計算領(lǐng)域擔(dān)負(fù)起舉足輕重的角色;二是軟件發(fā)展可以使用戶(至少是通用的數(shù)學(xué)庫)方便地使用GPU作通用計算.就GPU當(dāng)前擔(dān)任的主要角色——圖形繪制,例如計算機(jī)游戲等而言,單精度浮點似乎已經(jīng)足夠.GPU在結(jié)構(gòu)上限制通用計算的最大問題是缺少大容量局部存儲.通用計算的主要平臺像素處理器內(nèi)用于通用計算的存儲是紋理存儲器,當(dāng)前最大容量為256M,這對于大量的通用計算應(yīng)用來說是一個很大的限制,因其無大容量外存儲器可用.雖然局部存儲(紋理)還可以繼續(xù)擴(kuò)充以滿足計算需求,但似乎不可能大量擴(kuò)充.GPU的計算處理能力從很大程度上來源于它將主要的集成電路功能貢獻(xiàn)于流處理計算.而對CPU來說,如IntelXeon微處理器雖具有相當(dāng)于ATIR300(1.1億晶體管)的集成度(1.08億),其中60%卻要用于快存.因此,如果GPU局部存儲大量擴(kuò)充,或許再加上GPU操作能力的擴(kuò)充,這無異于向一個獨立CPU的方向發(fā)展,這與GPU本身用于圖形繪制的初衷是相悖的,亦相應(yīng)增加了GPU用于圖形繪制的成本.解決存儲問題的另一方向是增加GPU與主機(jī)接口的帶寬,我們在文獻(xiàn)中亦指出了這一想法.自從1996年,圖形接口由Intel的AGP代替了PCI接口以后,到2002年,AGP3.0(AGP8X)達(dá)到2.1GB/s的傳輸帶寬,帶動了3DGPU及其顯卡產(chǎn)品的蓬勃發(fā)展.但是如果將GPU及其主機(jī)內(nèi)外存儲器用于通用計算,GPU與主機(jī)之間的圖形接口無疑將會成為瓶頸.近年來,Intel提出了PCIExpress新型總線標(biāo)準(zhǔn),傳輸帶寬擴(kuò)大到8GB/s(PCIExpressX16),具有雙向同等的傳輸率.Nvidia和ATI即將推出使用PCIExpressX16接口的新一代顯卡產(chǎn)品.這為GPU訪問主機(jī)內(nèi)存提供了改善的條件.然而對于GPU的通用計算來講,流數(shù)據(jù)處理的基本結(jié)構(gòu)將很難有大變化.其原因在于,無論是像素處理器還是頂點處理器,訪問主機(jī)內(nèi)存的代價都實在太大.如果頻繁訪問主機(jī)內(nèi)存,則不符合巧用GPU的像素/頂點處理器作通用計算的初衷.4.2gpu集群超級計算機(jī)的未來:c病與gpu未來從上一節(jié)的介紹可知,基于GPU通用計算的軟件研究及其開發(fā)已經(jīng)取得很多進(jìn)展,然而軟件方面所存在的問題比硬件更甚.當(dāng)前GPU在通用計算領(lǐng)域研究和應(yīng)用方面主要有兩大障礙:一是缺少對應(yīng)用算法和圖形繪制均熟悉的研究開發(fā)者;二是GPU編程仍然過于繁雜.對于前者,如何將通用計算中各種復(fù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論