【摘? 要】線積分卷積是矢量場可視化的重要的方法之一,但是由于需要對每個矢量點進行卷積積分計算,因而計算量較大。CPU多核環(huán)境下的并行實現(xiàn)是現(xiàn)在并行計算技術(shù)發(fā)展的方向之一。本文在OpenMP 環(huán)境下實現(xiàn)了線積分卷積的并行化。結(jié)果表明,隨著CPU核數(shù)的增加,并行線積分卷積的時間逐漸降低,加速比逐漸增加。
【關(guān)鍵詞】線積分卷積;OpenMP
Abstract:Line integral convolution is one of the most important methods for vector field visualization. However, it requires the convolution integral calculation for each vector point. Parallel implementation in CPU multi-core environment is one of the development directions of parallel computing technology. In this paper, the parallelization of line integral convolution is realized by OpenMP in a multi-core environment. The results show that the time of parallel line integral convolution decreases and the acceleration ratio increases with the increase of CPU cores.
KeyWords: Line integral convolution; OpenMP
引言
基于線積分卷積(Linear Integral Convolution, LIC)的矢量場可視化是目前矢量場可視化最常用的方法之一。其核心思想是白噪聲疊加矢量場數(shù)據(jù)對矢量場運動信息進行可視化,能夠很好的表示矢量場運動方向特性,且易于實現(xiàn),因此對于矢量場的可視化具有重要意義。但同時該方法也存在不足:積分過程計算量大,需要對流線上的每一點進行積分卷積。在積分過程中即使采用最簡單的歐拉積分方法,計算量也不容小覷。針對LIC算法計算量大的問題。文獻[1]實現(xiàn)了基于平行坐標(biāo)的LIC矢量場可視化,并根據(jù)netcdf格式數(shù)據(jù)的特點,提出了基于netcdf數(shù)據(jù)生成流線的方法。
針對LIC算法積分過程計算量大,計算速度慢的問題,文獻[2]中利用GPU的多線程技術(shù),基于cuda平臺對LIC算法的計算部分實現(xiàn)并行化,獲得了較高的加速比。此外,采用GPU實現(xiàn)LIC并行化的研究如文獻[3]。然而基于GPU的并行化通常情況下需要對串行LIC代碼進行重構(gòu),工作量較大,此外,還需要在內(nèi)存與顯存之間頻繁拷貝數(shù)據(jù)。
文獻[4]通過LIC算法模擬高分辨率的矢量場數(shù)據(jù),在Windows集群環(huán)境下采用MPI實現(xiàn)了并行化,結(jié)果顯示并行化后的算法能夠大幅度縮短計算可視化時間,且與原來串行計算的圖像結(jié)果一致?;贛PI的LIC的并行化具有良好的擴展性,能靈活的擴充與減少節(jié)點,但是該并行模式在通常情況下需要計算機集群,且并行加速比不僅依賴算法的優(yōu)化,更加依賴計算集群底層網(wǎng)絡(luò)的傳輸,即底層網(wǎng)絡(luò)的帶寬往往成為制約提高并行加速比的瓶頸。
隨著計算機多核CPU技術(shù)的不斷進步,共享存儲器編程因其能充分發(fā)揮各個CPU核的潛力而成為最受青睞的編程模式之一。共享存儲器編程的優(yōu)點是通過共享內(nèi)存實現(xiàn)線程之間的數(shù)據(jù)通信,減少網(wǎng)絡(luò)之間的數(shù)據(jù)傳輸,各個線程通過加鎖的方式實現(xiàn)對共享內(nèi)存的讀寫。常用的共享存儲器編程方式包括OpenMP,及調(diào)用操作系統(tǒng)API實現(xiàn)多線程等方式。本文將采用OpenMP方式實現(xiàn)線積分卷積的并行化。
1.線積分卷積
線積分卷積是通過跟蹤矢量場數(shù)據(jù),形成矢量,然后在矢量方向性卷積高斯白噪聲從而達(dá)到矢量場數(shù)據(jù)的可視化,具體公式如下:
F(x)表示輸出像素點的灰度值,T(s)表示高斯白噪聲灰度圖像值,k(s)為卷積核函數(shù),積分長度為2L。對于輸入的矢量場數(shù)據(jù)中的每一個點都需要計算流線,并依據(jù)上式輸出積分卷積值作為輸出結(jié)果。
2.OpenMP并行實現(xiàn)
本文主要對計算過程中的主要循環(huán)迭代加入OpenMP指令實現(xiàn)并行化。即對線積分卷積的迭代跟蹤流線和卷積的過程通過加入OpenMP的并行指令 #pragma omp parallel 的方式實現(xiàn)該過程的并行化。
LIC算法的積分過程需要對每一個點沿著矢量方法進行積分計算,計算完成之后根據(jù)卷積核函數(shù)對高斯白噪聲進行卷積計算,卷積完成之后更新圖形對應(yīng)位置的像素值。根據(jù)LIC算法的特點,可以設(shè)置矢量場數(shù)據(jù)及高斯白噪聲數(shù)據(jù)為各個OpenMP線程所共享,這樣可以減少線程之間的數(shù)據(jù)通信,減少并行開銷。在OpenMP編譯指令中加入“default(shared)”子句實現(xiàn)默認(rèn)數(shù)據(jù)的共享,共享數(shù)據(jù)包括矢量場數(shù)據(jù),高斯白噪聲及輸出圖像數(shù)據(jù)。在OpenMP編譯指令中加入“private”子句實現(xiàn)循環(huán)變量的私有。
3.結(jié)果分析
本文在一臺8核CPU機器上實現(xiàn)線積分卷積的并行化。為了較好的衡量并行結(jié)果,本文設(shè)置的線積分卷積的并行計算規(guī)模分別為1000*1000、2000*2000。線積分卷積并行計算規(guī)模為1000*1000、2000*2000時計算時間分別為表1、表2。對應(yīng)的加速比分別對應(yīng)圖1,、圖2。
由以上2個表格的計算時間可以得到,隨著CPU核數(shù)的增加,并行LIC算法的計算時間逐漸減少。加速比逐漸增加。在CPU核數(shù)較高(CPU核數(shù)為6、8時)時,兩個問題規(guī)模計算時間大幅度減少,均能獲得較高的加速比。在CPU核數(shù)為8,兩種問題規(guī)模的加速比達(dá)分別達(dá)到3.78、3.48。然而在CPU增加過程中,加速比并沒有線性增加,這主要是因為兩個問題規(guī)模并行開銷增加。對于OpenMP來說,并行開銷主要包括線程的私有資源的分配、同步等開銷增加。
綜上,并行化后的LIC算法隨著CPU核數(shù)的增加,運算時間逐漸降低,逐漸獲得較高的加速比。隨著并行開銷的增加,并行化的效率逐漸降低。此外,負(fù)載均衡與否也是影響并行效率的一個重要因素。
參考文獻
[1] 宋揚揚.基于平行坐標(biāo)的線積分卷積矢量場可視化方法研究[D].秦皇島:燕山大學(xué).2016
[2] 吳占斌.基于 GPU 的二維矢量場可視化線性積分卷積方法的研究與實現(xiàn)[D] 青島:中國海洋大學(xué). 2011
[3]詹芳芳.線積分卷積二維矢量場可視化方法的研究和改進[D].北京:北京化工大學(xué)2013
[4]劉天佳.基Fast-LIC的矢量場并行可視化方法研究[D]. 哈爾濱:哈爾濱工程大學(xué) 2017
作者簡介:符曉單(1985--),男,博士研究生,從事并行程序設(shè)計。