王智洲,孫霄峰,尹 勇,劉春雷,李軍翼
(大連海事大學 航海動態(tài)仿真和控制交通部重點實驗室,遼寧 大連 116026)
基于CUDA的散貨船穩(wěn)性并行計算
王智洲,孫霄峰,尹 勇,劉春雷,李軍翼
(大連海事大學 航海動態(tài)仿真和控制交通部重點實驗室,遼寧 大連 116026)
為提高散貨船配載儀中船舶穩(wěn)性計算速度,通過使用CUDA(Compute Unified Device Architecture)對穩(wěn)性計算過程進行并行加速。首先基于CGAL(Computational Geometry Algorithms Library)中的切片模塊按肋位縱向切割船體型表面,得到每個肋位處橫剖面型值數(shù)據(jù);然后對橫剖面型值數(shù)據(jù)進行等距偏移模擬板厚,得到各肋位處的外板數(shù)據(jù);然后將外板數(shù)據(jù)發(fā)往GPU;在GPU中通過水線面和外板數(shù)據(jù)求解并行計算雅克比矩陣系數(shù);最后將雅可比矩陣系數(shù)傳回CPU,求解穩(wěn)性方程組。
CUDA;并行計算;船舶穩(wěn)性;CGAL;配載儀
船舶在外力作用下偏離其平衡位置而傾斜,當外力消失后,能自行恢復到原來平衡位置的能力,叫做船舶穩(wěn)性[1]。船舶穩(wěn)性是船舶最主要的航行性能之一,是確保船舶安全航行的基本保障。對于船舶經(jīng)濟安全的運營有重要的意義。目前國內(nèi)的配載儀對穩(wěn)性的計算大多基于裝載手冊數(shù)據(jù),不考慮縱傾的影響,這導致計算的精度不足。
目前船舶靜水中穩(wěn)性的計算,主要有4類算法:
第1類是牛頓迭代法。趙曉非[2]、桑松[3]將船舶穩(wěn)性計算轉(zhuǎn)化為求解優(yōu)化問題,成功實現(xiàn)了在自由縱傾狀態(tài)下船舶的穩(wěn)性曲線計算方法,運用牛頓迭代法將其轉(zhuǎn)化為線性化方程組進行求解。孫承猛[4]在此基礎上引入差商代替導數(shù)的思想來求解雅可比矩陣。牛頓迭代法收斂速度較快,但是該方法需要的船舶參數(shù)較多,特別是在大橫傾狀態(tài)下船舶水線面發(fā)生很大變化,導致求取船舶參數(shù)變復雜。
第2類是優(yōu)化法。馬坤[5]將自由縱傾下最小功原理的優(yōu)化問題釆用非線性規(guī)劃中的懲罰函數(shù)法進行迭代求解,對計算自由縱傾下的穩(wěn)性問題進行了簡化。優(yōu)化法對于求解參數(shù)的設定要求較高,若設置不合理可能造成迭代過多,收斂緩慢。
第3類是有限元分析法。令波[6]基于船舶三維模型,通過有限元分析計算穩(wěn)性。有限元分析法需要劃分大量的網(wǎng)格,計算量較大,實時性較差。
第4類是表面元法。程智斌[7]、Radwan[8]采用表面元法計算船舶的穩(wěn)性。這種方法是把船舶的表面分解成許多小的表面單元,從而算出某傾角下的回復力矩。表面元法提出用靜壓力解決穩(wěn)性問題的新思路,但同時涉及大量面元的計算,計算量大。
考慮到程序的實時性,本文選用牛頓迭代法求解船舶穩(wěn)性方程組。目前配載儀的程序?qū)τ诜€(wěn)性的計算都基于CPU編寫,由于功耗和散熱的限制,單CPU已經(jīng)達到了4 GHz左右的時鐘極限[9]。CPU被設計用來運行單個復雜的運算,GPU被設計用來進行高密度的簡單并行計算。GPU通過成千上萬的線程來隱藏延遲,實現(xiàn)高速運算,單個線程的計算在GPU上運行效率很低[10]。CPU的設計宗旨是在單個CPU單元上對數(shù)據(jù)進行處理,而由于GPU上集成了成百上千處理單元,因此GPU并行計算能力大于CPU。現(xiàn)在的GPU如GTX 1080有2 560個CUDA核心,浮點計算能力為8.9 TFLOPS,而八核心的CPU I7 5960X的浮點計算能力僅為354 GFLOPS。現(xiàn)在GPU能夠提供強大的計算能力,并且具有較高的存儲帶寬。
如今GPU已經(jīng)被大量應用于通用計算領域,如固體力學計算、分子動力學計算、飛行器優(yōu)化設計等。如果將牛頓迭代法求解船舶穩(wěn)性方程組的過程并行化,通過GPU強大的浮點運算并行能力,則可大大加快散貨船配載儀中穩(wěn)性計算的效率。
CGAL(Computational Geometry Algorithms Library,計算幾何算法庫)[11]以C++庫的形式提供高效、可靠的幾何算法。CGAL提供計算幾何相關的數(shù)據(jù)結(jié)構和算法,如三角剖分、Voronoi圖、多邊形、幾何處理和凸包算法等。
本文利用CGAL幾何算法庫中的切片模塊,沿船長方向依次切割船舶三維型表面,得到船舶每個肋位處橫剖面的型值數(shù)據(jù)。通過使用CGAL幾何算法庫中的切片功能,可得到任意浮態(tài)下船舶橫剖面封閉環(huán)上點的三維坐標,如圖1所示。x軸船首方向為正,y軸左舷方向為正??紤]到船殼版的存在,需要對船舶每個橫剖面進行大小為平均板厚的等距偏移,來得到外板數(shù)據(jù),具體的過程見參考文獻[12]。
2.1 船舶穩(wěn)性方程組求解
式中,V為排水體積;XB,YB,ZB為船舶浮心的縱向、橫向和垂向坐標。
定義基平面和水線面大圓弧相交頂角α的球面二角形:
船舶由任意浮態(tài),等體積的傾斜某個指定角度α1時,設傾斜船舶功的函數(shù)為T,穩(wěn)性求解可以表達為在約束條件下求函數(shù)T的極值問題,函數(shù)T的極值點由下列方程確定:
式中:θ,φ分別為橫傾角和縱傾角;V0為初始排水體積;θ0,φ0分別為初始橫傾角和縱傾角;α0為初始基平面和水線面大圓弧相交頂角。α1為最終水線面和初始水線面夾角。
引入向量表示:
式中:Tm為船中吃水。
使用牛頓法得到線性化方程:
解線性方程組:
式中:δTm,δtanθk,δtanφk為設置精度。
按照船舶靜力學原理,式(6)的雅克比矩陣為:
圖1 散貨船SHANDONG REN HE型表面橫剖面示意圖Fig. 1 Molded surface transverse sections of bulk carrier SHANDONG REN HE
式中:S為水線面在基平面上的投影面積;XF,YF,ZF為船舶漂心的縱向,橫向和垂向坐標;水線面對Ox軸的面積慣性矩為Ix;水線面面積S對于通過該水線面漂心F的橫軸的縱向慣性矩為ILF;S的慣性積為Ixy。
總復原力臂L為:
2.2 雅克比矩陣系數(shù)計算
2.2.1 水線面系數(shù)計算
將船體坐標轉(zhuǎn)換到船中后,按照文獻[13]給出的傾斜水線面一般式方程為:
設水線面左舷曲線為p(x),右舷曲線為s(x)。水線面在基平面上投影的面積S為:
式中:x0,xn分別為船首尾到z軸距離。
漂心F(XF,YF,ZF)的坐標為:
水線面對Ox軸,Oy軸的面積慣性矩Ix,Iy為:
水線面參數(shù)的計算可以先計算每個肋位處微元參數(shù),再通過梯形積分法沿船長方向積分求出。類似的,可以用梯形法近似求取其他船舶參數(shù)。
2.2.2 排水體積和浮心的計算
排水體積
式中AS為距離z軸x處的橫剖面面積。
船舶浮心坐標B(XB,YB,ZB)為:
式中:Myoz,Mxoz和Mxoy分別為排水體積對中站面、中線面和基平面的靜矩;xa,ya,za分別為距z軸x處的橫剖面的形心縱向,橫向和垂向坐標。
2.3 基于CUDA的程序設計
NVIDIA公司為了推動GPU在大規(guī)模高性能計算領域里的發(fā)展,在2006年11月推出為通用并行計算開發(fā)的CUDA通用并行計算架構,由于它的編程方便與并行性能高的特點,充分利用了CPU和GPU各自的優(yōu)點,實現(xiàn)CPU/GPU聯(lián)合執(zhí)行,使得并行計算得到更快的發(fā)展[10]。
在GPU中,CUDA的并行結(jié)構由網(wǎng)格(grid)-塊(block)-線程(thread)的結(jié)構組成。其結(jié)構如圖2所示。CUDA將問題分解成線程塊的網(wǎng)格,每塊包含多個線程,執(zhí)行相同的代碼。每個塊可以被分配到任意一個處理器核心以并行或串行方式執(zhí)行。
圖2 CUDA并行結(jié)構示意圖[14]Fig. 2 CUDA structure diagram
CUDA在編譯時,會將CPU代碼和GPU代碼分開編譯。程序從主機端的CPU代碼開始執(zhí)行,當執(zhí)行到GPU代碼時,調(diào)用內(nèi)核函數(shù),并將代碼切換到GPU。當內(nèi)核函數(shù)執(zhí)行完后,設備代碼被切換到CPU端,繼續(xù)執(zhí)行代碼。
本文用C++語言,使用CUDA 7.5編寫了船舶穩(wěn)性計算程序,其流程如圖3所示。首先對所有切割肋位處的橫剖面進行等距偏移得到外板的離線數(shù)據(jù);然后將外板的離線數(shù)據(jù)發(fā)送到GPU,在迭代過程中,外板數(shù)據(jù)一直儲存在顯存中。
由船舶初始浮態(tài)得到船舶初始船中吃水、橫傾角及縱傾角,從而確定初始水線面;依次與水線面求交得到水線面數(shù)據(jù)和水下部分橫剖面數(shù)據(jù);現(xiàn)在船舶數(shù)據(jù)可以分為2個部分,求解雅可比矩陣的所需的靜水力參數(shù)可以同步并行計算。
考慮到求解船舶穩(wěn)性方程組的數(shù)據(jù)量很小,不適合使用GPU處理,將GPU中的靜水力系數(shù)值傳回CPU,計算雅各比矩陣系數(shù)求解穩(wěn)性方程組;若滿足精度要求則輸出該傾角下的復原力臂值,接著進行下一個傾角的力臂計算;否則確定新的水線面繼續(xù)迭代。
以散貨船SHANDONG REN HE為例,平均板厚為0.021 m,分別設計CPU和GPU處理的程序,計算回復力臂值,設置步長為5°,計算區(qū)間0°到80°。根據(jù)計算結(jié)果繪制復原力臂曲線。用本文計算結(jié)果與二維數(shù)值計算方法的計算值進行對比,結(jié)果如圖4~圖6所示??梢钥吹皆跈M傾初期2種計算方法結(jié)果相差較小。在橫傾角超過60°~70°時,計算結(jié)果相差較大,主要原因在于在該種載況下,橫傾角已經(jīng)超過進水角,本文的計算方法已經(jīng)包含艙蓋等船體上部計算數(shù)據(jù),與二維計算法計算結(jié)果相比存在一定誤差。
圖3 穩(wěn)性計算流程圖Fig. 3 Stability calculation flowchart
圖4 壓載出港穩(wěn)性力臂對比圖Fig. 4 Comparison of GZ during ballast condition at DEP
圖5 壓載途中穩(wěn)性力臂對比圖Fig. 5 Comparison of GZ during ballast condition in MID
圖6 壓載到港穩(wěn)性力臂對比圖Fig. 6 Comparison of GZ during ballast condition at ARR
本文基于船舶三維型表面模型及CGAL幾何算法庫中的切片模塊建立了船舶三維基礎數(shù)據(jù)庫,在此數(shù)據(jù)庫基礎上,通過CUDA并行加速,實現(xiàn)了船舶穩(wěn)性的實時計算,可得到如下結(jié)論:1)船舶三維型表面模型來源于船舶設計軟件,是船舶真實數(shù)據(jù),計算精度較高;2)以散貨船SHANDONG REN HE為例,對多個典型載況進行計算,驗證了本文算法的準確性。
[1]盛振邦, 劉應中. 船舶原理[M]. 上海交通大學出版社, 2003.
[2]趙曉非, 蔡偉科. 船舶穩(wěn)性計算優(yōu)化方法研究[J]. 中國造船,1987(02): 88–94.
ZHAO Xiao-fei, CAI Wei-ke, An optimization methodforthe calculation of ships stability curves[J]. Shipbuilding of China,1987(02): 88–94.
[3]桑松, 徐學軍. 浮式結(jié)構物完整穩(wěn)性優(yōu)化計算原理[J]. 上海交通大學學報, 2009(10): 1568–1572.
SANG Song, XU Xue-jun. Optimization calculational Principle on intact stability of floating structures[J]. Journal of Shanghai Jiaotong University, 2009(10): 1568–1572.
[4]孫承猛, 劉寅東. 一種船舶最小穩(wěn)性和自由浮態(tài)計算的改進算法[J]. 中國造船, 2007(03): 1–4.
SUN Cheng-meng, LIU Yin-dong. An improved algorithm for calculating ship’s minimum stability and free floatation[J].Shipbuilding of China, 2007(03): 1–4.
[5]馬坤, 張明霞, 紀卓尚, 等. 非線性規(guī)劃法計算船舶穩(wěn)性[J].中國造船, 2003(02): 83–86.
MA Kun, ZHANG Ming-xia, JI Zhou-shang, et al. Application of nonlinear programming to calculation of ship stability curve[J]. Shipbuilding of China, 2003(02): 83–86.
[6]令波. 浮性與完整穩(wěn)性的直接計算法[D]. 武漢:華中科技大學, 2013.
[7]程智斌, 魏建志, 曾宏軍. 計算破損船舶穩(wěn)性的表面元法[J].海軍工程大學學報, 2002(4): 41–44.
[8]RADWAN A M. A different method to evaluate the intact stability of floating structures[J]. Marine Technology and Sname News, 1983, 20(1): 21–25.
[9]COOK S. CUDA programming: a developer’s guide to parallel computing with GPUs[M]. Newnes, 2012.
[10]KIRK D B, Wen-mei W H. Programming massively parallel processors: a hands-on approach[M]. Newnes, 2012.
[11]The Computational Geometry Algorithms Library[EB/OL].[2016-8-19]. http://www.cgal.org.
[12]王智洲, 孫霄峰, 尹勇, 等. 基于三維設計數(shù)據(jù)的船舶濕面積計算[J]. 船舶工程, 2016, 38(05): 5–8.
WANG Zhi-zhou, SUN Xiao-feng, YIN Yong, et al. Ship’s wetted surface calculation based on 3D design data[J]. Ship Engineering, 2016, 38(05): 5–8.
[13]張明霞. 基于NURBS曲面的船舶破艙穩(wěn)性計算方法研究[D]. 大連理工大學, 2002.
[14]NVIDIA. CUDA programming guide V 7.5[Z]. 2015.
CUDA based bulk carrier stability parallel calculation
WANG Zhi-zhou, SUN Xiao-feng, YIN Yong, LIU Chun-lei, LI Jun-yi
(Key Laboratory of Marine Simulation and Control, Dalian Maritime University, Dalian 116026, China)
This paper designs a method to accelerate calculation progress using the NVIDIA CUDA (Compute Unified Device Architecture). By using the slicing module in CGAL(Computational Geometry Algorithms Library), the offset table was obtained through longitudinally slicing 3D design surface; The shell data were gained by simplification and equidistant offsetting and sent to GPU; Jacobi matrix coefficients were gained parallelly by intersecting water plane and shell data; The Jacobi matrix coefficients were sent to CPU to solve equations. Our results show speed up of 6 to 10 times and the real time performance of the program is improved effectively.
CUDA;parallel computing;ship stability;CGAL;Loading computer
U661.22
A
1672 – 7649(2017)10 – 0040 – 05
10.3404/j.issn.1672 – 7649.2017.10.007
2016 – 09 – 08;
2016 – 10 – 27
863課題資助項目(2015AA016404);海洋公益性行業(yè)科研專項資助項目(201505017-4);中央高?;究蒲袠I(yè)務費資助項目(3132016310)
王智洲(1993 – ),男,碩士研究生,研究方向為船舶靜力學。