黃偉建,周 偉,蔡忠亞
(1.河北工程大學 信息與電氣工程學院,河北 邯鄲056038;2.中國海洋大學 海洋環境與生態教育部重點實驗室,山東 青島266100)
為了提高運算速度,并行計算技術已應用到海洋數值模擬領域;MPI[1]和 OpenMP[2]是目前此領域相關研究中最常用的兩種并行計算方法。近幾年,隨著處理器技術的發展,采用多核心處理器的集群計算機得到了普及,由于多核心集群計算機具有節點間分布式和節點內共享式兩種存儲結構,因此多核心集群計算機用戶在進行海洋數值模擬研究時,不僅可以采用MPI這種適合分布式存儲結構的并行計算方法[3],而且也可以采用以OpenMP為代表的適合共享存儲結構的并行計算方法[4]。通過將 MPI和OpenMP兩種并行計算技術應用于同一問題并在多核集群平臺上進行對比研究,能夠找到一種更合適的方法,以求更有效的在多核集群平臺上解決這種問題。
對物質輸運方程[5]進行求解以模擬物質輸運過程是各類海洋數值模擬相關研究的重要組成部分之一,為了找到一種更適合在多核集群計算機平臺上對物質輸運方程進行求解的并行計算方法,本文以普林斯頓海洋模型 (princeton ocean model,POM)[6]為例,分別使用 MPI和 OpenMP兩種不同類型的并行計算技術對其物質輸運方程的串行算法進行并行化改造,并在多核心集群計算機平臺上進行了對比實驗。
本論文使用的物質輸運方程為C(x,y,z,t):

本論文使用的物質輸運方程求解的串行方法[7]在POM模式基礎上使用Fortran語言進行開發,POM是一種三維斜壓原始海洋模式,由美國普林斯頓大學研制。該算法首先計算由平流和水平擴散引起的濃度變化,這一部分為顯示格式計算。之后對由垂向擴散引起的濃度變化進行計算,這一部分為隱式格式。以下為串行模擬方法流程描述,設t為時間變量,T為模擬時間長度:
(1)初始化模擬參數,如模擬時長、計算區域等。
(2)時間循環for(t=0;t<T;t++)。
(3)調用POM模式水動力過程。
(4)調用物質輸運模塊對模擬區域t時刻的每一網格點求解物質輸運方程C(x,y,z,t)(式 (1)),該模塊依次計算平流項、擴散項以及開邊界條件。
(5)輸出物質輸運方程的計算結果,即時刻t的示蹤物質濃度數據。
(6)執行步驟 (2)至步驟 (6)到t循環結束為止。
(7)模擬結束。
串行的物質輸運模擬方法在對每一個網格點求解物質輸運方程時,各網格點的計算相對獨立,因此可以將模擬區域適當劃分成多個子區域,將各個子區域的計算放在不同的處理器核心上進行,以此實現計算的并行化處理。圖1為按照橫向劃分子區域的并行模擬方法流程圖。
并行的物質輸運模擬方法在串行方法的基礎上,將物質輸運的模擬區域劃分為多個子區域,從而將方程C(x,y,z,t)的求解劃分為多個子求解 (式 (2)),并分別放置在多個不同的處理器上進行運算。在并行求解過程中,相鄰子求解之間需要交換后續求解需要的分區邊界數據


圖1 物質輸運模擬并行方法流程
根據物質輸運模擬的計算區域可以分塊進行求解的特點,本文采用單指令流多數據流 (single instruction streammultiple data stream,SIMD)方 式并 分 別 使用 MPI和OpenMP兩種并行計算技術對物質輸運方程求解的串行方法進行并行化改造。由于MPI和OpenMP具有不同的特點,下面對這兩種技術應用于物質輸運方程求解的方法進行對比說明。
1.3.1 MPI并行方式
消息傳遞是在分布式存儲系統上進行并行計算的有效方法,MPI作為一種基于消息傳遞模型的程序庫,提供了在多個進程之間發送接收消息以及同步等功能。由于MPI易用性強且性能穩定,因此其被廣泛應用于集群系統當中[8]。消息傳遞要經過數據打包、傳送、消息拆包3個過程,時間開銷較大,所以在使用MPI設計并行程序時,避免大量的消息傳遞是一個普遍原則[9]。使用MPI對物質輸運模塊進行并行,關鍵在于如何有效的傳遞分區邊界處的數據。對計算區域進行分塊后,各分區可以互相獨立的進行計算,但分區邊界處數據的計算需要用到相鄰分區的計算結果,因此相鄰進程需要通過消息對分區邊界處的數據進行交換。假設有以下代碼:

按照i對計算區域進行分塊后,多個進程針對各自分塊的數據執行以上代碼進行并行計算。非邊界處的計算各進程可以獨立完成,但在邊界處,由于計算array2(i)需要使用array1(i-1)的值,而array1 (i-1)的值位于上一個分區,因此各進程在計算完成array1數組以后需要將邊界處的數值通過MPI消息發送給相鄰的進程。如圖2(a)所示,MPI版本的物質輸運模塊由多個位于不同節點計算機上的MPI進程運行,各進程根據分配的子區域進行求解。在計算的某些時刻,進程i需要使用前面進程i-1的邊界數據,由于兩個進程無法共享內存空間,此時進程i-1與進程i需要分別使用MPI的消息發送和消息接收方法完成分區邊界數據的傳遞工作。

