基于MPI和OpenMP混合編程模型并行計(jì)算提高計(jì)算速度的方法
【專利摘要】本發(fā)明公開了一種基于MPI和OpenMP混合編程模型并行計(jì)算提高計(jì)算速度的方法,包括:根據(jù)計(jì)算節(jié)點(diǎn)數(shù)目和節(jié)點(diǎn)內(nèi)可用CPU核數(shù)確定可調(diào)用的MPI進(jìn)程數(shù)和OpenMP線程數(shù);每個(gè)進(jìn)程讀入已有子稀疏矩陣A、子初始向量x0、塊向量b和最大計(jì)算公差Tolerance;每個(gè)進(jìn)程開啟多線程編譯指令;在各個(gè)進(jìn)程上進(jìn)行預(yù)條件共軛梯度法的循環(huán)計(jì)算;若計(jì)算的誤差小于允許值,循環(huán)結(jié)束,否則繼續(xù)循環(huán)計(jì)算;歸約各個(gè)進(jìn)程的計(jì)算結(jié)果,輸出問題的解;并行計(jì)算時(shí),首先MPI進(jìn)程啟動(dòng),對問題進(jìn)行多進(jìn)程分解,開始節(jié)點(diǎn)間的并行,每個(gè)MPI進(jìn)程被分配到一個(gè)計(jì)算節(jié)點(diǎn)上,進(jìn)程間使用消息傳遞交換信息;然后在每個(gè)MPI進(jìn)程中,使用OpenMP制導(dǎo)指令創(chuàng)建一組線程,并分配到計(jì)算節(jié)點(diǎn)的不同處理器上并行執(zhí)行。
【專利說明】基于MPI和OpenMP混合編程模型并行計(jì)算提高計(jì)算速度的 方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種并行計(jì)算技術(shù),具體地說,涉及一種并行計(jì)算提高計(jì)算速度的方 法。
【背景技術(shù)】
[0002] 迭代法是目前求解大型稀疏線性方程組的主流方法,迭代法中的預(yù)條件共軛梯度 法是通過預(yù)處理技術(shù)減少共軛梯度法的迭代次數(shù),并能加速收斂的一種方法,在工程和科 學(xué)計(jì)算中已有廣泛的應(yīng)用。共軛梯度法是求解特定線性系統(tǒng)的數(shù)值解的方法,其中的系數(shù) 矩陣為對稱和正定的實(shí)數(shù)陣。隨著科學(xué)與工程問題的規(guī)模和復(fù)雜程度的提高,串行共軛梯 度法已經(jīng)很難滿足對稀疏線性系統(tǒng)的求解規(guī)模和速度的要求。
[0003] 由于串行計(jì)算本身存在的瓶頸,當(dāng)計(jì)算量相對較大,計(jì)算機(jī)本身的性能將大大制 約其進(jìn)行演算的效率?,F(xiàn)有技術(shù)中采用串行方法計(jì)算共軛梯度法,僅在處理稀疏矩陣向量 乘時(shí)才啟用MPI,通過在各節(jié)點(diǎn)上計(jì)算分塊稀疏矩陣與分塊向量的乘積實(shí)現(xiàn)并行計(jì)算。但共 軛梯度法除了稀疏矩陣向量乘,還有多個(gè)向量與向量、標(biāo)量與向量的乘積和求和,以及線性 方程組求解等計(jì)算步驟,這些計(jì)算仍然使用串行方法計(jì)算,不能最大限度地將算法并行優(yōu) 化。對于分布式和共享式存儲(chǔ)結(jié)構(gòu)混合的SMP集群系統(tǒng),難以充分利用計(jì)算資源,提升其計(jì) 算速度。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明的目的在于提供一種基于MPI和OpenMP混合編程模型并行計(jì)算提高計(jì)算 速度的方法,通過利用集群以及多核平臺(tái)的優(yōu)勢,提升共軛梯度法的計(jì)算速度,滿足對稀疏 線性系統(tǒng)的求解規(guī)模和速度的要求。
[0005] 為了實(shí)現(xiàn)上述目的,本發(fā)明所采用的技術(shù)方案如下:
[0006] 一種基于MPI和OpenMP混合編程模型并行計(jì)算提高計(jì)算速度的方法,包括以下步 驟:
[0007] (1)計(jì)算準(zhǔn)備、
[0008] a)啟動(dòng)MPI多進(jìn)程計(jì)算,其中進(jìn)程數(shù)小于或等于可用計(jì)算節(jié)點(diǎn)數(shù)目;
[0009] b)每個(gè)進(jìn)程讀入子稀疏矩陣A、子初始向量Xtl、塊向量b和最大計(jì)算公差 Tolerance,子稀疏矩陣A、子初始向量Xtl和塊向量b是通過網(wǎng)格劃分軟件劃分問題的計(jì)算 域后生成;
[0010] (2)開始預(yù)條件共軛梯度法的MPI+OpenMP并行的循環(huán)計(jì)算 [0011] 1)根據(jù)初始值X。,計(jì)算r=b_Ax。;
[0012] 2)每個(gè)進(jìn)程開啟OpenMP多線程編譯指令,其中線程數(shù)小于或等于該線程所處計(jì) 算節(jié)點(diǎn)可用CPU核數(shù)目;
[0013] 3)開始 fori=l,2, · · ·循環(huán);
[0014] 4) #pragma omp for 指令多線程并行計(jì)算 ζ=]^1!·;
[0015] 5) #pragma omp for 指令多線程并行計(jì)算 P ;
[0016] 6) #pragma omp single指令單線程進(jìn)行MPI通信,MPI_Allreduce函數(shù)歸約各計(jì) 算節(jié)點(diǎn)的P η ;
[0017] 7) if i=l β =Oelse β = P h/P 卜2 ;
[0018] 8) #pragma omp for 指令多線程并行計(jì)算 ρ=ζ+ β ρ ;
[0019] 9)#pragma omp for指令多線程并行計(jì)算q=Ap ;
[0020] 10) #pragma omp for 指令多線程并行計(jì)算 α =ρ η/ρ、;
[0021] 11) #pragma omp reduction 指令多線程并行計(jì)算 x=x+α p ;
[0022] 12) #pragma omp reduction 指令多線程并行計(jì)算 r=r_ α q ;
[0023] 13) #pragmaompsingle指令單線程進(jìn)行MPI通信,MPI_Allreduce歸約各計(jì)算節(jié) 點(diǎn):r的范數(shù);
[0024] 14) if I I r I I < Tolerance,循環(huán)迭代終止;else goto3);
[0025] 15) end/*結(jié)束for循環(huán)和OpenMP多線程計(jì)算*/ ;
[0026] (3)各計(jì)算節(jié)點(diǎn)的計(jì)算結(jié)果X歸約后得到最終計(jì)算結(jié)果。
[0027] 并行計(jì)算時(shí),首先MPI進(jìn)程啟動(dòng),對問題進(jìn)行多進(jìn)程分解,開始節(jié)點(diǎn)間的并行,每 個(gè)MPI進(jìn)程被分配到一個(gè)計(jì)算節(jié)點(diǎn)上,進(jìn)程間使用消息傳遞交換信息;然后在每個(gè)MPI進(jìn)程 中,使用OpenMP制導(dǎo)指令創(chuàng)建一組線程,并分配到計(jì)算節(jié)點(diǎn)的不同處理器上并行執(zhí)行。
[0028] 進(jìn)一步,所述網(wǎng)格劃分軟件可為Metis或ParMetis。
[0029] 進(jìn)一步,開啟MPI多進(jìn)程計(jì)算和OpenMP多線程計(jì)算后,能夠針對多核SMP集群多 核、多節(jié)點(diǎn)的硬件資源特性,實(shí)現(xiàn)計(jì)算節(jié)點(diǎn)間和計(jì)算節(jié)點(diǎn)內(nèi)的兩級并行。
[0030] 進(jìn)一步,并行計(jì)算執(zhí)行過程中,計(jì)算節(jié)點(diǎn)間(即進(jìn)程間)通過MPI消息傳遞方式通信 數(shù)據(jù),在計(jì)算節(jié)點(diǎn)內(nèi)(即進(jìn)程內(nèi))通過OpenMP線程組的共享內(nèi)存方式實(shí)現(xiàn)數(shù)據(jù)共享。
[0031] 進(jìn)一步,每一子稀疏矩陣的存儲(chǔ)格式為CSR。
[0032] 進(jìn)一步,并行計(jì)算執(zhí)行過程中,可以訪問的存儲(chǔ)空間分為三級存儲(chǔ)空間,進(jìn)程控制 的處理器全局共享第一級存儲(chǔ)空間,線程組共享第二級存儲(chǔ)空間,線程私有第三級存儲(chǔ)空 間。
[0033] 與現(xiàn)有技術(shù)相比,本發(fā)明融合了消息傳遞模型和多線程并行編程模型的優(yōu)點(diǎn),更 好地解決每個(gè)計(jì)算節(jié)點(diǎn)內(nèi)各個(gè)處理器間的交互,充分利用計(jì)算資源,提高預(yù)條件共軛梯度 法的計(jì)算速度。
【專利附圖】
【附圖說明】
[0034] 圖1為本發(fā)明的編程模式示意圖;
[0035] 圖2為本發(fā)明的流程步驟示意圖;
[0036] 圖3為本發(fā)明的稀疏矩陣向量乘的示意圖。
【具體實(shí)施方式】
[0037] 下面結(jié)合附圖和具體實(shí)施例對本發(fā)明基于MPI和OpenMP混合編程模型并行計(jì)算 提高計(jì)算速度的方法作進(jìn)一步說明。
[0038] 高性能計(jì)算機(jī)(HPC)按其存儲(chǔ)結(jié)構(gòu)可分為共享存儲(chǔ)結(jié)構(gòu)和分布存儲(chǔ)結(jié)構(gòu)兩大類。 分布式存儲(chǔ)系統(tǒng)沒有一個(gè)統(tǒng)一的內(nèi)存空間,其中的一個(gè)或多個(gè)處理器和它們的內(nèi)存空間構(gòu) 成一個(gè)獨(dú)立的系統(tǒng),多個(gè)系統(tǒng)由一個(gè)操作系統(tǒng)控制,可以獨(dú)立運(yùn)行。每個(gè)系統(tǒng)叫作節(jié)點(diǎn),這 些節(jié)點(diǎn)使用網(wǎng)絡(luò)接口相互連接進(jìn)行通信。共享式存儲(chǔ)系統(tǒng)多為對稱式共享存儲(chǔ)體系結(jié)構(gòu), 又叫對稱多處理器結(jié)構(gòu)(Symmetric Multi-Processing, SMP)。服務(wù)器中多個(gè)CPU對稱工 作,無主次或從屬關(guān)系。各CPU共享相同的物理內(nèi)存,每個(gè)CPU訪問內(nèi)存中的任何地址所需 時(shí)間是相同的,因此SMP也被稱為一致存儲(chǔ)器訪問結(jié)構(gòu)(UMA,Uniform Memory Access) JMP 集群系統(tǒng)可以看成是這兩種內(nèi)存結(jié)構(gòu)的集合,它由擁有多個(gè)處理器的SMP節(jié)點(diǎn)和連接各節(jié) 點(diǎn)間的高速網(wǎng)絡(luò)組成一套多級體系結(jié)構(gòu)。SMP集群即有分布式節(jié)點(diǎn)系統(tǒng)的良好擴(kuò)展性,也支 持共享式存儲(chǔ)系統(tǒng)的數(shù)據(jù)共享。因此當(dāng)前以SMP集群為代表的高性能計(jì)算機(jī)發(fā)展迅速,成 為高性能計(jì)算機(jī)領(lǐng)域的主流。
[0039] 不同存儲(chǔ)結(jié)構(gòu)的高性能計(jì)算機(jī)有相應(yīng)的并行編程模型,其中一種是基于消息傳遞 模型,一般應(yīng)用于分布式存儲(chǔ)結(jié)構(gòu),也可用于共享式存儲(chǔ)結(jié)構(gòu)。通過將計(jì)算任務(wù)或數(shù)據(jù)按照 進(jìn)程數(shù)劃分,各個(gè)并行執(zhí)行的任務(wù)之間通過傳遞消息來交換信息、協(xié)調(diào)步伐、控制執(zhí)行。其 中,MPI (message passing interface)是為開發(fā)基于消息傳遞模型的并行程序而制定的 工業(yè)標(biāo)準(zhǔn)。另一種是基于共享存儲(chǔ)的多線程并行編程模型。OpenMP是其中的共享存儲(chǔ)并行 編程的典型方法,能提供描述并行區(qū)域的編譯制導(dǎo)語句并隱藏有關(guān)并行線程創(chuàng)建和管理的 細(xì)節(jié),是一種能顯式指導(dǎo)多線程、共享內(nèi)存并行的應(yīng)用程序編程接口(API)。OpenMP標(biāo)準(zhǔn)化 了細(xì)粒度的并行性,同時(shí)也支持粗粒度的并行性。
[0040] 本發(fā)明采用MPI和OpenMP混合編程模型,將分布式存儲(chǔ)編程模型MPl、共享存儲(chǔ)編 程模型OpenMP相結(jié)合,充分利用SMP集群層次存儲(chǔ)結(jié)構(gòu)的特點(diǎn)。本發(fā)明的MPI和OpenMP 混合編程模型具有的層次結(jié)構(gòu)為上層的MPI表示節(jié)點(diǎn)間的并行,下層的OpenMP表示節(jié)點(diǎn)內(nèi) 的并行。本發(fā)明的MPI和OpenMP混合編程模型基于如下的理論分配模型:首先對問題進(jìn)行 MPI分解,將任務(wù)劃分成通信不密集的幾個(gè)部分,每個(gè)部分分配到一個(gè)SMP節(jié)點(diǎn)(即一個(gè)進(jìn) 程)上,節(jié)點(diǎn)間通過消息傳遞進(jìn)行通信;然后添加 OpenMP編譯制導(dǎo)語句將每個(gè)節(jié)點(diǎn)上的部 分再次分解,并分配到SMP的不同處理器上由多個(gè)線程并行執(zhí)行,節(jié)點(diǎn)內(nèi)通過共享存儲(chǔ)進(jìn) 行通信。MPI和OpenMP混合編程模型提供了節(jié)點(diǎn)間和節(jié)點(diǎn)內(nèi)的兩級并行機(jī)制,結(jié)合了進(jìn)程 級的粗粒度并行)和循環(huán)級的細(xì)粒度并行。
[0041] 本發(fā)明公開了一種基于MPI和OpenMP混合編程模型并行計(jì)算提高計(jì)算速度的方 法,包括以下步驟:
[0042] 根據(jù)計(jì)算節(jié)點(diǎn)數(shù)目和節(jié)點(diǎn)內(nèi)可用CPU核數(shù)確定可調(diào)用的MPI進(jìn)程數(shù)和OpenMP 線程數(shù);每個(gè)進(jìn)程讀入已有子稀疏矩陣A、子初始向量Xtl和塊向量b和最大計(jì)算公差 Tolerance ;每個(gè)進(jìn)程開啟多線程編譯指令;在各個(gè)進(jìn)程上進(jìn)行預(yù)條件共軛梯度法的循環(huán) 計(jì)算;若計(jì)算的誤差小于允許值,循環(huán)結(jié)束,否則繼續(xù)循環(huán)計(jì)算;歸約各個(gè)進(jìn)程的計(jì)算結(jié) 果,輸出問題的解;并行計(jì)算時(shí),首先MPI進(jìn)程啟動(dòng),對問題進(jìn)行多進(jìn)程分解,開始節(jié)點(diǎn)間的 并行,每個(gè)MPI進(jìn)程被分配到一個(gè)計(jì)算節(jié)點(diǎn)上,進(jìn)程間使用消息傳遞交換信息;然后在每個(gè) MPI進(jìn)程中,使用OpenMP制導(dǎo)指令創(chuàng)建一組線程,并分配到計(jì)算節(jié)點(diǎn)的不同處理器上并行 執(zhí)行。
[0043] 開啟多線程時(shí),每一進(jìn)程可開啟的線程數(shù)小于或等于該進(jìn)程的可用處理器數(shù)。每 一子稀疏矩陣的存儲(chǔ)格式為CSR (Compressed Sparse Row)。其中,程序在預(yù)條件共軛梯 度算法循環(huán)開始前動(dòng)態(tài)確定可用線程數(shù),開啟OpenMP多線程,在循環(huán)中根據(jù)需要調(diào)用不同 OpenMP多線程指令,如for循環(huán)指令、reduction指令、single指令等。并行計(jì)算執(zhí)行過程 中,可以訪問的存儲(chǔ)空間分為三級存儲(chǔ)空間:進(jìn)程控制的多核微處理器全局共享第一級存 儲(chǔ)空間,線程組共享第二級存儲(chǔ)空間,線程私有第三級存儲(chǔ)空間。線程組共享的第二級存儲(chǔ) 空間在共軛梯度循環(huán)前創(chuàng)建,將當(dāng)前預(yù)條件共軛梯度算法函數(shù)內(nèi)的變量空間作為線程組的 共享的第二級存儲(chǔ)空間,線程組內(nèi)的每個(gè)線程均能訪問這一空間,但其它線程組不能訪問。 同時(shí),每個(gè)線程會(huì)被分配一個(gè)只有線程才能訪問的私有的第三級存儲(chǔ)空間,該存儲(chǔ)空間具 有所屬線程相同的生命周期。
[0044] 實(shí)施例一
[0045] 本實(shí)施例采用基于MPI和OpenMP混合編程模型并行計(jì)算提高計(jì)算速度的方法求 解大規(guī)模線性方程組。預(yù)條件共軛梯度法是求解對稱正定稀疏矩陣線性方程組的迭代法, 在工程和科學(xué)計(jì)算中有廣泛的應(yīng)用,其算法如下所示:
[0046] 取 x(〇) e Rn,計(jì)算 r(〇)=b-Ax(〇),令 p(〇)=r(0)
[0047] 對 k=0,1,2, · · ·,計(jì)算
【權(quán)利要求】
1. 一種基于MPI和化enMP混合編程模型并行計(jì)算提高計(jì)算速度的方法,其特征在于, 包括W下步驟: (1) 計(jì)算準(zhǔn)備 a) 啟動(dòng)MPI多進(jìn)程計(jì)算,其中進(jìn)程數(shù)小于或等于可用計(jì)算節(jié)點(diǎn)數(shù)目; b) 每個(gè)進(jìn)程讀入子稀疏矩陣A、子初始向量X。、塊向量b和最大計(jì)算公差Tolerance, 子稀疏矩陣A、子初始向量X。和塊向量b是通過網(wǎng)格劃分軟件劃分問題的計(jì)算域后生成; (2) 開始預(yù)條件共輛梯度法的MPI+化enMP并行的循環(huán)計(jì)算 1) 根據(jù)初始值X。,計(jì)算r=b-Ax。; 2) 每個(gè)進(jìn)程開啟化enMP多線程編譯指令,其中線程數(shù)小于或等于該線程所處計(jì)算節(jié) 點(diǎn)可用CPU核數(shù)目; 3) 開始 fori=l,2,...循環(huán); 4) 牠ragma omp for指令多線程并行計(jì)算z=lVri;r ; 5) 牠ragma omp for指令多線程并行計(jì)算; 6) 牠ragma omp single指令單線程進(jìn)行MPI通信,MPI_Allre化ce函數(shù)歸約各計(jì)算節(jié) 點(diǎn)的P i_i ; 7. if i=l 目=0else 目=p i_i/p i_2 ; 8) 牠ragma omp for指令多線程并行計(jì)算p=z+目p ; 9) 牠ragma omp for指令多線程并行計(jì)算q=Ap; 10)牠ragma omp for指令多線程并行計(jì)算a = p i_i/pTq . 11) 牠ragma omp reduction指令多線程并行計(jì)算x=x+ap; 12) 牠ragma omp reduction指令多線程并行計(jì)算r=r- a q ; 13) 牠ragmaompsingle指令單線程進(jìn)行MPI通信,MPI_Allre化ce歸約各計(jì)算節(jié)點(diǎn)r的 范數(shù); 14. if I |r| I < Tolerance,循環(huán)迭代終止;else goto3); 15. end/*結(jié)束for循環(huán)和化enMP多線程計(jì)算*/ ; (3) 各計(jì)算節(jié)點(diǎn)的計(jì)算結(jié)果X歸約后得到最終計(jì)算結(jié)果。 并行計(jì)算時(shí),首先MPI進(jìn)程啟動(dòng),對問題進(jìn)行多進(jìn)程分解,開始節(jié)點(diǎn)間的并行,每個(gè)MPI 進(jìn)程被分配到一個(gè)計(jì)算節(jié)點(diǎn)上,進(jìn)程間使用消息傳遞交換信息;然后在每個(gè)MPI進(jìn)程中,使 用化enMP制導(dǎo)指令創(chuàng)建一組線程,并分配到計(jì)算節(jié)點(diǎn)的不同處理器上并行執(zhí)行。
2. 如權(quán)利要求1所述的基于MPI和化enMP混合編程模型并行計(jì)算提高計(jì)算速度的方 法,其特征在于:所述網(wǎng)格劃分軟件可為Metis或ParMetis。
3. 如權(quán)利要求1所述的基于MPI和化enMP混合編程模型并行計(jì)算提高計(jì)算速度的方 法,其特征在于:開啟MPI多進(jìn)程計(jì)算和化enMP多線程計(jì)算后,能夠針對多核SMP集群多 核、多節(jié)點(diǎn)的硬件資源特性,實(shí)現(xiàn)計(jì)算節(jié)點(diǎn)間和計(jì)算節(jié)點(diǎn)內(nèi)的兩級并行。
4. 如權(quán)利要求3所述的基于MPI和化enMP混合編程模型并行計(jì)算提高計(jì)算速度的方 法,其特征在于;并行計(jì)算執(zhí)行過程中,計(jì)算節(jié)點(diǎn)間(即進(jìn)程間)通過MPI消息傳遞方式通信 數(shù)據(jù),在計(jì)算節(jié)點(diǎn)內(nèi)(即進(jìn)程內(nèi))通過化enMP線程組的共享內(nèi)存方式實(shí)現(xiàn)數(shù)據(jù)共享。
5. 如權(quán)利要求1所述的基于MPI和化enMP混合編程模型并行計(jì)算提高計(jì)算速度的方 法,其特征在于:每一子稀疏矩陣的存儲(chǔ)格式為CSR。
6.如權(quán)利要求1所述的基于MPI和化enMP混合編程模型并行計(jì)算提高計(jì)算速度的方 法,其特征在于;并行計(jì)算執(zhí)行過程中,可W訪問的存儲(chǔ)空間分為H級存儲(chǔ)空間,進(jìn)程控制 的處理器全局共享第一級存儲(chǔ)空間,線程組共享第二級存儲(chǔ)空間,線程私有第H級存儲(chǔ)空 間。
【文檔編號】G06F9/38GK104461466SQ201310442075
【公開日】2015年3月25日 申請日期:2013年9月25日 優(yōu)先權(quán)日:2013年9月25日
【發(fā)明者】羅海飆, 王婷, 陳春艷, 廖俊豪 申請人:廣州中國科學(xué)院軟件應(yīng)用技術(shù)研究所