黃偉建,周 偉,蔡忠亞
(1.河北工程大學(xué) 信息與電氣工程學(xué)院,河北 邯鄲056038;2.中國(guó)海洋大學(xué) 海洋環(huán)境與生態(tài)教育部重點(diǎn)實(shí)驗(yàn)室,山東 青島266100)
為了提高運(yùn)算速度,并行計(jì)算技術(shù)已應(yīng)用到海洋數(shù)值模擬領(lǐng)域;MPI[1]和 OpenMP[2]是目前此領(lǐng)域相關(guān)研究中最常用的兩種并行計(jì)算方法。近幾年,隨著處理器技術(shù)的發(fā)展,采用多核心處理器的集群計(jì)算機(jī)得到了普及,由于多核心集群計(jì)算機(jī)具有節(jié)點(diǎn)間分布式和節(jié)點(diǎn)內(nèi)共享式兩種存儲(chǔ)結(jié)構(gòu),因此多核心集群計(jì)算機(jī)用戶在進(jìn)行海洋數(shù)值模擬研究時(shí),不僅可以采用MPI這種適合分布式存儲(chǔ)結(jié)構(gòu)的并行計(jì)算方法[3],而且也可以采用以O(shè)penMP為代表的適合共享存儲(chǔ)結(jié)構(gòu)的并行計(jì)算方法[4]。通過將 MPI和OpenMP兩種并行計(jì)算技術(shù)應(yīng)用于同一問題并在多核集群平臺(tái)上進(jìn)行對(duì)比研究,能夠找到一種更合適的方法,以求更有效的在多核集群平臺(tái)上解決這種問題。
對(duì)物質(zhì)輸運(yùn)方程[5]進(jìn)行求解以模擬物質(zhì)輸運(yùn)過程是各類海洋數(shù)值模擬相關(guān)研究的重要組成部分之一,為了找到一種更適合在多核集群計(jì)算機(jī)平臺(tái)上對(duì)物質(zhì)輸運(yùn)方程進(jìn)行求解的并行計(jì)算方法,本文以普林斯頓海洋模型 (princeton ocean model,POM)[6]為例,分別使用 MPI和 OpenMP兩種不同類型的并行計(jì)算技術(shù)對(duì)其物質(zhì)輸運(yùn)方程的串行算法進(jìn)行并行化改造,并在多核心集群計(jì)算機(jī)平臺(tái)上進(jìn)行了對(duì)比實(shí)驗(yàn)。
本論文使用的物質(zhì)輸運(yùn)方程為C(x,y,z,t):
本論文使用的物質(zhì)輸運(yùn)方程求解的串行方法[7]在POM模式基礎(chǔ)上使用Fortran語(yǔ)言進(jìn)行開發(fā),POM是一種三維斜壓原始海洋模式,由美國(guó)普林斯頓大學(xué)研制。該算法首先計(jì)算由平流和水平擴(kuò)散引起的濃度變化,這一部分為顯示格式計(jì)算。之后對(duì)由垂向擴(kuò)散引起的濃度變化進(jìn)行計(jì)算,這一部分為隱式格式。以下為串行模擬方法流程描述,設(shè)t為時(shí)間變量,T為模擬時(shí)間長(zhǎng)度:
(1)初始化模擬參數(shù),如模擬時(shí)長(zhǎng)、計(jì)算區(qū)域等。
(2)時(shí)間循環(huán)for(t=0;t<T;t++)。
(3)調(diào)用POM模式水動(dòng)力過程。
(4)調(diào)用物質(zhì)輸運(yùn)模塊對(duì)模擬區(qū)域t時(shí)刻的每一網(wǎng)格點(diǎn)求解物質(zhì)輸運(yùn)方程C(x,y,z,t)(式 (1)),該模塊依次計(jì)算平流項(xiàng)、擴(kuò)散項(xiàng)以及開邊界條件。
(5)輸出物質(zhì)輸運(yùn)方程的計(jì)算結(jié)果,即時(shí)刻t的示蹤物質(zhì)濃度數(shù)據(jù)。
(6)執(zhí)行步驟 (2)至步驟 (6)到t循環(huán)結(jié)束為止。
(7)模擬結(jié)束。
串行的物質(zhì)輸運(yùn)模擬方法在對(duì)每一個(gè)網(wǎng)格點(diǎn)求解物質(zhì)輸運(yùn)方程時(shí),各網(wǎng)格點(diǎn)的計(jì)算相對(duì)獨(dú)立,因此可以將模擬區(qū)域適當(dāng)劃分成多個(gè)子區(qū)域,將各個(gè)子區(qū)域的計(jì)算放在不同的處理器核心上進(jìn)行,以此實(shí)現(xiàn)計(jì)算的并行化處理。圖1為按照橫向劃分子區(qū)域的并行模擬方法流程圖。
并行的物質(zhì)輸運(yùn)模擬方法在串行方法的基礎(chǔ)上,將物質(zhì)輸運(yùn)的模擬區(qū)域劃分為多個(gè)子區(qū)域,從而將方程C(x,y,z,t)的求解劃分為多個(gè)子求解 (式 (2)),并分別放置在多個(gè)不同的處理器上進(jìn)行運(yùn)算。在并行求解過程中,相鄰子求解之間需要交換后續(xù)求解需要的分區(qū)邊界數(shù)據(jù)
圖1 物質(zhì)輸運(yùn)模擬并行方法流程
根據(jù)物質(zhì)輸運(yùn)模擬的計(jì)算區(qū)域可以分塊進(jìn)行求解的特點(diǎn),本文采用單指令流多數(shù)據(jù)流 (single instruction streammultiple data stream,SIMD)方 式并 分 別 使用 MPI和OpenMP兩種并行計(jì)算技術(shù)對(duì)物質(zhì)輸運(yùn)方程求解的串行方法進(jìn)行并行化改造。由于MPI和OpenMP具有不同的特點(diǎn),下面對(duì)這兩種技術(shù)應(yīng)用于物質(zhì)輸運(yùn)方程求解的方法進(jìn)行對(duì)比說明。
1.3.1 MPI并行方式
消息傳遞是在分布式存儲(chǔ)系統(tǒng)上進(jìn)行并行計(jì)算的有效方法,MPI作為一種基于消息傳遞模型的程序庫(kù),提供了在多個(gè)進(jìn)程之間發(fā)送接收消息以及同步等功能。由于MPI易用性強(qiáng)且性能穩(wěn)定,因此其被廣泛應(yīng)用于集群系統(tǒng)當(dāng)中[8]。消息傳遞要經(jīng)過數(shù)據(jù)打包、傳送、消息拆包3個(gè)過程,時(shí)間開銷較大,所以在使用MPI設(shè)計(jì)并行程序時(shí),避免大量的消息傳遞是一個(gè)普遍原則[9]。使用MPI對(duì)物質(zhì)輸運(yùn)模塊進(jìn)行并行,關(guān)鍵在于如何有效的傳遞分區(qū)邊界處的數(shù)據(jù)。對(duì)計(jì)算區(qū)域進(jìn)行分塊后,各分區(qū)可以互相獨(dú)立的進(jìn)行計(jì)算,但分區(qū)邊界處數(shù)據(jù)的計(jì)算需要用到相鄰分區(qū)的計(jì)算結(jié)果,因此相鄰進(jìn)程需要通過消息對(duì)分區(qū)邊界處的數(shù)據(jù)進(jìn)行交換。假設(shè)有以下代碼:
按照i對(duì)計(jì)算區(qū)域進(jìn)行分塊后,多個(gè)進(jìn)程針對(duì)各自分塊的數(shù)據(jù)執(zhí)行以上代碼進(jìn)行并行計(jì)算。非邊界處的計(jì)算各進(jìn)程可以獨(dú)立完成,但在邊界處,由于計(jì)算array2(i)需要使用array1(i-1)的值,而array1 (i-1)的值位于上一個(gè)分區(qū),因此各進(jìn)程在計(jì)算完成array1數(shù)組以后需要將邊界處的數(shù)值通過MPI消息發(fā)送給相鄰的進(jìn)程。如圖2(a)所示,MPI版本的物質(zhì)輸運(yùn)模塊由多個(gè)位于不同節(jié)點(diǎn)計(jì)算機(jī)上的MPI進(jìn)程運(yùn)行,各進(jìn)程根據(jù)分配的子區(qū)域進(jìn)行求解。在計(jì)算的某些時(shí)刻,進(jìn)程i需要使用前面進(jìn)程i-1的邊界數(shù)據(jù),由于兩個(gè)進(jìn)程無法共享內(nèi)存空間,此時(shí)進(jìn)程i-1與進(jìn)程i需要分別使用MPI的消息發(fā)送和消息接收方法完成分區(qū)邊界數(shù)據(jù)的傳遞工作。
圖2 MPI(a)和OpenMP(b)并行方式對(duì)比
1.3.2 OpenMP并行方式
OpenMP是一種被廣泛使用的在共享存儲(chǔ)系統(tǒng)上進(jìn)行并行編程的標(biāo)準(zhǔn),它能夠通過在代碼中加入指令來控制程序在特定的位置進(jìn)行多線程的并行執(zhí)行。由于共享存儲(chǔ)體系結(jié)構(gòu)所具有的存儲(chǔ)共享這一特點(diǎn),使用OpenMP進(jìn)行并行程序設(shè)計(jì)時(shí)需要利用同步和鎖操作來保證內(nèi)存訪問的正確性[10]。同時(shí),避免開銷較大的同步和鎖操作的大量使用能夠提高系統(tǒng)的效率[11]。與MPI采用多進(jìn)程并行的方式不同,OpenMP采用多線程并行,各并行線程共享相同的一塊內(nèi)存,每個(gè)線程均可以對(duì)內(nèi)存中的每一個(gè)位置進(jìn)行讀寫操作,因此使用這種方法對(duì)物質(zhì)輸運(yùn)模塊進(jìn)行并行化時(shí),線程之間不需要對(duì)分區(qū)邊界數(shù)據(jù)進(jìn)行交換。物質(zhì)輸運(yùn)模塊內(nèi)部由多個(gè)循環(huán)構(gòu)成,OpenMP提供了相應(yīng)并行指令用于這種情景。假設(shè)有以下OpenMP并行代碼:
如以上代碼所示, “!$omp parallel do”指令告知編譯器此處代碼需要多線程并行工作完成,當(dāng)主線程執(zhí)行代碼到此處時(shí),會(huì)自動(dòng)生成多個(gè)并行的子線程,每個(gè)子線程執(zhí)行循環(huán)區(qū)間的一部分。由于多個(gè)并行線程共享相同的內(nèi)存空間,在分區(qū)邊界處計(jì)算array2(i)時(shí),線程可以直接訪問位于相鄰分區(qū)的array1(i-1),而不需要進(jìn)行邊界數(shù)據(jù)的交換。每個(gè)循環(huán)結(jié)束處的 “!$omp end parallel do”命令會(huì)進(jìn)行一次同步操作,因此會(huì)帶來一些時(shí)間開銷。如圖2(b)所示,OpenMP版本的物質(zhì)輸運(yùn)模塊與MPI版本相似,多個(gè)位于同一節(jié)點(diǎn)計(jì)算機(jī)上的OpenMP線程對(duì)不同分區(qū)的數(shù)據(jù)進(jìn)行處理。因?yàn)槎鄠€(gè)并行線程共享相同的內(nèi)存空間,線程i可以直接訪問前面線程i-1的邊界數(shù)據(jù),而不需要如MPI那樣通過消息傳遞進(jìn)行數(shù)據(jù)交換。
本論文分別將MPI版本并行程序和OpenMP版本并行程序放置于中國(guó)海洋大學(xué)環(huán)境科學(xué)與工程學(xué)院的多核集群計(jì)算機(jī)上運(yùn)行,并對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行對(duì)比分析。該集群計(jì)算機(jī)由20臺(tái)IBM HS21計(jì)算機(jī)組成,節(jié)點(diǎn)之間使用高速千兆網(wǎng)絡(luò)連接,集群具體配置信息見表1。為了便于更好的對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行分析,只選取應(yīng)用了并行計(jì)算的物質(zhì)輸運(yùn)模塊進(jìn)行研究,每種測(cè)試情景運(yùn)行5次,將最短的時(shí)間 (不計(jì)文件讀寫所用時(shí)間)作為最終結(jié)果。在對(duì)計(jì)算時(shí)間進(jìn)行分析的基礎(chǔ)上,同時(shí)對(duì)并行程序的加速比和效率進(jìn)行分析。并行程序的加速比由串行程序的計(jì)算時(shí)間與并行程序的計(jì)算時(shí)間這兩者的比值求得;在串行時(shí)間一定的情況下,加速比與并行時(shí)間成反比。并行效率等于加速比與核心數(shù)的比值,能夠反映核心的運(yùn)算能力是否被充分使用。本實(shí)驗(yàn)采用的計(jì)算區(qū)域?yàn)檫m用于膠州灣模擬的312×213×5規(guī)模的網(wǎng)格,為了進(jìn)行并行計(jì)算,我們將計(jì)算區(qū)域均勻劃分成1-8個(gè)子區(qū),每個(gè)區(qū)域分塊對(duì)應(yīng)一個(gè)計(jì)算核心,時(shí)間積分60000步。
表1 并行計(jì)算機(jī)配置概要
實(shí)驗(yàn)結(jié)果表明,本論文采用的物質(zhì)輸運(yùn)并行模擬方法產(chǎn)生的物質(zhì)濃度數(shù)據(jù)結(jié)果與串行方法的結(jié)果一致,據(jù)此可以證明并行方法的可靠性,圖3為以濃度圖形式對(duì)膠州灣物質(zhì)輸運(yùn)模擬結(jié)果進(jìn)行的對(duì)比。
圖4為MPI與OpenMP所用的計(jì)算時(shí)間對(duì)比圖,橫軸為使用的CPU核心個(gè)數(shù),縱軸為計(jì)算時(shí)間。從該圖中可以觀察到,隨著核心數(shù)目增加,MPI與OpenMP的計(jì)算速度逐漸加快,運(yùn)算時(shí)間逐漸減少。在使用8個(gè)核心進(jìn)行計(jì)算時(shí),MPI和OpenMP均達(dá)到計(jì)算速度的最高值,相對(duì)于串行分別減少83%和76%的計(jì)算時(shí)間。通過觀察MPI和OpenMP時(shí)間折線的后段,可以發(fā)現(xiàn)二者的計(jì)算速度增幅明顯放緩,對(duì)于MPI來說,這主要是由于增加的MPI進(jìn)程帶來的通信開銷造成的[12,13];對(duì)于OpenMP,主要原因是增加的線程數(shù)量帶來的同步開銷較大[14],對(duì)運(yùn)算效率造成了負(fù)面影響。
圖3 膠州灣物質(zhì)輸運(yùn)模擬結(jié)果濃度圖對(duì)比
圖4 MPI和OpenMP計(jì)算時(shí)間對(duì)比
圖5 MPI和OpenMP加速比對(duì)比
圖5、圖6反映的是MPI和OpenMP的并行加速比以及并行效率的情況。從圖5中可以觀察到,MPI和OpenMP在使用12個(gè)核心時(shí)加速比達(dá)到最高值5.95和4.19。隨著核心數(shù)目增加,MPI通信開銷和OpenMP線程間同步開銷使二者的加速比增長(zhǎng)幅度呈現(xiàn)明顯下降趨勢(shì)。從圖6中可以觀察到,MPI和OpenMP在使用2個(gè)核心時(shí)的并行效率達(dá)到最高值,分別為0.95和0.87。之后隨著核心數(shù)目的增加,二者的并行效率呈現(xiàn)明顯下降趨勢(shì)。雖然MPI和OpenMP在使用8個(gè)核心時(shí)的計(jì)算速度最高,計(jì)算用時(shí)最短,但此時(shí)的并行效率卻處于最底值位置,這說明MPI和OpenMP在使用更多的核心進(jìn)行計(jì)算時(shí),計(jì)算之外的開銷比重也隨之增加,從而導(dǎo)致了核心利用效率的降低[15]。
圖6 MPI和OpenMP并行效率對(duì)比
通過以上分析可以得出,在計(jì)算區(qū)域?yàn)?12×213×5這種規(guī)模的實(shí)驗(yàn)條件下,MPI的加速效果明顯優(yōu)于OpenMP,當(dāng)MPI使用8個(gè)核心時(shí)運(yùn)算速度達(dá)到最高值,相較于串行速度提高6倍。
本論文分別將MPI和OpenMP兩種類型的并行計(jì)算方法應(yīng)用于模擬海洋物質(zhì)輸運(yùn)的過程,并在多核心集群計(jì)算機(jī)系統(tǒng)上進(jìn)行了對(duì)比實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果表明,MPI的加速效果明顯優(yōu)于OpenMP,且最高運(yùn)算速度接近串行的6倍。由此看來,在這種計(jì)算規(guī)模下MPI更適合用來在多核心集群平臺(tái)上對(duì)海洋物質(zhì)輸運(yùn)的模擬過程進(jìn)行并行化。根據(jù)本研究的成果,今后將把MPI并行的物質(zhì)輸運(yùn)模擬方法應(yīng)用到有關(guān)海洋研究當(dāng)中,使其發(fā)揮更大的作用。
[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].海洋通報(bào),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的物質(zhì)輸運(yùn)方程數(shù)值格式研究 [J].海洋科學(xué)進(jìn)展,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).[陳昞睿,朱建榮,戚定滿.采用質(zhì)點(diǎn)跟蹤方法對(duì)物質(zhì)輸運(yùn)方程平流項(xiàng)數(shù)值格式的改進(jìn) [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).[王之元,楊學(xué)軍,周云.大規(guī)模MPI并行計(jì)算的可擴(kuò)展冗余容錯(cuò)機(jī)制 [J].軟件學(xué)報(bào),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).[潘巍,李戰(zhàn)懷,伍賽,等.基于消息傳遞機(jī)制的MapReduce圖算法研究 [J].計(jì)算機(jī)學(xué)報(bào),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ì)算系統(tǒng)編程環(huán)境的研究與實(shí)現(xiàn) [J].計(jì)算機(jī)科學(xué),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.