張玉春欣,馮魯彬,梁建國
(山東科技大學計算機科學與工程學院,山東青島 266590)
海冰模型[1]是由美國能源部[2]的洛斯阿拉莫斯國家實驗室負責開發和維護的[3],它是地球系統模型的重要組成部分。海冰是全球氣候變化最敏感的部分之一,其變化對全球氣候演變具有巨大影響[4]。十幾年來,海冰模型一直用來定量預測海冰的演變規律,為地球系統科學中諸多分支學科的相互融合提供平臺[5]。
近些年來,不少地球系統模型性能得到很大提升,但海冰模型未進行優化。因此,海冰模型性能逐漸成為制約地球系統模型性能的關鍵因素,所以對海冰模型進行性能調優有著重要意義[6]。在海冰模型模擬計算中,模擬規模通常會達到幾百至上千年,出于對模擬計算精確性和有效性考慮,時間步長在幾分鐘到幾小時之間,空間網格距離在幾公里到幾十公里不等,其計算量龐大、耗時長,對計算機軟硬件是相當大的挑戰[7]。如何利用超級計算機更高效地完成海冰模型的模擬計算,模擬各運行模式下的性能變化成為熱點。
目前,基于多核、眾核處理器技術的新型體系結構下的大型科學計算應用研究是高性能計算領域研究熱點[8],目標為有效提升科學研究效率,推動其在各領域的應用發展[9-10]。
曙光超級計算機作為通用x86 體系結構的超級計算機,尤其適合海冰模型這種龐大的計算密集型程序。雖然當今新型體系結構不斷出現,但是通用x86 體系結構的超級計算機依然是科研領域研究者使用最廣泛的超級計算機[11],因此在曙光超級計算機上對海冰模型進行性能調優研究具有非常重要的意義。
海冰模型作為一種復雜的有限差分網格點模型,由多種物理計算和動力學組成,其中包括海冰熱力學、動力學、δ-愛丁頓輻射過程等[12]。Balaprakash 等[13]對海冰模型的求解方法、動力學、熱力學過程的計算性能進行評估,證明海冰模型計算方法的有效性;陳宏博等[14]對CESM 中的有限差分算法采用多種方法進行優化,性能獲得提升;Fu等[15-17]根據申威眾核處理器的結構特點優化數據分配方式與模擬計算方程方法,對代碼進行重組,提高了地球系統模型的并行性;Xiao 等[18]針對大氣環流模式動力框架提出通信避免算法,不僅降低了通信頻率,還實現了通信的隱藏。
以上研究都是基于系統模型具體算法或者整個模擬計算過程的并行優化,但在超級計算機下對海冰模型自身的多種運算方式進行并行性能調優的研究還存在空白。
曙光超級計算機主要由高性能計算集群系統以及虛擬化系統組成,高性能計算集群系統基于曙光TC4600E 刀片平臺和W760-G20 服務器搭建完成。本文將海冰模型CICE 整體移植到曙光超級計算機上,進行相關性能調優研究。
曙光超級計算機雙路刀片的雙精度浮點計算能力為542.4 萬億次/s。計算刀片、登陸節點、并行存儲節點之間采用100GB EDR Infiniband 高速交換網絡互聯,單個高頻計算節點采用2 顆Intel Xeon E3-1240V5 CPU,每顆CPU4核心,主頻3.5GHz;單個多核計算節點采用2 顆Intel Xeon Gold 6132 CPU,每顆CPU14 核心,主頻2.6GHz。平臺并行結構拓撲圖如圖1 所示。