圖2 MPI(a)和OpenMP(b)并行方式對比
1.3.2 OpenMP并行方式
OpenMP是一種被廣泛使用的在共享存儲系統上進行并行編程的標準,它能夠通過在代碼中加入指令來控制程序在特定的位置進行多線程的并行執行。由于共享存儲體系結構所具有的存儲共享這一特點,使用OpenMP進行并行程序設計時需要利用同步和鎖操作來保證內存訪問的正確性[10]。同時,避免開銷較大的同步和鎖操作的大量使用能夠提高系統的效率[11]。與MPI采用多進程并行的方式不同,OpenMP采用多線程并行,各并行線程共享相同的一塊內存,每個線程均可以對內存中的每一個位置進行讀寫操作,因此使用這種方法對物質輸運模塊進行并行化時,線程之間不需要對分區邊界數據進行交換。物質輸運模塊內部由多個循環構成,OpenMP提供了相應并行指令用于這種情景。假設有以下OpenMP并行代碼:


如以上代碼所示, “!$omp parallel do”指令告知編譯器此處代碼需要多線程并行工作完成,當主線程執行代碼到此處時,會自動生成多個并行的子線程,每個子線程執行循環區間的一部分。由于多個并行線程共享相同的內存空間,在分區邊界處計算array2(i)時,線程可以直接訪問位于相鄰分區的array1(i-1),而不需要進行邊界數據的交換。每個循環結束處的 “!$omp end parallel do”命令會進行一次同步操作,因此會帶來一些時間開銷。如圖2(b)所示,OpenMP版本的物質輸運模塊與MPI版本相似,多個位于同一節點計算機上的OpenMP線程對不同分區的數據進行處理。因為多個并行線程共享相同的內存空間,線程i可以直接訪問前面線程i-1的邊界數據,而不需要如MPI那樣通過消息傳遞進行數據交換。
本論文分別將MPI版本并行程序和OpenMP版本并行程序放置于中國海洋大學環境科學與工程學院的多核集群計算機上運行,并對實驗結果進行對比分析。該集群計算機由20臺IBM HS21計算機組成,節點之間使用高速千兆網絡連接,集群具體配置信息見表1。為了便于更好的對實驗結果進行分析,只選取應用了并行計算的物質輸運模塊進行研究,每種測試情景運行5次,將最短的時間 (不計文件讀寫所用時間)作為最終結果。在對計算時間進行分析的基礎上,同時對并行程序的加速比和效率進行分析。并行程序的加速比由串行程序的計算時間與并行程序的計算時間這兩者的比值求得;在串行時間一定的情況下,加速比與并行時間成反比。并行效率等于加速比與核心數的比值,能夠反映核心的運算能力是否被充分使用。本實驗采用的計算區域為適用于膠州灣模擬的312×213×5規模的網格,為了進行并行計算,我們將計算區域均勻劃分成1-8個子區,每個區域分塊對應一個計算核心,時間積分60000步。

表1 并行計算機配置概要
實驗結果表明,本論文采用的物質輸運并行模擬方法產生的物質濃度數據結果與串行方法的結果一致,據此可以證明并行方法的可靠性,圖3為以濃度圖形式對膠州灣物質輸運模擬結果進行的對比。
圖4為MPI與OpenMP所用的計算時間對比圖,橫軸為使用的CPU核心個數,縱軸為計算時間。從該圖中可以觀察到,隨著核心數目增加,MPI與OpenMP的計算速度逐漸加快,運算時間逐漸減少。在使用8個核心進行計算時,MPI和OpenMP均達到計算速度的最高值,相對于串行分別減少83%和76%的計算時間。通過觀察MPI和OpenMP時間折線的后段,可以發現二者的計算速度增幅明顯放緩,對于MPI來說,這主要是由于增加的MPI進程帶來的通信開銷造成的[12,13];對于OpenMP,主要原因是增加的線程數量帶來的同步開銷較大[14],對運算效率造成了負面影響。

圖3 膠州灣物質輸運模擬結果濃度圖對比

圖4 MPI和OpenMP計算時間對比

圖5 MPI和OpenMP加速比對比
圖5、圖6反映的是MPI和OpenMP的并行加速比以及并行效率的情況。從圖5中可以觀察到,MPI和OpenMP在使用12個核心時加速比達到最高值5.95和4.19。隨著核心數目增加,MPI通信開銷和OpenMP線程間同步開銷使二者的加速比增長幅度呈現明顯下降趨勢。從圖6中可以觀察到,MPI和OpenMP在使用2個核心時的并行效率達到最高值,分別為0.95和0.87。之后隨著核心數目的增加,二者的并行效率呈現明顯下降趨勢。雖然MPI和OpenMP在使用8個核心時的計算速度最高,計算用時最短,但此時的并行效率卻處于最底值位置,這說明MPI和OpenMP在使用更多的核心進行計算時,計算之外的開銷比重也隨之增加,從而導致了核心利用效率的降低[15]。

