李春
(河北工程大學信息與電氣工程學院,河北邯鄲056038)
隨著海洋各方面數(shù)據的完善及空間分辨率的提高,在使得預報更加準確的同時,預報系統(tǒng)的計算量也越加龐大。在高性能計算機上對預報系統(tǒng)進行并行開發(fā)是滿足研究人員對計算效率需求的主要方法。目前 國內外已有許多基于 MPI或OpenMP等并行技術的應用和研究,但由于海洋生態(tài)動力學的復雜性,基于二者的混合并行技術應用于海洋生態(tài)預報上的研究還非常少。
多核心集群系統(tǒng)的分布-共享體系結構使其既適合以MPI為代表的分布式存儲并行計算技術,也適合以OpenMP為代表的共享存儲并行計算技術,又可使用兩種方法結合的混合并行計算[1-3]。以膠州灣水質預報系統(tǒng)為例,膠州灣水質預報系統(tǒng)是對膠州灣水質進行監(jiān)測的短期預報系統(tǒng),其純MPI非阻塞并行程序比聚合通信方式并行版本具有更好的加速比和并行效率,但非阻塞通信對系統(tǒng)內存開銷較大[4]。根據系統(tǒng)的串行程序的特點,在其MPI并行的基礎上,繼續(xù)進行OpenMP并行,對其純MPI并行模型進行優(yōu)化,形成MPI+OpenMP混合并行編程模型,可以達到更好的并行效率和加速比。
并行程序的實現(xiàn)需要高性能計算機和相應的并行計算軟件開發(fā)運行環(huán)境。由于多核心處理器具有高性能低功耗的特點,裝備了多核心處理器的集群系統(tǒng)也在保持了較低功耗的同時大大增加了集群的計算核心數(shù)量,其較高的性價比使得多核心集群在高性能領域占據的比重越來越大。多核心集群節(jié)點內的計算核心共享相同的全局內存,具有對稱多處理系統(tǒng)的共享存儲特點。同時,集群的不同節(jié)點間具有相互獨立的內存,并通過網絡連接起來,這樣又具有分布式存儲系統(tǒng)的特點,這就構成了多核心集群的分布-共享存儲結構。MPI應用于分布式存儲并行系統(tǒng),用于開發(fā)基于消息傳遞的并行程序。MPI函數(shù)庫有消息發(fā)送和接收、同步、廣播等在內的多種功能,可以在分布的節(jié)點間通過網絡互傳信息。OpenMP是一種應用于共享存儲并行計算機系統(tǒng)的并行編程規(guī)范,提供在共享存儲計算機平臺上進行編程所需要的并行、同步等功能,是基于線程的并行編程模型。在共享存儲結構中,多個處理器通過總線等方式與物理內存相連接,各處理器共享相同的內存空間,使得多個OpenMP線程可以訪問相同的一塊內存空間,避免了線程之間的數(shù)據交換。雖然MPI也可移植到共享存儲的體系結構中,但在共享存儲結構中也需將內存劃分成與所申請?zhí)幚砥鱾€數(shù)等同的份數(shù),再按照分布存儲進行處理[5]。因此在共享存儲并行時一般采用OpenMP,而不是MPI,以減少時間和內存的開銷。MPI與OpenMP都支持多種程序設計語言,如Fortran的多個版本和C、C++等,以及主流編譯器如Intel Compiler等也支持這兩種并行技術。以上為實現(xiàn)MPI+OpenMP混合并行提供了硬件和軟件支持。
由于通信、延遲等問題,MPI的并行往往需要大的代碼粒度,通過消息傳遞并行在多核心集群的各節(jié)點之間,但無法有效地利用節(jié)點內部的多核心處理器的計算能力。此時,將OpenMP在節(jié)點內部進行細粒度并行,既能將多核心處理器的內存和計算核心充分利用起來,又可使程序并行更加充分,達到更好的并行粒度。因此,混合模型能夠有效挖掘計算機的處理能力,充分利用多核心集群的硬件資源,從而獲得較高的性能。
為全面考慮外海、大氣以及陸源排放對海洋環(huán)境的影響,膠州灣示范區(qū)的模式主要由嵌套海洋水動力、海洋生態(tài)模式、大氣模式和陸域面源模式等耦合而成,其示意圖幾個部分作用如圖1所示。其中的海洋生態(tài)模式就是膠州灣的海洋生態(tài)模式,海洋生態(tài)模式包含膠州灣小區(qū)的水動力模塊和水質模塊。
由圖1可看出膠州灣水質預報系統(tǒng)的主要計算部分在其海洋生態(tài)模塊,而整個系統(tǒng)最終輸出的監(jiān)測數(shù)值在海洋生態(tài)模塊的水質模塊部分,水質模塊的計算量占整個計算系統(tǒng)的一半以上,水動力模塊為水質模塊的計算提供所需的邊界條件。水質模塊首先經過浮游植物光合作用、浮游動物捕食、浮游動植物呼吸死亡礦化等內部過程的四級生態(tài)物質變化過程,所有營養(yǎng)物質在四級過程中都參與計算,但后一級過程是建立在前一級過程的基礎上進行計算的。考慮徑流、流域面源輸入、大氣沉降、沉積物-水界面物質通量、與外海物質交換等外部過程,然后對包括氮硅(Si)、溶解氧(DO)、化學需氧量(COD)、浮游植物(PHY)、浮游動物(ZOO)、水體碎屑(DET)、總氮(TN)、總磷(TP)等12個變量進行檢測[6],其中要進行水平擴散垂項擴散方向計算、海底通量計算、化學變化和開邊界條件計算等,最后計算徑流通量。
膠州灣水質預報系統(tǒng)是基于空間差分網格中的C網格建立的,C網格應用的是三維立體坐標系統(tǒng)。系統(tǒng)中把監(jiān)測區(qū)域劃分為i*j*k個網格點進行計算,根據預報目標海域的水平分辨率及嵌套水動力部分計算出,適合膠州灣的實際網格點數(shù)為159*185*5,用U、V、ω分別表示水平 x和y方向及垂向z方向的水平速度和垂向速度,其中每一個點的濃度值都受上下左右速度的影響,其示意圖如圖2。
膠州灣水質預報系統(tǒng)采用Fortran語言編寫,其數(shù)據遵循列優(yōu)先存儲,因此,為減少數(shù)據傳遞的通信量從而減少數(shù)據傳遞所消耗的時間,在MPI并行設計中選擇i、j、k三個方向的j方向劃分任務區(qū)域。若向集群申請n個節(jié)點,那么計算任務將會被劃分成n個子任務,每個子任務每一層包含j/n列行整數(shù)網格點,然后就會是n個進程分別對各子任務進行計算。
由于MPI并行系統(tǒng)采用非阻塞通信的方式,初始化完成后,劃分每個進程所要計算的區(qū)域,然后對水質模塊計算元素濃度所需的相鄰區(qū)域的邊界值進行傳遞,之后是水動力模塊,這樣就可以在后臺程序進行數(shù)據傳遞的過程中,可在前臺同時進行水動力方面的計算,為水質模塊計算做好準備。等待所有數(shù)據傳輸完畢,進入水質部分的計算并輸出結果。最后在程序完全結束后,釋放并行環(huán)境。
但是,非阻塞通信模式在使通信和計算最大化同步的同時,存儲消息的緩沖區(qū)也隨之增大,這無形中也使得系統(tǒng)的開銷加大。因此,對于計算量龐大的膠州灣水質預報系統(tǒng)的純MPI非阻塞通信并行版本在多核心集群上運行時,沒有最大化利用多核心集群的分布共享混合體系結構特點,不能充分發(fā)揮其計算性能,其較高的內存開銷在一定程度上降低了系統(tǒng)的可擴展性。
將MPI+OpenMP混合并行計算技術運用到膠州灣水質預報系統(tǒng)的水質模塊,是對其純MPI版本的一種優(yōu)化。MPI+OpenMP混合編程模型通常采用層次結構,即MPI并行在集群的上層-具有分布存儲體系結構的各節(jié)點之間-用于粗粒度并行,OpenMP并行于下層-節(jié)點內部具有共享內存體系結構的多核處理器的各核之間-提供輕量級線程,用于細粒度并行。MPI+OpenMP混合編程模型易于實現(xiàn),通過減少 MPI進程數(shù),增加OpenMP線程數(shù),避免出現(xiàn)較大的負載不平衡和通信開銷,比單純用MPI編程具有更好的性能和更低的代價,實現(xiàn)更好的并行粒度。MPI+OpenMP混合模型并行執(zhí)行示意圖如圖3。
對于fortran語言版本的膠州灣水質預報系統(tǒng),其規(guī)模為159*185*5,根據其列優(yōu)先的數(shù)據存儲特點,從j方向劃分任務,各進程之間數(shù)據傳遞量會相對較少,因此,設計MPI并行在列,每個進程計算其列的一個子區(qū)間,其行保有完整性,所以用OpenMP的”!$OMP PARALLEL DO“結構在數(shù)據存儲較為間斷的i方向進行線程級并行,利用OpenMP線程共享內存的特點避免了數(shù)據的傳遞。而k方向只有 5層,不對其進行劃分。OpenMP作為一種適用于共享存儲平臺的并行計算技術,能夠有效利用節(jié)點計算機的多核心處理器進行線程級別的并行,使多個并行的線程共享訪問分塊邊界處具有依賴關系的數(shù)據,從而降低消息傳遞帶來的效率影響[7]。
設申請size個節(jié)點,每個節(jié)點使用threads_n個處理器核,則系統(tǒng)將會被分成size個進程,每個進程計算185/size列行整面,每個進程中并行threads_n個線程,又將行劃分成threads_n份,每個線程計算159/thread_n行。聲明MPI各進程并行區(qū)間的開始值和結束值分別為jbegin_col和jend_col,則
其中myid為進程號,jm為網格列數(shù),size為進程數(shù)。
聲明OpenMP并行的線程數(shù)量為全局變量thread_n,以便在其他需要OpenMP并行的相應子函數(shù)中定義全局變量X后,通過omp_set_num_threads(X)語句進行設定線程數(shù)量,以后通過修改主函數(shù)中thread_n的值來控制各函數(shù)OpenMP并行的線程數(shù)。
在下層并行的OpenMP線程數(shù)量可以根據運算需要及集群節(jié)點的核心數(shù)量進行一定的調整,其最大的線程數(shù)量不要超過節(jié)點計算機處理器核心的數(shù)量[8],例如,集群節(jié)點的計算核心為8個,那么設置 OpenMP線程數(shù)量的范圍就在1~8之間。
以一級生態(tài)過程為例,其混合并行部分代碼如下:
MPI+OpenMP混合并行膠州灣水質預報系統(tǒng)水質模塊模型中,上層并行的每一個MPI進程內部包含多個OpenMP線程用于下層的線程級并行處理,多個并行的線程分別對不同的數(shù)據分塊進行運算求解并可以直接訪問相鄰分塊的邊界數(shù)據,多線程共享訪問需要對線程實施同步操作以保證邊界數(shù)據訪問的正確性,線程同步操作會對系統(tǒng)效率產生負面影響[9]。
對于系統(tǒng)的最后輸出部分,考慮到各進程并行的負載均衡問題,往往把水質部分的輸出和水動力部分的輸出分開,在根進程中輸出水質部分的數(shù)據,在其他任一進程中輸出水動力部分的數(shù)據。
為了驗證膠州灣水質預報系統(tǒng)MPI+OpenMP混合并行模型的正確性,本實驗將混合模型在多核心集群上進行了測試,與串行和原有非阻塞MPI并行模型的結果一致,實驗證明 MPI+OpenMP的混合并行模型是可靠的。實驗所用多核心集群有20個節(jié)點,由高速千兆網互聯(lián),每個節(jié)點的處理器有8個核。
一般情況下,對于一定規(guī)模的問題在采用純MPI進行并行時,程序的并行性能并不隨著進程數(shù)量的增加而提高,它會有一個最優(yōu)值,這個時候使用混合編程會達到一個較好的加速比[10]。因為系統(tǒng)是短期預報且只預測1~2 d的水質狀況,給出的測試數(shù)據為預測2d的實驗數(shù)據。其水質模塊純MPI非阻塞通信并行性能測試結果如表1。將表1中執(zhí)行時間、加速比分別與進程個數(shù)的關系轉換為折線圖的形式,如圖4。
表1 中的性能結果及圖4中折線走勢表明,在純MPI非阻塞通信模式下,當進程個數(shù)不超過8時,系統(tǒng)并行效率基本在80%以上,當進程數(shù)繼續(xù)增加,程序依然保持加速,但趨勢已明顯緩慢。
表1 非阻塞通信性能測試結果Tab.1 Performance test results of non - blocking communications
混合并行模型不同進程數(shù)不同線程數(shù)的運行時間及加速比折線圖分別如圖5、圖6所示。綜合圖4、5、6可得出,對水質模塊的行和列都并行的混合并行模型比只在列并行的純MPI并行系統(tǒng)具有很大優(yōu)勢,當進程數(shù)等于2時,隨線程數(shù)在1~8范圍內增加,其加速比接近線性加速比,當線程數(shù)為8時,其加速比已超過11,比純MPI并行進程數(shù)為8時還高出4.46。當進程數(shù)為4線程數(shù)為8時,其加速比已超過16,計算時間比串行程序縮短了約94%。當進程數(shù)為8線程數(shù)也為8時,能夠節(jié)省約95%的運算時間,且加速比已超過20。這些都說明OpenMP線程的增加對并行系統(tǒng)所帶來的負面影響比MPI小的多,所以混合并行編程模型應用到膠州灣水質預報系統(tǒng)是很合適的。
對于純MPI非阻塞并行模型達到的加速比和并行效率,在MPI+OpenMP混合模型中通過減少MPI進程數(shù),增加OpenMP線程級并行,在不增加通信開銷的前提下,也可以很好的實現(xiàn),既使系統(tǒng)保持了良好的可擴展性,又節(jié)約了集群的內存資源。
[1]RABENSEIFNER R,HAGER G,JOST G.Hybrid MPI/OpenMP parallel programming on clusters of multi-core SMP nodes[C].Parallel,Distributed and Network -based Processing,2009 17th Euromicro International Conference on.IEEE,2009:427-436.
[2]ADHIANTO L,CHAPMAN B.Performance modeling of communication and computation in hybrid MPIand OpenMP applications[J].Simulation Modelling Practice and Theory,2007,15(4):481-491.
[3]CHORLEY M J,WALKER D W,GUEST M F.Hybrid message-passing and shared-memory programming in a molecular dynamics application on multicore clusters[J].International Journal of High Performance Computing Applications,2009,23(3):196 -211.
[4]牛沛.并行計算在膠州灣水質預報系統(tǒng)中的應用研究[D].邯鄲:河北工程大學,2012.
[5]馮云,周淑秋.MPI+OpenMP混合并行編程模型應用研究[J].計算機應用系統(tǒng),2006,(2):86 -89.
[6]閻菊,鮑獻文,王 海,等.膠州灣污染物COD的三維擴散與輸運研究[J].環(huán)境科學研究,2001,14(2):14-17.
[7]KRAWEZIK G,CAPPELLO F.Performance comparison of MPI and OpenMP on shared memory multiprocessors[J].Concurrency and Computation:Practice and Experience,2006,18(1):29-61.
[8]DAGUM L,MENON R.OpenMP:an industry standard API for shared - memory programming[J].Computational Science& Engineering,IEEE,1998,5(1):46-55.
[9]周 偉.并行計算在海洋水齡譜模擬中的應用研究[D].邯鄲:河北工程大學,2013.
[10]王惠春.基于SMP集群的MPI-OpenMP混合并行編程模型研究與應用[D].湘潭:湘潭大學,2008.