Fig.1 Structural topology of“Dawning”supercomputer圖1 曙光超級計算機并行結構拓撲圖
本研究選用海冰模型CICE v5.1 版本作為應用源程序。與之前版本相比,其采用了更靈活的模擬計算方法,有效提升了模擬速度、效率和精度。該版本支持獨立運行和全耦合兩種模擬計算方式。獨立運行模式的模擬計算,是將大氣與海洋的實際觀測數據作為海冰模型的強迫輸入,通過海冰模型相關計算步驟完成南北極中海冰區域體積、質量、熱力學等變量的模擬計算。全耦合運行模式的模擬計算是在海冰模型獨立運行模式基礎上,通過耦合器與地球系統模式中的大氣、陸地、海洋等部分進行數值傳輸與通信,協同完成地球系統模擬計算。
海冰模型的并行方案采用數據并行方法,不同的數據分割方法會對性能產生較大影響。7 種數據分割方法分別是:cartesian-slenderX1、cartesian-slenderX2、sectcart、cartesian-square、spacecurve、roundrobin、sectrobin[19]。
海冰模型運行過程需要多個環境協同完成,而大部分超級計算機是沒有配置這些依賴環境的,所以在曙光超級計算機上配置依賴庫環境。對依賴函數庫的安裝順序是zlib、HDF5、netCDF、netCDF-fortran,需按照這個順序進行安裝,否則無法成功安裝上述依賴函數庫。
海冰模型研究提供的開源強迫輸入數據只有精確度為3度的數據,這種輸入數據不僅精度低且只能運行海冰模型的3 種笛卡爾網格劃分方式,不能用于運行海冰模型全部7 種網格劃分方式。為對海冰模型性能進行全面調優,考慮到與大氣網格數據T62 格式兼容,使用雙線性插值方法對輸入網格進行預處理,利用NCAR 提供的NCL 研究工具將大氣網格數據T62 原始網格數據轉化生成1 度強迫輸入數據。
海冰模型中新數據的更新需要依賴上一次計算的數據,因此海冰模型初始化時需要在各個進程間建立通信,用于網格之間傳遞數據。但在實際運算過程中許多網格單元沒有海冰,更新沒有海冰區域的數據是毫無意義的。因此,在CICEv5.1 中引入掩碼功能,可以隨時修改需要更新數據的區域,以減少更新非海冰區域的數據通信開銷。圖2 中白色部分為沒有海冰的陸地部分,在計算時就可以通過掩碼將這部分數據屏蔽,不再更新這部分數據,減少了無海冰區域更新時傳遞的數據量,降低了通信開銷。

Fig.2 Land parts of sea ice圖2 海冰中的陸地部分

Fig.3 Schematic diagram of task block boundaries圖3 任務塊邊界
3.4.1 邊界數據更新原理
海冰模型中MPI 通信用于任務塊邊界數據的更新。為了支持有限差分計算,邊界數據的更新需要傳遞鄰居信息,每一層塊除邊界塊外有二維水平面上相鄰的8 個鄰居,圖3 展示了單個任務塊的邊界是如何與其他鄰居關聯的。當鄰居塊被分配給不同的MPI[19]進程計算時,通過MPI 消息傳遞方式在多個塊之間進行數據通信。
3.4.2 網格劃分方式
將海冰模型中的水平網格分解為二維任務塊實現并行化,劃分的任務塊被分配給不同MPI 進程以進行計算,每個MPI 進程可以分配多個任務塊。海冰模型有很多種網格劃分方式,每種劃分方式所需要的處理器形狀和劃分類型不同。在CICEv5.1 版本中網格劃分的主要類型有cartesian、sectcart、spacecurve、roundrobin、sectrobin。其中cartesian 根據分布類型對處理器形狀進一步細化為slenderX1、slenderX2、cartesian-square(square-ice 和square-pop)。本文討論了7 種網格劃分方式的優缺點,圖4 展示了slenderX1 的劃分方式。圖中橫坐標為i維,縱坐標為j維,不同顏色代表分配給每個任務塊的MPI 進程[4]。
slenderX1 只劃分i維,所以塊的縱橫比高、陰影區域多、通信數據量大,但鄰居數量固定,負載平衡好。slenderX2 方式的劃分如圖5 所示。與slenderX1 類似,區別是其在j維上劃分,所以j維上的長度短、陰影區小。
cartesian-square 劃分方式如圖6 所示。劃分方式分為兩種:①當j方向劃分的塊數大于i方向上劃分的塊數時,采用square-pop 的處理器形狀;②當i方向上劃分的塊數大于j方向上劃分的塊數時,采用square-ice 的處理器形狀。cartesian-square 對二維任務塊的大小有限制,但是幾個相鄰塊通??梢怨蚕硐嗤腗PI 進程。任務塊的鄰居少,陰影區小,有助于通信性能提升。缺點是會產生物理上緊密相連的塊,這樣會導致海冰的負載平衡很差。

