黃偉建,王 鑫,韓院彬
(河北工程大學(xué) 信息與電氣工程學(xué)院,河北 邯鄲056038)
?
并行I/O技術(shù)在海洋數(shù)值模式中的應(yīng)用研究
黃偉建,王 鑫,韓院彬
(河北工程大學(xué) 信息與電氣工程學(xué)院,河北 邯鄲056038)
摘要:在海洋數(shù)值模擬過程中,隨著計(jì)算區(qū)域的擴(kuò)大以及計(jì)算精度的提升,大量數(shù)據(jù)輸出使得I/O效率成為系統(tǒng)整體性能提升的一個(gè)瓶頸。針對(duì)這一問題,使用并行I/O技術(shù)對(duì)系統(tǒng)的輸出模塊進(jìn)行優(yōu)化,并與傳統(tǒng)的幾種串行I/O方式在不同節(jié)點(diǎn),以及不同計(jì)算規(guī)模下進(jìn)行性能比較。通過實(shí)驗(yàn)研究數(shù)據(jù),對(duì)不同I/O方式的不同特點(diǎn)和不同適用場(chǎng)景進(jìn)行分析,證明在海洋數(shù)值模式中使用并行I/O技術(shù)切實(shí)可行,并且I/O速率得到大幅度提升。
關(guān)鍵詞:并行I/O;海洋數(shù)值模式;并行計(jì)算;消息傳遞接口;I/O
氣候變化引起的異常大風(fēng)、降水事件頻發(fā)對(duì)我國(guó)近海生態(tài)系統(tǒng)和沿海經(jīng)濟(jì)、社會(huì)可持續(xù)發(fā)展帶來了多重壓力和嚴(yán)峻考驗(yàn)。由于海洋運(yùn)動(dòng)受到一定的物理化學(xué)定律支配,因此可以通過方程組予以定量表示,給定邊界條件并通過數(shù)值模式可以準(zhǔn)確客觀地由當(dāng)前狀態(tài)模擬、預(yù)測(cè)出未來時(shí)刻的狀態(tài)[1]。海洋數(shù)值模式由于其龐大的計(jì)算區(qū)域以及復(fù)雜的求解過程,因此具有浩大的計(jì)算規(guī)模[2-3]。采用并行計(jì)算方能有效提升計(jì)算效率,并在預(yù)期時(shí)間內(nèi)完成計(jì)算任務(wù)?,F(xiàn)階段,海洋數(shù)值模式中的計(jì)算部分已實(shí)現(xiàn)了多節(jié)點(diǎn)并行計(jì)算,但是在I/O模塊依然采用串行方式。因此,基于高性能并行計(jì)算技術(shù)對(duì)當(dāng)前海洋數(shù)值模式中的I/O方式進(jìn)行優(yōu)化,提高模式數(shù)據(jù)存儲(chǔ)效率,便成為提升系統(tǒng)整體性能的一個(gè)關(guān)鍵所在[4-6]。美國(guó)地球物理流體力學(xué)實(shí)驗(yàn)室采用的并行I/O方法為:N個(gè)進(jìn)程并行運(yùn)行,最終生成N個(gè)結(jié)果文件,在后續(xù)的程序運(yùn)行過程中將N個(gè)文件進(jìn)行合并;美國(guó)國(guó)家自然科學(xué)基金會(huì)以及美國(guó)國(guó)家海洋大氣局共同資助的WRF數(shù)值模式系統(tǒng),通過設(shè)置專用I/O進(jìn)程的方法實(shí)現(xiàn)并行計(jì)算的數(shù)據(jù)訪問。我國(guó)在海洋數(shù)值模式中應(yīng)用并行I/O技術(shù)還較為罕見,多數(shù)仍采用傳統(tǒng)的串行I/O方式或主從模式。并且,在同一個(gè)硬件和實(shí)際應(yīng)用環(huán)境中針對(duì)不同I/O方式進(jìn)行詳細(xì)比較的例子也較為少見。本文針對(duì)海洋數(shù)值模式中的海洋水質(zhì)模塊,在課題組前期已完成計(jì)算模塊并行化[7]的基礎(chǔ)上,對(duì)I/O模塊的算法進(jìn)行優(yōu)化,以提升數(shù)據(jù)的訪問效率,從而進(jìn)一步提升系統(tǒng)整體運(yùn)行效率。
1 I/O技術(shù)應(yīng)用分析
1.1 系統(tǒng)中I/O模塊的算法分析
由于MPI并行方式屬于分布式計(jì)算的一種,其計(jì)算結(jié)果分布式存儲(chǔ)在各個(gè)計(jì)算節(jié)點(diǎn)中。傳統(tǒng)的并行環(huán)境下的輸出方式主要有以下幾種:一是參與計(jì)算的通信域內(nèi)的各個(gè)進(jìn)程在計(jì)算完成后直接輸出計(jì)算結(jié)果到文件,這樣N個(gè)進(jìn)程將會(huì)輸出N個(gè)獨(dú)立的文件,在后期需要對(duì)這些獨(dú)立的文件進(jìn)行進(jìn)一步合并處理,顯然效率將會(huì)大大降低;二是采取等待同步(Call MPI_Barrier)的方式,各個(gè)進(jìn)程以追加寫入的方式依次將文件串行寫入到同一個(gè)文件中;三是采用收集(Gather)的方式將所有進(jìn)程的數(shù)據(jù)通過消息傳遞收集到根進(jìn)程,最后由根進(jìn)程進(jìn)行輸出[8-10]。
上述三種I/O方式均使用編程環(huán)境提供的相應(yīng)I/O函數(shù)。第一種方法的并行度是最高的,但是由于需要后期的合并處理,不但容易在文件合并過程中產(chǎn)生錯(cuò)誤,而且也會(huì)消耗大量的時(shí)間;第二種方法雖然輸出的為完整的文件,但由于采用了等待同步的方式來強(qiáng)制每一時(shí)刻只有一個(gè)進(jìn)程對(duì)文件進(jìn)行I/O操作,并行度被大大降低,在等待同步(Call MPI_Barrier)時(shí)因?yàn)轭l繁阻塞通信域內(nèi)所有進(jìn)程,也會(huì)消耗掉大量時(shí)間;第三種方法多用于采用主從模式的并行程序,但會(huì)產(chǎn)生較大的通信量,并且根進(jìn)程會(huì)有較大的I/O負(fù)擔(dān)。當(dāng)數(shù)據(jù)量較為巨大時(shí),通信速率會(huì)成為其系統(tǒng)整體性能提升的一個(gè)瓶頸,并且在本質(zhì)上依然是串行I/O方式。
1.2 技術(shù)方法
(1)系統(tǒng)模式結(jié)構(gòu)及I/O特點(diǎn)
近海生態(tài)環(huán)境預(yù)評(píng)估系統(tǒng)采用SPMD并行編程模型,現(xiàn)階段為基于MPI的并行方法進(jìn)行實(shí)現(xiàn),采用Fortran語言進(jìn)行編寫。系統(tǒng)的主要結(jié)構(gòu)如圖1所示,本研究工作主要從應(yīng)用層角度針對(duì)系統(tǒng)的數(shù)據(jù)輸出模塊進(jìn)行優(yōu)化操作。
在本系統(tǒng)中,一個(gè)階段的計(jì)算結(jié)束后會(huì)產(chǎn)生密集的I/O請(qǐng)求將計(jì)算結(jié)果輸出到文件。以膠州灣實(shí)驗(yàn)區(qū)域的模擬計(jì)算為例,進(jìn)行48 h的生態(tài)環(huán)境數(shù)值模擬,每完成3 600次的迭代計(jì)算進(jìn)行一次輸出。在當(dāng)前實(shí)驗(yàn)區(qū)的計(jì)算規(guī)模下(159×185個(gè)網(wǎng)格)每個(gè)文件約為5 MB大小,共計(jì)約為240 MB。如果計(jì)算區(qū)域擴(kuò)大200倍,則每個(gè)文件大小約為1 GB,48 h的數(shù)值模擬將產(chǎn)生約48 GB的數(shù)據(jù)量。若進(jìn)行兩個(gè)月的數(shù)值模擬計(jì)算,總數(shù)據(jù)量將達(dá)到1.4 TB。未來在投放使用后,隨著計(jì)算精度和生態(tài)過程的復(fù)雜度的提升,以及計(jì)算區(qū)域的擴(kuò)大,都將導(dǎo)致模式中輸出數(shù)據(jù)量的進(jìn)一步激增。由于模式中目前采用串行I/O方式,提高數(shù)據(jù)輸出效率成為系統(tǒng)整體效率提升的一個(gè)關(guān)鍵。
(2)模式中數(shù)據(jù)格式分析
模式的最終輸出文件以DAT格式保存,在文件內(nèi)部每行有33列,每個(gè)文件的首行為標(biāo)題行,第一至四列為該數(shù)據(jù)點(diǎn)在整體計(jì)算網(wǎng)格內(nèi)的坐標(biāo)以及其經(jīng)緯度坐標(biāo)值。后面29列則為不同檢測(cè)元素的參數(shù)值。在數(shù)據(jù)輸出時(shí),根據(jù)潮汐變換模擬出當(dāng)前時(shí)刻該數(shù)據(jù)點(diǎn)的干濕情況(是否因海水漲落露出漫灘)來決定是否輸出該數(shù)據(jù)點(diǎn)。在當(dāng)前實(shí)驗(yàn)區(qū)域每模擬1 h的輸出量包含約13 000左右個(gè)數(shù)據(jù)點(diǎn)。由于采取并行計(jì)算技術(shù)對(duì)計(jì)算區(qū)域進(jìn)行了網(wǎng)格劃分,這些數(shù)據(jù)點(diǎn)的數(shù)據(jù)分布式存儲(chǔ)在各個(gè)進(jìn)程中。
(3)系統(tǒng)開發(fā)環(huán)境
本系統(tǒng)運(yùn)行環(huán)境配置如表1所示。
表1 集群配置概要
(4)應(yīng)用并行I/O需要解決的主要問題
由于輸出數(shù)據(jù)場(chǎng)中數(shù)據(jù)的分布式存儲(chǔ),導(dǎo)致數(shù)據(jù)在內(nèi)存中存放順序和最終文件需要的順序存在一些差異。在輸出數(shù)據(jù)時(shí)需要確保各個(gè)進(jìn)程中數(shù)據(jù)在最終文件中的順序與計(jì)算網(wǎng)格之間正確對(duì)應(yīng),以保證最終輸出數(shù)據(jù)場(chǎng)的正確性。
使用并行I/O方式輸出會(huì)將內(nèi)存中的數(shù)值類型數(shù)據(jù)以二進(jìn)制碼格式直接輸出到文件,最終輸出文件為二進(jìn)制文件,在不進(jìn)行格式轉(zhuǎn)化或者使用專用的數(shù)據(jù)查看工具的情況下,并不能直接讀取或查看數(shù)據(jù)的值。這將給之后的部分工作帶來一些麻煩,這與我們所追求的高效運(yùn)行便有些背道而馳了。因此需要解決系統(tǒng)輸出數(shù)據(jù)格式與并行I/O之間的兼容問題,保證輸出文件與原文件格式上的一致性。
2 實(shí)驗(yàn)設(shè)計(jì)與算法實(shí)現(xiàn)
實(shí)驗(yàn)區(qū)域膠州灣位于黃海中部、山東半島南岸,介于東經(jīng)120°04′~120°23′、北緯35°58′~36°18′之間。其整體形狀類似橢圓,東西之間寬約27.78 km,南北之間長(zhǎng)約33.336 km(低潮位),總的面積達(dá)446 km2,劃分為159×185個(gè)計(jì)算網(wǎng)格,垂直5層,積分步長(zhǎng)1 s,積分48 h(172 800步)。當(dāng)前輸出頻率為每完成3 600步積分輸出一次。
2.1 三種串行I/O模式的實(shí)現(xiàn)
阻塞(Barrier)模式在每個(gè)進(jìn)程的輸出模塊后加入Call MPI_Barrier語句進(jìn)行強(qiáng)制同步等待,阻止調(diào)用直到通信域內(nèi)所有進(jìn)程完成調(diào)用,控制各個(gè)進(jìn)程按照計(jì)算網(wǎng)格劃分的順序依次輸出數(shù)據(jù),并保證每個(gè)時(shí)刻只有一個(gè)進(jìn)程對(duì)文件進(jìn)行操作,從而避免寫入的混亂。收集(Gather)模式則在輸出之前通過調(diào)用MPI的MPI_Gather函數(shù)將所有進(jìn)程需要輸出的數(shù)據(jù)按順序通過進(jìn)程之間的通信收集到root進(jìn)程,最后由root進(jìn)程進(jìn)行輸出。分開輸出模式則不進(jìn)行任何控制操作,由各個(gè)進(jìn)程直接將結(jié)果輸出到彼此獨(dú)立的文件中。
2.2 并行I/O模式的實(shí)現(xiàn)
并行I/O模式使用設(shè)置視口(Set_View)的方式,通過定義每一個(gè)進(jìn)程在文件中的視口,使得各個(gè)進(jìn)程可以通過視口對(duì)文件并行操作。首先通過分析每個(gè)文件的內(nèi)部數(shù)據(jù)排列,計(jì)算出了每輸出一行數(shù)據(jù)需要的文件指針的偏移量(410 byte);然后通過判定數(shù)據(jù)點(diǎn)干濕狀況確定每個(gè)進(jìn)程需要輸出的數(shù)據(jù)點(diǎn)個(gè)數(shù),并通過MPI的組收集(Gatherv)方式將每一個(gè)進(jìn)程內(nèi)的統(tǒng)計(jì)數(shù)據(jù)傳遞到其余進(jìn)程的專用數(shù)組中,以控制每個(gè)進(jìn)程在文件中視口的偏移量,既要保證不與其它進(jìn)程產(chǎn)生文件地址上的沖突,同時(shí)也不能占用多余的空間,在各視口中,每個(gè)進(jìn)程輸出采用指定偏移方式控制數(shù)據(jù)在文件中的位置,保證數(shù)據(jù)正確的同時(shí),也提高了尋址效率;接著將所有數(shù)值數(shù)據(jù)進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,并保存到字符數(shù)組中,以最小的時(shí)間代價(jià)實(shí)現(xiàn)數(shù)據(jù)格式的兼容性;最后通過通信域內(nèi)的所有進(jìn)程并發(fā)操作,將數(shù)據(jù)輸出到各自的文件視口中,完成數(shù)據(jù)的輸出,并且保證輸出結(jié)果的正確性。
2.3 數(shù)據(jù)正確性驗(yàn)證
將最后輸出的文件用驗(yàn)證程序讀入內(nèi)存,并與原始程序的輸出結(jié)果進(jìn)行逐個(gè)單元數(shù)據(jù)的數(shù)值對(duì)比,保證輸出結(jié)果的正確性以及數(shù)據(jù)格式的一致性。
3 效率測(cè)試及分析
上述四種I/O方式分別在2、4、8、16個(gè)計(jì)算節(jié)點(diǎn)的規(guī)模下運(yùn)行3次,統(tǒng)計(jì)時(shí)間為整個(gè)輸出模塊的運(yùn)行時(shí)間,取中間值結(jié)果為最終結(jié)果(見圖2~圖5)。為了測(cè)試較大規(guī)模數(shù)據(jù)下不同I/O方式的效率,將計(jì)算區(qū)域擴(kuò)大200倍并使用8個(gè)節(jié)點(diǎn)運(yùn)行,并記錄各模式的時(shí)間消耗(見圖6)。其中,并行I/O模式的時(shí)間取參與運(yùn)算進(jìn)程中時(shí)間最長(zhǎng)者為有效時(shí)間,收集模式和分開輸出模式I/O方式則將各進(jìn)程時(shí)間相加作為有效時(shí)間。阻塞模式由于阻塞同步,最終有效時(shí)間綜合了串行輸出與阻塞等待兩部分時(shí)間。
對(duì)比圖2~圖5可以發(fā)現(xiàn),盡管參與計(jì)算的節(jié)點(diǎn)數(shù)不同,并行I/O模式的輸出時(shí)間非常穩(wěn)定,并且進(jìn)程數(shù)越多越具有效率上的優(yōu)勢(shì)。阻塞模式和收集模式相對(duì)于并行I/O模式的總輸出時(shí)間倍數(shù)如表2所示:
通過數(shù)據(jù)可以發(fā)現(xiàn),阻塞模式正如所預(yù)計(jì)一樣,由于阻塞等待以及串行I/O,消耗時(shí)間是最多的,并且隨著進(jìn)程數(shù)的增加效率呈遞減趨勢(shì)。收集模式則在進(jìn)程數(shù)較少時(shí)具有一定的優(yōu)勢(shì),隨著進(jìn)程數(shù)的增加,通信開銷逐步增大,導(dǎo)致效率逐漸降低。分開輸出模式在此只起到一定的參照作用(可以作為串行I/O最理想的狀況),因?yàn)槠漭敵鼋Y(jié)果仍需要后期的合并處理,所以一般不采用這種方式進(jìn)行I/O操作。
從圖6的數(shù)據(jù)可以看出在大量數(shù)據(jù)輸出的情況下,阻塞模式已經(jīng)完全不能滿足高性能的需求,阻塞模式完成每段積分輸出時(shí)間約450 s左右;收集模式約55 s左右,I/O消耗已經(jīng)成為降低系統(tǒng)的整體性能的一個(gè)嚴(yán)重瓶頸。收集模式則由于需要大量的數(shù)據(jù)傳遞,通信開銷巨大,且由于只由一個(gè)進(jìn)程進(jìn)行I/O操作,又進(jìn)一步加劇了時(shí)間消耗;而并行I/O模式則由于由多個(gè)進(jìn)程同時(shí)進(jìn)行I/O操作,速率得到大幅提升,并且在本系統(tǒng)中并行I/O采取了指定地址偏移寫入,而不用每次寫入前都進(jìn)行尋址操作,也減少了時(shí)間開銷。而在其余三種I/O中,由于使用編程語言中的語句輸出函數(shù)進(jìn)行逐行循環(huán)輸出,每次調(diào)用輸出函數(shù)時(shí)都需要進(jìn)行尋址操作。
表2 不同I/O模式的總輸出時(shí)間比
節(jié)點(diǎn)數(shù)量阻塞模式收集模式2節(jié)點(diǎn)3.5倍1.06倍4節(jié)點(diǎn)14.43倍3.33倍8節(jié)點(diǎn)39.6倍6.45倍16節(jié)點(diǎn)80.34倍11.51倍8節(jié)點(diǎn)(200倍計(jì)算量)77.14倍6.93倍
4 結(jié)論
文章提出的并行I/O模式,時(shí)間消耗最少,且效率穩(wěn)定,隨著節(jié)點(diǎn)的遞增可以保持良好的加速比。但在編寫并行I/O程序時(shí)比較復(fù)雜,需要對(duì)文件系統(tǒng)有詳細(xì)的了解方能在保證數(shù)據(jù)正確的前提下成功應(yīng)用。
參考文獻(xiàn):
[1]穆望舒.海洋數(shù)值預(yù)報(bào)產(chǎn)品綜合處理平臺(tái)開發(fā)研究[D].上海:華東師范大學(xué),2014.
[2]GUO CHENG,LU LIU,NING JING,et al.General purpose optimization method for parallelization of digital terrain analysis based on cellular automata [J].Computers & Sciences,2012,45(8):57-67.
[3]李 亮,聶瑞華.高性能計(jì)算平臺(tái)的I/O性能測(cè)試與分析[J].計(jì)算機(jī)與現(xiàn)代化,2011,29(5):160-164 .
[4]董文睿,劉光明,劉 欣.高強(qiáng)度I/O的應(yīng)用對(duì)并行存儲(chǔ)系統(tǒng)的挑戰(zhàn)和解決方法研究[J].計(jì)算機(jī)研究與發(fā)展,2012,49(Z1):47-52.
[5]晏益慧,張 輝.高性能計(jì)算機(jī)性能評(píng)測(cè)基準(zhǔn)HPCC 應(yīng)用研究[J].計(jì)算機(jī)工程與科學(xué),2009,31(1):279-282.
[6]于忠亮.并行計(jì)算中的I/O問題研究[D].呼和浩特:內(nèi)蒙古大學(xué),2010.
[7]HUANG WEIJIAN,NIU PEI,DU WEI.Technology to water quality forecasting model of Jiao Zhou Bay [J].World Journal of Engineering,2011,12(4):395-399.
[8]DENNIS J M,EDWARDS J,LOY R,et al.An application-level parallel I/O Library for Earth system models [J].International Journal of High Performance Computing Applications,2012,26(1):43-53.
[9]張武生,薛 巍,李建江,等.MPI并行程序設(shè)計(jì)實(shí)例教程[M].北京:清華大學(xué)出版社,2009.
[10]周建鑫,陳 犖,熊 偉,等.地理柵格數(shù)據(jù)并行I/O的研究與實(shí)現(xiàn)[J].地理信息世界,2013,20(6):62-65.
(責(zé)任編輯王利君)
Study and application of parallel I/O technology in numerical ocean model
HUANG Wei-jian, WANG Xin, HAN Yuan-bin
(School of Information Science and Electrical Engineering, Hebei University of Engineering, Hebei Handan 056038, China)
Abstract:In the processes of ocean numerical simulation, with the increase in the calculation domain as well as the requirement of higher accuracy, a dramatic amount of data output make the I/O efficiency become a bottleneck of the whole system performance. To solve this problem, the parallel I/O technology was used in this study to optimize the output module, and the comparison with the traditional serial I/O methods under various numbers of computing nodes and various computing scales was conducted. Experimental results demonstrate that the proposed method significantly reduces the execution time of output module.
Key words:parallel I/O; ocean numerical models; parallel computing; MPI;I/O
中圖分類號(hào):TP391.9
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1673-9469(2016)01-0086-05
doi:10.3969/j.issn.1673-9469.2016.01.019
作者簡(jiǎn)介:黃偉建(1964-),男,山西交口人,博士,教授,CCF會(huì)員(E200038566M),研究方向?yàn)橛?jì)算機(jī)應(yīng)用。
基金項(xiàng)目:海洋公益性行業(yè)科研專項(xiàng)經(jīng)費(fèi)資助項(xiàng)目(201205018);河北省自然科學(xué)基金資助項(xiàng)目(F2015402077)
收稿日期:2015-11-02