摘要:主要對并行計算的編程模型進(jìn)行了研究,包括 MPI 和 OpenMP 兩種編程模型,同時提出了一種層次化混合編程模型。并以計算 π 的問題為例,用 C 語言設(shè)計了混合編程模型下的程序,在以多核處理器作為節(jié)點(diǎn)的曙光 TC5000 集群上對三種編程模型下的求 π 程序進(jìn)行了實驗,同時將實驗結(jié)果進(jìn)行了性能分析和比較。結(jié)果表明該混合并行算法具有更好的擴(kuò)展性和加速比。
關(guān)鍵詞:層次化;混合編程;多核集群;性能分析
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2013)10-2349-04
隨著社會對計算機(jī)性能的要求越來越高,對高速并行計算的應(yīng)用越來越廣泛,多核集群系統(tǒng)得到了飛速的發(fā)展。現(xiàn)在的并行計算機(jī)體系結(jié)構(gòu)中絕大部分都是集群體系結(jié)構(gòu),并且大多數(shù)的集群節(jié)點(diǎn)是多核 SMP。因此多核集群系統(tǒng)具有一下特點(diǎn):每一個節(jié)點(diǎn)都是一個共享存儲的多處理機(jī),而節(jié)點(diǎn)間是分布式的內(nèi)存結(jié)構(gòu),它結(jié)合了基于分布式存儲和基于共享存儲的處理器的優(yōu)點(diǎn)。因此在多核集群系統(tǒng)上可以進(jìn)行多種并行程序設(shè)計和實現(xiàn),包括可以在節(jié)點(diǎn)間執(zhí)行的基于消息傳遞的純 MPI 編程模型,可以在節(jié)點(diǎn)內(nèi)(多核 SMP)執(zhí)行的基于共享內(nèi)存的OpenMP 編程模型,以及 MPI+OpenMP 的混合編程模型。
本文將對以上提到的三種并行編程模型進(jìn)行研究,并對計算 π 的算法分別進(jìn)行了三種編程模型的程序設(shè)計,最后用以多核處理器作為節(jié)點(diǎn)的曙光 TC5000 作為實驗工具,對所設(shè)計的程序進(jìn)行實現(xiàn),并進(jìn)行了性能比較。
1 MPI編程模型和OpenMP 編程模型
在并行計算領(lǐng)域內(nèi),主要的并行編程模型有三類模型:數(shù)據(jù)并行、消息傳遞、共享變量。其中基于消息傳遞的 MPI 編程模型和基于共享變量的 OpenMP 編程模型是最為流行的并行編程模型。
1.1 MPI 編程模型
消息傳遞界面 MPI (Message Passing Interface) 是一種消息傳遞接口,是目前國內(nèi)外最主流的編程模型之一。并行語言 MPI 庫可以被 FORTRAN77、C、FORTRAN90、C++ 調(diào)用,MPI 允許靜態(tài)任務(wù)調(diào)度,顯示并行提供了良好的性能和移植性,用 MPI 編寫的程序可直接在多核集群上運(yùn)行[1]。在集群系統(tǒng)中,集群的各節(jié)點(diǎn)之間可以采用 MPI 編程模型進(jìn)行程序設(shè)計,每個節(jié)點(diǎn)都有自己的內(nèi)存,可以對本地的指令和數(shù)據(jù)直接進(jìn)行訪問,各節(jié)點(diǎn)之間通過互聯(lián)網(wǎng)絡(luò)進(jìn)行消息傳遞,這樣設(shè)計具有很好的可移植性,完備的異步通信功能,較強(qiáng)的可擴(kuò)展性等優(yōu)點(diǎn)。
MPI 模型存在一些不足,包括:程序的分解、開發(fā)和調(diào)試相對困難,而且通常要求對代碼做大量的改動;通信會造成很大的開銷,為了最小化延遲,通常需要大的代碼粒度[2];細(xì)粒度的并行會引發(fā)大量的通信;動態(tài)負(fù)載平衡困難;并行化改進(jìn)需要大量地修改原有的串行代碼,調(diào)試難度比較大[3]。
1.2 OpenMP 編程模型
2.2 MPI 和 OpenMP 混合編程的優(yōu)勢
1)降低通信開銷
單獨(dú)采用 MPI 模型時,節(jié)點(diǎn)間的進(jìn)程需要消息傳遞,而混合模型中,節(jié)點(diǎn)內(nèi)部采用共享存儲的方式進(jìn)行訪問,這樣就可以減少所需的進(jìn)程數(shù)量,即減少了節(jié)點(diǎn)間的通信次數(shù)從而降低通信開銷。
2)有效的改善 MPI 代碼可擴(kuò)展性
因負(fù)載均衡的原因 MPI 代碼不易進(jìn)行擴(kuò)展,它的一些不規(guī)則的應(yīng)用都存在負(fù)載不均衡問題[7],采用混合編程模式,能夠?qū)崿F(xiàn)更好的并行粒度。MPI 僅僅負(fù)責(zé)結(jié)點(diǎn)間的通信,實行粗粒度并行:OpenMP 實現(xiàn)結(jié)點(diǎn)內(nèi)部的并行,因為 OpenMP 不存在負(fù)載均衡問題,從而提高了性能。
3)實現(xiàn)通信和計算重疊
大部分 MPI 都是通過單線程來實現(xiàn),然而單個的 MPI 進(jìn)程不能同時進(jìn)行通信和計算,這樣大大降低了效率。采用混合模型可以選擇主線程或指定一個線程進(jìn)行通信,而其它的線程執(zhí)行計算的部分,這樣便實現(xiàn)了通信和計算的重疊。
4)充分的利用 CPU
在某些情況下,MPI 應(yīng)用實現(xiàn)的性能并不隨處理器數(shù)量的增加而提高,而是有一個最優(yōu)值。這時使用混合編程模式會比較有益,因為可以用 OpenMP 線程來替代進(jìn)程這樣就可以減少所需進(jìn)程數(shù)量,從而運(yùn)行理想數(shù)目的 MPI進(jìn)程,再用 OpenMP 進(jìn)一步分解任務(wù),使得所有處理器高效運(yùn)行。
5)提高每個節(jié)點(diǎn)內(nèi)的計算效率
在節(jié)點(diǎn)內(nèi)使用OpenMP 進(jìn)行編程使程序在節(jié)點(diǎn)內(nèi)部運(yùn)行的時候更充分的利用了多核并行計算的優(yōu)勢。同時線程比 MPI 進(jìn)程耗費(fèi)更少的資源,比單純使用MPI 的運(yùn)算效率大為提高[8]。
在一般情況下,使用混合編程模型具有更好地效率和性能,但是它也存在幾方面需要注意的問題,比如對于純 MPI 編程模型的應(yīng)用,參與通信的 CPU 可以飽和結(jié)點(diǎn)間的帶寬,而混合編程模型中若分出一個線程進(jìn)行通信很難做到這一點(diǎn)。同時還要注意混合編程模型中 MPI 進(jìn)程內(nèi)的線程之間進(jìn)行點(diǎn)對點(diǎn)通訊時的正確發(fā)送與接收、OpenMP 產(chǎn)生的系統(tǒng)開銷等問題。
3 實驗結(jié)果與分析
3.1 測試環(huán)境
3.2 測試程序
3.3 實驗及結(jié)論
4 結(jié)束語
本文通過結(jié)合一個具體的程序案例,詳細(xì)描述了適用于多核集群的并行編程模型,并在曙光 TC5000 集群上進(jìn)行了實驗,實驗表明采用 MPI+OpenMP 混合編程模型比采用純 MPI 編程模型能更充分利用多核集群系統(tǒng)。隨著多核集群系統(tǒng)的飛速發(fā)展,對并行計算模型的研究仍需繼續(xù),在本文的基礎(chǔ)上,我們會對多核集群系統(tǒng)上的并行計算的性能優(yōu)化做更深層的研究,從而使多核集群系統(tǒng)的性能進(jìn)一步提高。
參考文獻(xiàn):
[1] 祝永志,張丹丹,曹寶香,等.基于 SMP 機(jī)群的層次化并行編程技術(shù)的研究[J].電子學(xué)報,2012,40(11):2206-2210.
[2] 鄭漢垣,劉智翔,封衛(wèi)兵,等.MPI+OpenMP混合編程模型在大規(guī)模三對角線性方程組求解中的應(yīng)用[J].微電子學(xué)與計算機(jī),2011,28(8):158-161.
[3] 張軍,萬劍怡.多核集群系統(tǒng)上的混合編程模型研究[J].計算機(jī)與現(xiàn)代化,2009(5):1-4.
[4] 陳國良.并行計算—結(jié)構(gòu)·算法·編程[M].北京:高等教育出版社,2003.
[5] BARBARA CHAPMAN,GABRIELE JOST, RUUD VAN DERPAS.Using OpenMP [M].The MIT Press,2007.
[6] Bull J M,Enright J P,Ameer N.A microb-enchmark suite for mixed-mode OpenMP/MPI[C]//Müller M S,de Supinski B R,Chapman B M.IWOMP 2009.LNCS, vol. 5568, Springer, Heidelberg, 2009:118-131.
[7] 魏偉.基于SMP集群的性能優(yōu)化方法的研究[D].蘭州:蘭州大學(xué),2006.
[8] 胡斌,袁道華.TBB 多核編程及其混合編程模型的研究[J].計算機(jī)技術(shù)與發(fā)展,2009,19(2):98-101.
[9] 楊際祥,譚國真,王榮生.多核軟件的幾個關(guān)鍵問題及其研究進(jìn)展[J].電子學(xué)報,2010,38(9):2140-2145.
[10] Rabenseifner R.Hybrid Parallel Programming on HPC Platforms[C]//Proceedings of the Fifth European Workshop on OpenMP.EWOMP 2003, Aachen, Germany, September 22-26, 2003:185-194.
[11] 王惠春.基于 SMP 集群的 MPI+OpenMP混合并行編程模型研究與應(yīng)用[D].湘潭:湘潭大學(xué),2008.
[12] 李俊醅,莊子波.WRF 模式在 LINUX 集群系統(tǒng)的并行計算與評測[J].計算機(jī)技術(shù)與發(fā)展,2012,22(7):5-8.