Fig.4 SlenderX1圖4 slenderX1

Fig.5 SlenderX2圖5 slenderX2

Fig.6 Catesiansquare圖6 catesiansquare
sectcart劃分方式如圖7所示,是在cartesian-square 劃分方式基礎上將j維度劃分成二維任務塊,又將每個二維任務塊在j 維上平均劃分成4 個小的二維任務塊,并將其分配給不同的MPI 進程進行計算。此種劃分方式可以將不同區域的計算任務盡可能劃分給同一個MPI 進程,提高了計算性能。
圖8給出spacecurve的劃分方式。i、j維都劃分,此種劃分方式需要定義任務塊大小,以保證劃分后塊的大小一致。將這些任務塊沿著Hilbert-m-Peano-Cinco 空間曲線分配給每個進程。這種劃分方式將不需要計算的無海冰區域盡可能劃分給同一個進程,并且每個任務塊的鄰居數量盡量少。
roundrobin劃分方式如圖9所示。i維和j維都劃分,這種劃分方式在將無海冰區域的陸地部分剔除之后,以在i維輪詢的方式將任務塊分配給各個MPI 進程,這樣會帶來負載均衡,但會導致鄰居任務的數量較多,通信代價高。sectrobin 劃分的工作方式類似于roundrobin 劃分,劃分方式如圖10 所示。區別在于它盡量將網格上不同位置的任務塊分配到同一進程中。

Fig.7 Sectcart圖7 sectcart

Fig.8 Spacecurve圖8 spacecurve

Fig.9 Roundrobin圖9 roundrobin

Fig.10 Sectrobin圖10 sectrobin
基于海冰模型的7 種網格劃分方式進行性能調優研究,將上述x與y維度的精確度為320×384 的1 度強迫數據作為輸入,設置海冰模型迭代周期為10 天。在曙光x86 超級計算機上對海冰模型在不同進程數下對典型海冰模型劃分方式slenderX2 的塊大小進行調優,驗證海冰模型的可靠性。參數如表1 所示,結果如圖11 所示。

Table 1 The first experimental configuration of“Dawning”platform表1 曙光平臺第一次實驗配置

Fig.11 The first experimental test of“Dawning”platform圖11 曙光平臺第一次實驗測試
從圖11 可以看出,在曙光x86 超級計算機上海冰模型slenderX2 的劃分方式在每個進程分配一個計算任務時,隨著進程數的增加,劃分任務塊減小時運行時間持續下降,性能最高提升了8.32 倍。
繼續對海冰模型性能調優,第二次試驗對海冰模型7種劃分方式下的性能進行更加細致的測試實驗。測試進程數為320,具體參數如表2 所示,+mh 代表開啟掩碼(mask halo)。

