曾升 謝鵬 張瑾
摘 要:近幾年計算機圖形學(xué)的發(fā)展使得三維表現(xiàn)技術(shù)得以形成,三維表現(xiàn)技術(shù)使我們能夠再現(xiàn)三維世界中的物體,能夠用三維形體來表示復(fù)雜的信息,可視化技術(shù)賦予人們一種仿真的、三維的并且具有實時交互的能力,但是將數(shù)據(jù)轉(zhuǎn)換為圖形的處理技術(shù)計算時間較長,而CUDA是一種由NVIDIA推出的通用并行計算架構(gòu),該架構(gòu)使GPU能夠解決復(fù)雜的計算問題,顯著提高計算速度,文章對CUDA和實現(xiàn)數(shù)據(jù)可視化做了探究。
【關(guān)鍵詞】CUDA OpenGL 可視化
可視化技術(shù)使人們可以在三維圖形世界中用以前不可想象的手段來獲取信息或發(fā)揮自己創(chuàng)造性的思維,人們對計算機可視化技術(shù)的研究已經(jīng)歷了一個很長的歷程,而且形成了許多可視化工具,其中SGI公司推出的GL三維圖形庫表現(xiàn)突出,易于使用而且功能強大,OpenGL經(jīng)過20年的時間,作為一個久負(fù)盛名的跨平臺的計算機圖形應(yīng)用程序接口規(guī)范,它已被廣泛應(yīng)用于游戲、影視、軍事、地理、醫(yī)學(xué)、機械設(shè)計,以及各類科學(xué)數(shù)據(jù)可視化的領(lǐng)域,它幾乎支持所有主流操作系統(tǒng)平臺,它應(yīng)當(dāng)是全球最為廣泛學(xué)習(xí)和使用的圖形開發(fā)API接口,我們幾乎可以在全世界任何一臺計算機安裝的軟件中找到它的身影,但調(diào)用它開發(fā)具有一定的難度。
科學(xué)計算可視化應(yīng)用廣泛,其中面繪制方法由傳統(tǒng)的計算機圖形學(xué)繪制曲面,體繪制方法是直接由三維數(shù)據(jù)生成屏幕上二維圖像的技術(shù),體繪制技術(shù)最大的優(yōu)點是可以探索物體的內(nèi)部結(jié)構(gòu),可以描述非常定形的物體,如肌肉,煙云等,而面繪制在這些方面比較弱。但它的缺點是數(shù)據(jù)存儲量大,計算時間較長,NVIDIA推出的通用并行計算架構(gòu)擺脫了復(fù)雜的圖形API,作為數(shù)據(jù)并行的軟硬件體系,CUDA編程模型能夠解決這種復(fù)雜的計算問題。
本文的主要目的是探究如何進行數(shù)據(jù)的可視化,為了解決運算速度的問題探討如何搭建并行計算平臺,使用CUDA編程技術(shù)來提高運算速度,并對三維數(shù)據(jù)可視化。
1 CUDA平臺
CUDA是一種由NVIDIA推出的通用并行計算架構(gòu),該架構(gòu)使GPU能夠解決復(fù)雜的計算問題。 它包含了CUDA指令集架構(gòu)以及GPU內(nèi)部的并行計算引擎。 開發(fā)人員現(xiàn)在可以使用C語言來為CUDA架構(gòu)編寫程序,所編寫出的程序可以在支持CUDA的處理器上以超高性能運行。鑒于建模時隨著網(wǎng)格數(shù)目的增加,會使計算量成冪函數(shù)的增長,影響畫面渲染的速度,又要有精度又要有速度,那么應(yīng)用先進的并行計算架構(gòu)顯得尤為重要。
可以說計算行業(yè)正在從只使用CPU的“中央處理”向CPU與GPU并用的“協(xié)同處理”發(fā)展。,英偉達(dá)發(fā)明了CUDA(Compute Unified Device Architecture,統(tǒng)一計算設(shè)備架構(gòu))這一編程模型,是想在應(yīng)用程序中充分利用CPU和GPU各自的優(yōu)點。通過CUDA,GPUs可以很方便地被用來進行通用計算。在沒有CUDA之前,GPUs一般只用來進行圖形渲染(如通過OpenGL,DirectX)。CUDA進行了編程語言擴展,CUDA C/C++可以看作一個新的編程語言,CUDA工作的的對象就是GPU及GPU上的內(nèi)存,且充分利用了GPU多核的優(yōu)勢及降低了并行編程的難度。一般通過C語言把數(shù)據(jù)從外界讀入,再分配數(shù)據(jù)給CUDA,以便在GPU上計算,然后再把計算結(jié)果返回給C語言,以便進一步工作,如進一步處理及顯示,或重復(fù)此過程。其中將CPU及系統(tǒng)的內(nèi)存稱為主機,將GPU及GPU本身的顯示內(nèi)存稱為設(shè)備,其線程,線程塊,線程格的三層結(jié)構(gòu)適合于并行計算,線程一般通過GPU的一個核進行處理,線程塊由多個線程組成,它是并行執(zhí)行的,之間無法通信,也沒有執(zhí)行順序,線程格是由多個線程塊組成,而在GPU上執(zhí)行的函數(shù)通常稱為核函數(shù),一般通過標(biāo)識符__global__修飾,用于說明內(nèi)核函數(shù)中的線程數(shù)量,以及線程是如何組織的,一般以線程格(Grid)的形式組織,每個線程格由若干個線程塊(block)組成,而每個線程塊又由若干個線程(thread)組成,在編程時,必須先為kernel函數(shù)中用到的數(shù)組或變量分配好足夠的空間,再調(diào)用kernel函數(shù)進行工作。這樣的一種硬件平臺,加上CUDA編程模型已經(jīng)取得了很多的的成果,它的搭建為數(shù)據(jù)可視化奠定了基礎(chǔ)。
2 三維數(shù)據(jù)可視化
2.1 CUDA和OpenGL互操作
OpenGL 是圖形硬件的軟件接口,它不是一種編程語言,而是一種 API (應(yīng)用程序編程接口),程序員通過調(diào)用OpenGL 庫函數(shù)進行圖形編程。通過CUDA,CPU承擔(dān)的計算任務(wù)可以更多地移交給 GPU完成,,顯示任務(wù)完全依靠GPU完成,CPU只負(fù)責(zé)傳遞數(shù)據(jù)到GPU既提高了整個過程的計算速度,也最大程度地發(fā)揮了GPU的功效,結(jié)合GPU并行處理能力和GPU 圖像顯示技術(shù)能很好的解決復(fù)雜數(shù)據(jù)的可視化問題。
2.2 體繪制方法
體繪制技術(shù)是科學(xué)計算可視化的重要組成部分,常用的算法有光線投射法,足跡表法等。光線投射法是按視線方向發(fā)射一條射線,沿著射線選取采樣點,并由采樣點最近8個數(shù)據(jù)點的顏色值和透明度作線性插值,經(jīng)合成后得到圖像。足跡表法,是反復(fù)對體素的投影疊加效果進行運算。它們的計算量都相當(dāng)大,其中光線投射法可以把整個屏幕作為一個Grid,每個區(qū)域看成Block,每個像素作為一個Thread,充分利用CUDA編程模型,把這種體繪制算法并行化,從而改善計算量大的問題。
3 結(jié)語
綜上所述,隨著信息技術(shù)的高速發(fā)展,CUDA軟硬件平臺的出現(xiàn),數(shù)據(jù)可視化這種計算量大的技術(shù),可以通過配合使用CUDA及圖形硬件的軟件接口OpenGL,并把可視化算法并行化,可以得到很好的改善這種復(fù)雜計算的問題。
參考文獻
[1]李弛新,蘭聰花.基于CUDA和OpenGL互操作的彩色圖像Sobel邊緣檢測[J].計算機科學(xué),2015(06):221-230.
[2]尹學(xué)松,張謙,吳國華,潘志庚.四種體繪制算法的分析與評價[J].計算機工程與應(yīng)用,2004(16):97-100.
[3]張俊竹.虛擬現(xiàn)實技術(shù)在數(shù)字展示設(shè)計中的應(yīng)用研究[J].設(shè)計,2016(03):111-113.
作者單位
銀川能源學(xué)院 寧夏省銀川市 750105