圖6 MPI和OpenMP并行效率對比
通過以上分析可以得出,在計算區域為312×213×5這種規模的實驗條件下,MPI的加速效果明顯優于OpenMP,當MPI使用8個核心時運算速度達到最高值,相較于串行速度提高6倍。
本論文分別將MPI和OpenMP兩種類型的并行計算方法應用于模擬海洋物質輸運的過程,并在多核心集群計算機系統上進行了對比實驗。實驗結果表明,MPI的加速效果明顯優于OpenMP,且最高運算速度接近串行的6倍。由此看來,在這種計算規模下MPI更適合用來在多核心集群平臺上對海洋物質輸運的模擬過程進行并行化。根據本研究的成果,今后將把MPI并行的物質輸運模擬方法應用到有關海洋研究當中,使其發揮更大的作用。
[1]LI Dong,LIU Jing,HAN Guijun,et al.Parallel algorithms for princeton ocean model[J].Marine Science Bulletin,2010,29 (3):229-333(in Chinese). [李冬,劉璟,韓桂軍,等.POM海洋模式的并行算法 [J].海洋通報,2010,29 (3):229-333.]
[2]Gonzalez M,Ayguade E,Martorell X,et al.Dual-level parallelism exploitation with OpenMP in coastal ocean circulation modeling [G].Lecture Notes in Computer Science 2327:Proceedings of the 4th International Symposium on High Performance Computing.Berlin:Springer,2006:469-478.
[3]MPI:A message-passing interface standard [EB/OL].[2012-07-11].https://computing.llnl.gov/tutorials/mpi/.
[4]OpenMP:An application program interface [EB/OL].[2012-07-18].https://computing.llnl.gov/tutorials/openMP/.
[5]SHEN Xia,HONG Dalin,WANG Peng.Study on numerical scheme of mass transport equation based on POM [J].Advances in Marine Science,2009,27 (4):452-459 (in Chinese).[申霞,洪大林,王鵬.基于POM的物質輸運方程數值格式研究 [J].海洋科學進展,2009,27 (4):452-459.]
[6]Zhang W G,Wilkin J L,Schofield O M E.Simulation of water age and residence time in New York Bight [J].Journal of Physical Oceanography,2010 (40):965-982.
[7]CHEN Bingrui,ZHU Jianrong,QI Dingman.Improvement in numerical scheme on the advection term of mass transport equation using particle-tracing method [J].Oceanologia Et Limnologia Sinica,2008,39 (5):439-445 (in Chinese).[陳昞睿,朱建榮,戚定滿.采用質點跟蹤方法對物質輸運方程平流項數值格式的改進 [J].海洋與湖沼,2008,39 (5):439-445.]
[8]Lusk E,Chan A.Early experiments with the OpenMP/MPI hybrid programming model [C]//West Lafayette:Proceedings of the Fourth International Workshop on OpenMP,2008:36-47.
[9]WANG Zhiyuan,YANG Xuejun,ZHOU Yun.Scalable triple modular redundancy fault tolerance mechanism for MPI-oriented large scale parallel computing [J].Journal of Software,2012(4):1022-1035 (in Chinese).[王之元,楊學軍,周云.大規模MPI并行計算的可擴展冗余容錯機制 [J].軟件學報,2012 (4):1022-1035.]
[10]PAN Wei,LI Zhanhuai,WU Sai,et al.Evaluating large graph processing in MapReduce based on message passing [J].Chinese Journal of Computers,2011 (10):1768-1784 (in Chinese).[潘巍,李戰懷,伍賽,等.基于消息傳遞機制的MapReduce圖算法研究 [J].計算機學報,2011 (10):1768-1784.]
[11]WU Huabei,SUN Jizhou,WANG Wenyi.Research and implementation of parallel programming environment for hybrid parallel computing system [J].Computer Science,2010,37(4):143-178 (in Chinese). [武華北,孫繼洲,王文義.面向混合并行計算系統編程環境的研究與實現 [J].計算機科學,2010,37 (4):143-178.]
[12]Rabenseifner R,Hager G,Jost G.Hybrid MPI/OpenMP parallel programming on clusters of multi-core smp nodes[C]//Proceedings of the 17th Euromicro International Conference on Parallel,Distributed,and Network-Based Processing,2009:427-236.
[13]Thakur R,Gropp W.Test suite for evaluating performance of multi-threaded MPI communication [J].Parallel Computing,2009,35 (12):608-617.
[14]Rabenseifner R,Hager G,Jost G.Tutorial on hybrid MPI and OpenMP parallel programing [C]//Portland,OR:Supercomputing Conference,2009.
[15]Martin J Chorley,David W Walker.Performance analysis of a Hybrid MPI/OpenMP application on muti-core clusters [J].Journal of Computational Science,2010,1 (3):168-174.