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