王宇新 張馳 狄少丞 季順迎 霍運理 郭禾



摘要:針對基于離散元方法的海冰與海洋平臺結構碰撞分析系統,對運行于CPUGPU異構高性能計算平臺上的大規模粒子模擬進行可視化方法的研究.使用OpenGL完成不同規模的平整冰、浮冰、冰脊和不規則形態海冰的呈現,不同形狀海洋平臺結構與受力網格的繪制,海冰粒子的運動軌跡與速度的表達,海浪效果的模擬以及碰撞過程的動畫演示等.通過定義合理的交互模式與接口,在一定程度上融合GPU加速的離散元計算與后處理顯示,基于多進程管道通信、多線程并行輸出等實現在GPU加速計算的同時實時顯示粒子模擬計算結果.該方法在幫助研究者隨時掌握程序執行狀況的同時,大幅減少后續傳輸、處理和存儲的數據.
關鍵詞:海冰; 海洋平臺; 碰撞分析; 后處理; 離散元方法; 大規模粒子; 可視化
中圖分類號: TB122, TP319 文獻標志碼:B
Abstract:The visualization method about massive particles simulation running on CPUGPU heterogeneous highperformance computing platform is studied, which is applied in an analysis system for the collision between sea ice and offshore platform based on discrete element method. By OpenGL, the different sizes of level ice, floating ice, ice ridge and ice of irregular forms can be presented; the different shapes of offshore platform structure and force mesh can be drawn; the movement path and speed of sea ice particles can be expressed; the motion of ocean waves can be simulated; the animation of collision process can be demonstrated, etc. By defining reasonable interaction patterns and interface, the discrete element calculation accelerated by GPU and the postprocessing display are merged in a certain extent. Based on multiprocess pipe communication, multithread parallel output, and so on, the realtime display of particle simulation results is implemented while GPU is calculating. By the method, the researchers can realize program execution status at any time and the subsequent transmission, processing and storage of data can be significantly reduced.
Key words:sea ice; offshore platform; collision analysis; postprocessing; discrete element method; massive particles; visualization
0 引 言
離散元方法是一種計算和分析大量顆粒在給定條件下的運動規律的數值計算方法,在工程應用中廣泛使用,尤其在對滑坡、雪崩、泥石流和海冰等各類自然界現象的模擬中占據重要位置.[1]離散元計算規模往往很大,一般需要高性能計算平臺的支持,同時會產生大規??茖W數據集.科學可視化可以通過一系列復雜的算法將數據高精度、高分辨率地繪制出來,或者將先進的科學實驗過程模擬呈現,幫助研究人員從這些龐大復雜的數據中快速、有效地獲得有用的信息或直觀的判斷.[2]例如,顆??梢暬绦騐MD使用OpenGL能夠繪制70×106~300×106個高質量的三維分子顆粒.[3]TU等[4]在模擬地震過程中的地表運動時,通過計算程序和可視化程序的緊密耦合實現并行可視化.KRGER等[5]開發的粒子系統可以將三維流交互可視化.方曉健等[6]針對運行在CPU與GPU混合架構的HPC系統上的并行粒子模擬進行在線可視化研究,通過GPU加速的粒子模擬與并行可視化的緊密耦合,實現并行粒子模擬運行過程中的在線可視化.
本文針對海冰與海洋平臺結構碰撞分析系統,對運行于單計算節點上的CPUGPU異構高性能計算平臺上的大規模粒子模擬進行可視化方法研究.
1 海冰與海洋平臺碰撞過程可視化
海冰能夠對港口設施、海上交通運輸和生產作業構成嚴重威脅,其危害主要來自于結冰時的附著和破冰時的撞擊.以海上石油平臺為例:在結冰時,海冰會附著在平臺的樁腿上,導致平臺受潮汐沖擊的受力面增大,增加危險性;在破冰時,浮冰隨海浪撞擊平臺(見圖1),如果與平臺自身的搖動形成共振,則很可能形成顛覆.[7]
在海冰與海洋平臺結構碰撞分析系統中,通過大規模粒子模擬海冰,對每個粒子與海洋平臺結構的碰撞過程進行力學分析獲得運動軌跡并形象地顯示出來,讓研究人員直觀地掌握海冰的運動情況,實時觀測粒子模擬中發生的現象,對計算過程進行追蹤和調整.在此過程中,海冰、海洋平臺結構、海浪、粒子運動軌跡與碰撞過程的可視化至關重要.
1.1 海冰的模擬顯示
海冰主要有平整冰、浮冰和冰脊等結構.基于離散元方法,海冰的不同結構可以通過若干個球形粒子作為基本單元排列而成.
平整冰是一塊大小可設置的長方體冰塊,用若干個排列緊密的粒子表達.平整冰可通過給定的參數生成每個粒子的坐標信息生成.參數包括冰塊的長、寬、高,水的深度,冰塊最右側中心點距離原點的橫縱距離,粒子的直徑等.平整冰高度定義為冰的層數,即在平面某一點的垂直方向上粒子的個數.在生成粒子坐標時按照從下到上、從近到遠、從右到左的順序依次計算每個粒子的空間坐標.
浮冰表現為不同密度散列的冰塊,可用若干個單元的集合來表達,組成單元的形狀可以為長方體、圓柱體和不規則的多邊形柱體.浮冰的密集度即圖形單元的密集程序,在視覺上表現為各個單元之間的距離遠近.當單元形狀為長方體和圓柱體時,浮冰的生成規則類似,以圓柱體為例(見圖2a),首先根據平整冰生成規則得到組成冰塊的所有粒子信息,然后根據密集度和冰塊的長、寬生成平面坐標上每個圓柱體上下表面的圓心坐標.計算各幾何中心與各粒子之間的距離,若小于給定的值,則保留并顯示該粒子.
浮冰并不總是呈現規則形態,可以在給定區域內繪制多邊形柱體的集合來表示不規則海冰.每個多邊形柱體的俯視圖都為凸多邊形,各柱體之間根據預先設定的密度因數產生一定的間隔.生成規則采用Voronoi圖的思想,由一組連接兩鄰點直線的垂直平分線組成的連續多邊形組成.在海冰模擬實際應用時:首先在指定區域隨機生成若干粒子坐標,然后分別將其按照Voronoi圖的性質劃分為若干區域集合,從而得到各區域的頂點坐標;再根據預先設定的密度因數縮放各區域的頂點坐標,可以得到不規則柱體的坐標集合.在實際繪制時,每個不規則柱體用若干個三棱柱拼接而成.構建一個圖元函數,用來繪制最基本的三棱柱.在繪制時,根據已有的多邊形的頂點坐標拆分成若干個三角形坐標,分別調用繪制三棱柱圖元的函數,得到不規則柱體的集合,效果見圖2b.
冰脊是冰在外力作用下形成的一排山脊狀冰,在模擬時用不同厚度的長方體與四棱臺拼接而成,見圖3a.其中,四棱臺的模擬相對復雜,采用拼湊平整冰的方法實現,即將四棱臺用若干個長度相等、寬度漸變的平整冰一層層堆疊而成.因此,在定義四棱臺下底面的寬度后,根據所給的底面與側面的夾角,計算上一層平整冰的寬度,以此類推,直到達到所定義的棱臺的高度.
當海冰的尺寸較大時,模擬海冰所需的粒子數量增多,計算機在顯示時要花費大量的時間完成粒子球體到顯示像素的轉換,造成顯示的遲鈍,不利于觀察,尤其是在轉換角度、平移、縮放視圖時需要對整個視圖進行重繪,圖像延遲現象尤為明顯.考慮到在海冰尺寸較大時對局部細節的觀察需求較為次要,采用直接繪制幾何圖形的方法模擬海冰.設定一個閾值,當表達結構所需的粒子個數超過這個閾值時則不再使用粒子拼接圖形,而采用直接繪制幾何圖形的方式.平整冰用一個大的長方體表示;方形排列浮冰用若干個小長方體表示,圓形排列浮冰用若干個小圓柱表示;冰脊分為上中下3部分,上下部分用幾何面圍成封閉的臺狀圖形,中間部分繪制成長方體,見圖3b.
1.2 海洋平臺結構的模擬顯示
在對海洋平臺結構模擬時,因為海冰與海洋平臺的碰撞點在平臺結構的樁腿上,所以主要考慮對樁腿的模擬.海洋平臺結構樁腿可分為2種結構:圓柱體和圓錐組合體.圓柱體結構表現為一個單一的幾何體,見圖4a,可以定義半徑、高度等物理屬性和位置屬性.OpenGL沒有直接繪制圓柱體的方法,所以通過繪制2個圓盤和1個曲面來構成一個圓柱體.圓錐組合體結構見圖4b,表達為圓柱體和圓臺的組合體,整個結構體通過繪制2個圓盤即上下圓柱體面和4個曲面組成.
在海冰粒子與平臺結構發生碰撞時,希望能夠觀測到海冰粒子相對于結構的位移情況,需要在其上繪制一些局部力網格,包括垂直方向的直線和水平方向的曲線.在實際繪制時不能在面上直接繪制直線或曲線,而是在結構半徑基礎上向外延伸一定距離繪制一個有一定寬度的線條,這樣不會產生覆蓋.
1.3 碰撞過程的效果和動畫視頻
粒子是模擬海冰的基本元素,粒子的屬性需要參與之后的GPU計算,因此需要將前處理中對粒子物理屬性的要求寫入固定接口格式的文件后由GPU程序讀取.每次當粒子屬性發生變化時只需在前處理程序中做出相應修改,這對于GPU計算程序是透明的.在GPU計算程序計算粒子的運動軌跡時,粒子的速度十分重要,與粒子坐標一起保存.顯示程序在顯示粒子軌跡時同時獲取粒子的速度,按照定義可根據速度不同顯示出不同顏色(見圖5a)有利于更準確地表達海冰在運動過程中各個區域的受力和速度情況.海冰是在海浪的作用下運動的,海浪是海冰模擬中的重要組成部分,雖然不參與計算,但卻能更好地對海冰的運動進行顯示.海浪在視覺上表現為一個不斷起伏的曲面,在用計算機模擬波浪效果時,將海浪劃分為若干個由1個水平方向的長方形和2個垂直方向的長方形組成的小單元,每個單元屬性包括波高、水面寬度、單位寬度等.若干個單元緊密排列在一起,相鄰單元之間通過一定的高度差實現曲面的模擬.每個單元組的高度根據時間的推移不斷變化實現波浪的效果,見圖5b.在連續不斷地對數據讀入并可視化時,可以觀察到較為流暢的動畫效果.在顯示程序運行的過程中,可以通過連續不斷地對顯示界面進行固定間隔的截圖,將圖片連續保存后處理成視頻文件,方便研究人員的再觀察,見圖5c.
2 計算過程中的實時顯示和優化
傳統的離散元模擬程序一般由主計算程序在粒子模擬計算后輸出每一步粒子的坐標和速度等信息并寫入文件中,然后由后處理顯示程序讀取粒子信息文件,并顯示粒子的運動軌跡.[8]這種做法的問題在于必須等到計算程序完成所有粒子所有步數的計算之后才能讀取計算結果,觀察到粒子的運動軌跡.我們的目標是在GPU計算的同時在屏幕上繪制出當前粒子的位置信息,實時顯示已計算出的粒子的運動軌跡.這樣邊計算邊顯示可以實時掌握計算程序的執行狀況,以便在出現問題時隨時做出相應改變,而不必等到整個程序的結束,以節約時間和資源.根據GPU卡的工作方式,實現GPU計算程序與顯示程序的實時交互方法有利用共享數據緩沖區和利用命名管道2種.
2.1 利用共享數據緩沖區實現
當GPU計算程序和基于OpenGL的顯示程序都是由GPU執行時,OpenGl的緩沖區可以映射到GPU計算程序的地址空間,被當做全局緩存訪問,因此可以采用共享數據緩沖區的方式使2個程序進行實時交互,以減少數據的傳輸.[9]
數據緩沖區有像素緩沖區(Pixel Buffer Object, PBO)和頂點緩沖區(Vertex Buffer Ojbect, VBO)2種.前者存儲的是像素數據,后者存儲的是頂點數據.[10]VBO可以存儲頂點坐標、索引數據、頂點法線和頂點顏色等數據,適用于多面體結構的離散元顆粒,如大尺寸海冰的繪制等.VBO使用的完整過程如下.
1)創建并激活VBO緩沖區,將緩沖區句柄綁定到緩沖區對象,并申請存儲空間來存儲數據.本系統中的大尺寸海冰由多個三角形面拼接而成,會有多個頂點重復使用的情況,為節省存儲空間和優化顯示程序,需要頂點坐標數組和索引數據數組這2塊緩沖區
2)注冊2塊VBO緩沖區到CUDA,并將其映射到CUDA的地址空間,這樣CUDA計算程序才能訪問VBO緩沖區.GPU計算程序執行CUDA核函數時計算出需要顯示的頂點數據和索引數據,將數據寫入到VBO中后解除CUDA對VBO的映射.
3)顯示程序可以訪問VBO頂點數據進行OpenGL渲染繪制.繪制首先要指定相對于緩沖區起始位置的偏移量,對諸如glVertexPointer()這樣的頂點數組函數進行初始化;然后啟用頂點數組;最后根據索引數據數組中給出的索引,查找到相應的頂點進行繪制.
使用VBO能夠優化計算和顯示程序的交互過程,提高實時顯示效率.
2.2 利用命名管道實現
隨著GPU計算成為大規模科學計算的主流方式,很多專用于計算而不能顯示(沒有顯示器接口)的GPU卡出現,如目前常見的NVIDIA Tesla K40 GPU卡,因此利用共享的GPU數據緩沖區進行實時顯示不可行.同時,由于CPU上多進程間無法進行大數據量的內存數據交互,因此將設計目標調整為在GPU計算程序完成一定步數的計算后通知顯示程序讀取已有的硬盤文件數據,即采用命名管道實現GPU計算程序與顯示程序的通信.
命名管道是一種經典的進程間通信機制,可以在同一臺計算機的不同進程之間或在跨越一個網絡的不同計算機的不同進程之間進行可靠的、單向或雙向的數據通信.[11]本文系統中采用命名管道實現計算進程和顯示進程的交互,在顯示進程中創建命名管道服務器端,在計算進程中創建命名管道客戶端,連接到服務器端進行交互通信.GPU端計算程序完成每一步的計算并由CPU端將當前的粒子信息輸出后,通過命名管道通知顯示進程有新數據到達,顯示進程接收到通知后到指定位置讀取粒子信息并顯示.具體交互模式見圖6.
2.3 CPU端多線程并行輸出數據文件
離散元模擬計算的規模往往很大,每一步都要計算幾十萬甚至上百萬的粒子,即使計算能力很卓越的GPU也需要一段時間才能完成一步的計算,而這期間CPU端是空閑的,因此可以利用這段時間讓CPU寫文件輸出上一步粒子計算的結果,與GPU端的大規模計算并行執行.具體實現過程為:GPU端程序完成一步計算后,將數據通過PCIE接口傳回CPU端主線程,后者使用CreateThread創建專用的輸出線程,并以獲得的記錄粒子信息的數組為參數調用輸出線程函數,然后立即返回控制GPU下一步的計算.在此過程中CPU端創建的輸出線程寫入硬盤文件輸出粒子信息與GPU端計算下一步的粒子信息并行進行.
實驗在CPU Intel Core i7 Extreme 990X,GPU NVIDA Tesla C2050,12GB DDR3內存的硬件環境下進行,分別實現17萬、40萬、70萬和130萬粒子計算5 000和10 000步的運行效果,時間對比見圖7.
從實驗結果中可以看出,GPU計算結合CPU并行輸出可以節約大約25%~30%的時間,顯著提高程序的運行效率.在計算程序CPU端寫入大規模數據到硬盤、顯示程序讀取硬盤大規模數據進行顯示的過程中,很大一部分時間消耗在硬盤I/O上,由于硬盤的讀寫速度比內存讀寫慢很多,因此可以使用RAMDISK技術將一部分內存劃分出來虛擬為硬盤,用來保存大
規模數據.通過這種方式,可以明顯提高實時顯示圖像的流暢度.采用固態硬盤也有同樣的效果.
3 碰撞分析系統的實現
海冰與海洋平臺結構碰撞分析系統采用Visio Studio 2010開發平臺,VC++語言,OpenGL編程接口庫和NVIDIA CUDA 5.0編程平臺等開發實現.軟件劃分為前處理、計算和后處理3個基本模塊,界面見圖8.
前處理模塊中的預覽功能,可以在GPU計算程序開始前觀察給定參數的海冰結構和碰撞障礙物結構以及兩者之間的方位信息,為進一步的科學計算提供相對準確的位置判斷和事實依據,以更高效地完成海冰運動軌跡的計算,避免無效計算導致資源浪費.前處理模塊分為3個子模塊:在海冰屬性定義子模塊中,完成對海冰塊體的定義,包括海冰的結構,冰塊的尺寸、層數、溫度、鹽度和初始速度等物理屬性,冰塊的邊界屬性,以及海水的密度、深度等;在海洋平臺結構屬性定義模塊完成結構的屬性定義,包括結構體的形狀、個數以及與海冰的相對位置等;
后處理顯示程序與計算程序有一定程度的融合,通過合理的交互模式與接口,在計算的同時實時地呈現出GPU加速的粒子模擬計算結果.同時,后處理模塊還能夠呈現平臺結構在與海冰發生碰撞時的受力情況,包括橫向、縱向和垂直3個方向的力隨著時間推移的變化情況,見圖9.
4 結束語
本文介紹一套海冰碰撞模擬可視化系統的設計思想與實現技術.在對各種參數進行預先定義,并利用離散元模擬海冰的運動軌跡及與海洋平臺結構的碰撞過程進行GPU高性能計算的基礎上,使用OpenGL編程接口和各種加速優化技術對整個過程進行模擬實時顯示,使得對海冰的建模過程更加方便、直觀,模型參數更加精確,保證計算過程的準確性和合理性,提高研究人員的工作效率,改善用戶體驗.
參考文獻:
[1]季順迎, 岳前進. 工程海冰數值模型及應用[M]. 北京: 北京科學出版社, 2011: 12.
[2]俞宏峰. 大規??茖W數據可視化[J]. 中國計算機學會通訊, 2012, 8(9): 2936.
YU Hongfeng. Visualization of large scale scientific data[J]. Communication of the CCCF, 2012, 8(9): 2936.
[3]ROBERTS E, STONE J E, LUTHEYSCHULTEN Z. Lattice microbes: Highperformance stochastic simulation method for the reactiondiffusion master equation[J]. Computational Chemistry, 2013, 34(3): 245255
[4]TU T, YU H, RAMIREZGUZMAN L, et al. From mesh generation to scientific visualization: an endtoend approach to parallel supercomputing[EB/OL]. (20150301)[20061231]. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.650.9262.
[5]KRGER J, KIPFER P, KONCLRATIEVA P, et al. A particle system for interactive visualization of 3D flows[J]. IEEE Transactions on Visualization and Computer Graphics, 2005, 11(6): 744756.
[6]方曉健, 徐驥, 戚華彪, 等. GPU 加速的并行粒子模擬在線可視化[J]. 計算機與應用化學, 2011, 28(10): 12341239.
FANG Xiaojian, XU Ji, QI Huabiao, et al. Insitu visualization for GPUaccelerated parallel particle simulation[J]. Computers and Applied Chemistry, 2011, 28(10): 12341239.
[7]狄少丞, 季順迎. 海冰與自升式海洋平臺相互作用GPU 離散元模擬[J]. 力學學報, 2014, 46(4): 561571. .
DI Shaocheng, JI Shunying. GPUBased discrete element simulation of interaction between sea ice and jackup platform structure[J]. Chinese Journal of Theoretical and Applied Mechanics, 2014, 46(4): 561571.
[8]鄭文剛, 劉凱欣. 離散元法工程計算軟件的前后處理系統[J]. 計算機工程與科學, 2000, 22(6): 1416.
ZHENG Wengang, LIU Kaixin. A preprocessing and postprocessing system for an engineering computation software of discrete element method[J]. Computer Engineering & Science, 2000, 22(6): 1416.
[9]DEMIR V, ELSHERBENI A Z. Utilization of CUDAOpenGL interoperability to display electromagnetic fields calculated by FDTD[EB/OL]. (20150301)[20111013]. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=6047338.
[10]劉進鋒, 郭雷. CUDA和OpenGL互操作的實現及分析[J]. 微型機與應用, 2011(23): 4042.
LIU Jinfeng, GUO Lei. Realization and analysis of CUDA and OpenGL interoperation[J]. Micro computer & its Applications, 2011(23): 4042.
[11]JONES A, OHLUND J. Windows網絡編程技術[M]. 京京工作室, 譯. 北京: 機械工業出版社, 2000: 66.
(編輯 武曉英)