Table 2 “Dawning”x86 platform second experiment configuration mode(MPI process number=320)表2 曙光x86 平臺第二次實驗配置方式(MPI 進程數=320)
曙光x86 平臺第二次實驗配置方式的運行總時間如圖12 所示。
在上述實驗中對海冰模型的5 個主要求解過程的時間占用情況進行統計,如圖13 所示。5 個求解過程為:①海冰水平方向運動(Advectn;②海冰在厚度空間的運動(Cat Conv);③機械重分布過程(Ridging);④動力學EVP 過程(Dynamics);⑤熱力學過程(Column)。

Fig.12 Schematic diagram of the total running time of the second experiment of“Dawning”x86 platform圖12 曙光x86 平臺第二次實驗總運行時間

Fig.13 Schematic diagram of the main solution process occupation time in different experiment type圖13 不同實驗類型中主要求解過程占用時間
在上述實驗中,掩碼的開啟很好地改進了海冰模型性能,每種劃分方式開啟掩碼之后運行時間都顯著降低。sectrobin(8*6)的劃分方式是所有劃分方式中效果最好的,在320 進程時性能達到最佳,開啟掩碼前執行時間為30.15s,開啟掩碼之后執行時間為22.41s,性能提升了25.67%。從圖14 可以看出,開啟掩碼與不開啟掩碼相比,每個模塊的運行時間均有降低。

Fig.14 Comparison of the occupancy time of each module between sectrobin open mask and unopen mask圖14 sectrobin 開啟掩碼與不開啟掩碼各模塊占用時間對比
在上述實驗基礎上,在320 進程下使用slenderX2 劃分方式,對海冰模型任務塊大小和任務數量進行調優。選擇slenderX2 的原因是每個進程所要計算的任務塊數量隨著y維度任務塊線性減小呈線性增加趨勢,具體配置方式如表3 所示。

Table 3 The third experimental configuration of“Dawning”platform表3 曙光平臺第3 次實驗配置方式
第3 次實驗總運行時間如圖15 所示。

Fig.15 Schematic diagram of the total time of the third experimental experiment of the“Dawning”x86 platform圖15 曙光x86 平臺第3 次實驗總時間
通過以上實驗結果可以看出,每個MPI 進程分配4 個任務塊時達到最佳性能,運行時間為22.09s??傮w變化趨勢為:當每個進程分配1~4 個任務時,運行時間不斷減小,性能提升約為10.2%~16.7%。當每個進程分配4~32 個任務時,運行時間呈現不斷增加的趨勢,運行性能降低約為11.9%、31.3%、80.1%。由此可以看出,從每個進程分配4~16 個任務塊的過程中,海冰模型的運算效率下降,并且當每個進程分配32 個任務塊時,運行時間急劇提升。對于任何劃分方式,在合適的任務塊大小和計算任務分配下,通常都有一個最佳性能的分配方式。進行第4 次測試,具體配置如表4 所示。實驗總時間如圖16 所示。

Table 4 The fourth experimental configuration method of“Dawning”x86 platform表4 曙光x86 平臺第4 次實驗配置方式

Fig.16 Schematic diagram of the total time of the fourth experiment of“Dawning”x86 platform圖16 曙光x86 平臺第4 次實驗總時間
由圖16 可以看出,在進程數較低時,如16、64,即便是roundrobin 或sectrobin 的劃分方式,每個進程分配8 個任務塊時的性能也要優于cartesian 劃分方式下的slenderX1、slenderX2 中每個進程分配1 個任務塊時的性能。結合roundrobin 與sectrobin 的劃分方式,分析得到此方式下進程間具有更好的負載平衡。而在進程數較高時,比如320,進程之間的通信也相應增加,邊界更新時所花費的開銷變大,此時在相同的任務數下,sectrobin 與slenderX1 劃分方式相比,依然是sectrobin 的劃分方式性能更佳,性能差別約為11%,差距逐漸縮小。因為在進程數增加的同時,進程之間的通信也在不斷增大。在320 進程下,slenderX2 劃分方式中開啟掩碼與不開啟掩碼對比,性能提升約為26%。
本文在曙光超級計算機上對海冰模型優化進行了研究。在分析海冰模型計算以及網格劃分、任務分配、掩碼功能原理等基礎上,通過對海冰模型的7 種網格劃分方式分析,調整不同的MPI 進程數以及海冰模型中掩碼功能的開啟等,對海冰模型性能提升進行研究分析。通過性能調優,在曙光超級計算機上性能最大可提升8.32 倍。未來可以考慮將海冰模型移植到異構超算平臺如CPU+GPU 架構或“神威_太湖之光”超級計算機上,實現異構并行加速。