本發(fā)明涉及高性能cfd計(jì)算,特別涉及一種基于數(shù)據(jù)依賴關(guān)系分解的cfd多gpu異步多流優(yōu)化方法。
背景技術(shù):
1、異構(gòu)并行計(jì)算,尤其是基于中央處理器(cpu)的高性能并行平臺(tái),目前日益廣泛應(yīng)用于計(jì)算流體動(dòng)力學(xué)(computational?fluid?dynamics,cfd)領(lǐng)域,隨著cfd問題規(guī)模的不斷增大,單機(jī)單卡的存儲(chǔ)與計(jì)算能力已趨于極限,難以適用于大規(guī)模計(jì)算任務(wù),這促使計(jì)算設(shè)備快速向多機(jī)多卡平臺(tái)發(fā)展。而在實(shí)際應(yīng)用過程中,cpu與gpu間的頻繁通信開銷以及cpu與cpu間的虛擬單元數(shù)據(jù)交換開銷,導(dǎo)致面向單機(jī)單卡的異構(gòu)并行cfd計(jì)算模型在多機(jī)多卡平臺(tái)面臨著可擴(kuò)展性差的困境。
2、針對(duì)多機(jī)多卡平臺(tái)帶來(lái)的額外的數(shù)據(jù)傳輸問題,研究人員已嘗試使用gpu與gpu直接通信策略以避免cpu與gpu間的數(shù)據(jù)通信,但在實(shí)際cfd應(yīng)用中的效果較差。因此,目前大多數(shù)研究仍采用基于cpu的通信策略,利用gpu能夠同時(shí)進(jìn)行計(jì)算和數(shù)據(jù)傳輸?shù)奶攸c(diǎn),通過異步多流技術(shù)實(shí)現(xiàn)計(jì)算與數(shù)據(jù)傳輸?shù)闹丿B,進(jìn)而提高設(shè)備的資源利用率,增強(qiáng)應(yīng)用的整體性能。然而,異步多流技術(shù)主要基于區(qū)域分解實(shí)現(xiàn),且集中在較為簡(jiǎn)單的結(jié)構(gòu)網(wǎng)格cfd求解器。對(duì)于非結(jié)構(gòu)cfd求解器而言,由于拓?fù)潢P(guān)系復(fù)雜,基于區(qū)域分解的異步多流技術(shù)對(duì)數(shù)據(jù)結(jié)構(gòu)和映射關(guān)系改動(dòng)量較大,難以實(shí)現(xiàn)有效的異構(gòu)多機(jī)多卡性能優(yōu)化。
3、目前,現(xiàn)有的異步多流cfd實(shí)現(xiàn)方案主要涉及對(duì)計(jì)算區(qū)域進(jìn)行進(jìn)一步分解,通過多個(gè)計(jì)算區(qū)域交替發(fā)起求解指令,從而實(shí)現(xiàn)計(jì)算與數(shù)據(jù)傳輸?shù)闹丿B。具體來(lái)說,對(duì)于多機(jī)多卡mpi-x模型(mpi(message?passing?interface)消息傳遞接口)的異構(gòu)多流而言,其中x指代gpu編程模型,首先需要對(duì)整體計(jì)算求解區(qū)域進(jìn)行剖分,使區(qū)域剖分?jǐn)?shù)與mpi進(jìn)程數(shù)相匹配,并建立虛擬單元數(shù)據(jù)的映射關(guān)系。然后,在已剖分區(qū)域上進(jìn)行更細(xì)層級(jí)的網(wǎng)格剖分,并為這一層級(jí)的虛擬單元數(shù)據(jù)建立映射關(guān)系,這一過程需要對(duì)底層數(shù)據(jù)結(jié)構(gòu)和計(jì)算核心函數(shù)進(jìn)行相應(yīng)的調(diào)整,實(shí)現(xiàn)起來(lái)較為復(fù)雜,并且最終計(jì)算區(qū)域的通信開銷難以與計(jì)算過程有效重疊。這種實(shí)現(xiàn)方案通常應(yīng)用于結(jié)構(gòu)網(wǎng)格領(lǐng)域,而對(duì)于非結(jié)構(gòu)網(wǎng)絡(luò),由于其自身映射關(guān)系已相當(dāng)復(fù)雜,進(jìn)一步剖分和建立映射關(guān)系較難在非結(jié)構(gòu)網(wǎng)格上實(shí)現(xiàn),目前尚未見到針對(duì)非結(jié)構(gòu)cfd多機(jī)多卡mpi-x異構(gòu)并行異步多流的具體實(shí)現(xiàn)。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明的發(fā)明目的在于:針對(duì)上述存在的問題,提供了一種基于數(shù)據(jù)依賴關(guān)系分解的cfd多gpu異步多流優(yōu)化方法,期望改善現(xiàn)有異步多流cfd實(shí)現(xiàn)方案復(fù)雜、計(jì)算掩蓋有局限、結(jié)構(gòu)網(wǎng)格與非結(jié)構(gòu)網(wǎng)格在實(shí)現(xiàn)上有較大差異、以及非結(jié)構(gòu)cfd領(lǐng)域多機(jī)多卡mpi-x異構(gòu)并行異步多流技術(shù)缺失的問題。
2、本發(fā)明采用的技術(shù)方案如下:
3、一種基于數(shù)據(jù)依賴關(guān)系分解的cfd多gpu異步多流優(yōu)化方法,所述方法包括如下:?jiǎn)?dòng)cfd求解器,并初始化cfd求解器;采用異步多流方法;其中,異步多流方法包括:按計(jì)算變量數(shù)據(jù)相關(guān)性分解的方法與按計(jì)算流程數(shù)據(jù)相關(guān)性流程重構(gòu)的方法;所述按計(jì)算變量數(shù)據(jù)相關(guān)性分解的方法是針對(duì)cfd求解器中的節(jié)點(diǎn)高斯梯度模塊的異步多流優(yōu)化策略,通過分析計(jì)算五個(gè)變量的梯度計(jì)算模塊和速度分量的對(duì)稱面修正計(jì)算模塊間的數(shù)據(jù)依賴性,實(shí)現(xiàn)梯度計(jì)算的并發(fā)執(zhí)行;所述按計(jì)算流程數(shù)據(jù)相關(guān)性流程重構(gòu)的方法依據(jù)各個(gè)計(jì)算模塊之間的數(shù)據(jù)相關(guān)性進(jìn)行多計(jì)算流的分配,使其達(dá)到多計(jì)算流可并發(fā)進(jìn)行處理的狀態(tài),從而完成gpu計(jì)算與cpu訪存及mpi通信的相互掩蓋。
4、本方法基于數(shù)據(jù)依賴關(guān)系構(gòu)建的異步多流方案主要包括兩個(gè)部分:按計(jì)算變量數(shù)據(jù)相關(guān)性分解的異步多流方法和按計(jì)算流程數(shù)據(jù)相關(guān)性流程重構(gòu)的異步多流方法,通過該方法,cfd求解器的整體性能能夠得到顯著提升。
5、進(jìn)一步的:所述按計(jì)算變量數(shù)據(jù)相關(guān)性分解的方法包括如下:步驟s100:識(shí)別節(jié)點(diǎn)高斯梯度模塊中的六個(gè)計(jì)算模塊,所述模塊包括五個(gè)變量的梯度計(jì)算模塊和速度的對(duì)稱面修正計(jì)算模塊,對(duì)六個(gè)計(jì)算模塊進(jìn)行數(shù)據(jù)依賴分析,其中,五個(gè)變量的梯度計(jì)算具有并發(fā)性;步驟s200:分配五個(gè)計(jì)算流交替異步進(jìn)行提交,用于gpu計(jì)算與cpu訪存及mpi通信的并行執(zhí)行。
6、需要注意的是,五個(gè)變量的梯度計(jì)算之間具有并發(fā)性,因此他們可以同時(shí)發(fā)起計(jì)算而不會(huì)影響計(jì)算的結(jié)果。
7、進(jìn)一步的:所述五個(gè)計(jì)算流分別為:密度計(jì)算流stream?rho、速度分量u計(jì)算流stream?u、速度分量v計(jì)算流stream?v、速度分量w計(jì)算流stream?w、壓力計(jì)算流stream?p;所述步驟s200包括如下:步驟s201:使用默認(rèn)計(jì)算流default?stream,進(jìn)入所述梯度計(jì)算模塊;步驟s202:開始三個(gè)速度分量對(duì)稱面修正計(jì)算,提交計(jì)算流stream?u,當(dāng)stream?u進(jìn)行到gpu與cpu通信以及cpu與cpu間通信時(shí),提交stream?rho計(jì)算流,在gpu上啟動(dòng)密度rho梯度計(jì)算;步驟s203:提交stream?rho計(jì)算流后,當(dāng)stream?rho遇到訪存和mpi通信模塊時(shí),提交stream?p計(jì)算流,在gpu上開始?jí)毫μ荻扔?jì)算;步驟s204:提交stream?p計(jì)算流后,當(dāng)stream?p遇到gpu訪存和mpi通信模塊時(shí),再次提交stream?u計(jì)算流,此時(shí)stream?u上已完成gpu訪存和mpi通信,繼續(xù)三個(gè)速度分量對(duì)稱面修正計(jì)算;步驟s205:提交stream?u計(jì)算流后,當(dāng)stream?u再次到達(dá)gpu訪存和cpu與cpu間mpi通信模塊時(shí),同樣再一次啟動(dòng)streamrho計(jì)算流,使gpu計(jì)算核心始終保持忙碌狀態(tài);同理,stream?v計(jì)算流和stream?w計(jì)算流也依次交錯(cuò)提交。
8、需要注意的是,五個(gè)計(jì)算流交替異步進(jìn)行提交,可以實(shí)現(xiàn)gpu計(jì)算與gpu訪存及mpi通信的相互掩蓋,從而最大程度地利用gpu的計(jì)算與訪存資源。
9、進(jìn)一步的:所述按計(jì)算流程數(shù)據(jù)相關(guān)性流程重構(gòu)的方法是根據(jù)計(jì)算流程發(fā)起,分為層流求解模塊和湍流求解模塊,包括如下步驟:步驟t100:構(gòu)建層流求解模塊,根據(jù)層流模塊計(jì)算過程的數(shù)據(jù)相關(guān)性依賴構(gòu)建;其中,層流求解器針對(duì)流場(chǎng)變量q[5]進(jìn)行迭代更新求解,包含右端項(xiàng)殘差計(jì)算模塊和線性方程組迭代更新模塊,線性方程組迭代會(huì)對(duì)流場(chǎng)變量q[5]進(jìn)行更新,對(duì)于多節(jié)點(diǎn)mpi計(jì)算,層流求解器開始前需進(jìn)行虛擬單元流場(chǎng)變量q[5]更新,而層流求解器余下的模塊,直到右端項(xiàng)殘差計(jì)算模塊結(jié)束,流場(chǎng)變量q[5]保持不變;梯度變量dqdx[5]、dqdy[5]、dqdz[5]直接由流場(chǎng)變量q[5]得到,限制器變量limit[5]由流場(chǎng)變量q[5]和梯度變量dqdx[5]、dqdy[5]、dqdz[5]組合得到,其中,dqdx[5]為梯度變量的x方向上的分量,dqdy[5]為梯度變量的y方向上的分量,dqdz[5]為梯度變量的z方向上的分量,通量flux[5]計(jì)算則依賴于流場(chǎng)變量q[5]、梯度變量dqdx[5]、dqdy[5]、dqdz[5]以及限制器變量limit[5];步驟t200:構(gòu)建湍流求解模塊,其中,湍流求解器分為右端項(xiàng)殘差計(jì)算模塊和線性方程組迭代更新模塊,求解變量?jī)H為單個(gè)湍流變量;在湍流求解模塊開始前,湍流變量需要進(jìn)行虛擬單元更新操作,剩余模塊直到湍流右端項(xiàng)殘差計(jì)算模塊結(jié)束,湍流變量均保持不變。
10、進(jìn)一步的:所述步驟t100包括:步驟t101:在層流求解器初始更新虛擬單元流場(chǎng)變量q[5]時(shí),額外分配初始模塊計(jì)算流,該初始模塊包含后續(xù)計(jì)算中需要初始化的計(jì)算數(shù)據(jù),掩蓋虛擬單元流場(chǎng)變量q[5]更新時(shí)的cpu與gpu數(shù)據(jù)傳輸以及cpu與cpu間mpi通信;其次,在所述按計(jì)算變量數(shù)據(jù)相關(guān)性分解的方法構(gòu)建的節(jié)點(diǎn)高斯梯度異步多流掩蓋節(jié)點(diǎn)node值傳遞的基礎(chǔ)上,將限制器的部分模塊遷移至梯度計(jì)算完成后的虛擬單元梯度值更新模塊,兩個(gè)計(jì)算流分別對(duì)應(yīng)部分限制器模塊和虛擬單元梯度值更新模塊,兩個(gè)計(jì)算流可并發(fā)執(zhí)行,來(lái)掩蓋虛擬單元梯度值更新時(shí)的cpu與gpu數(shù)據(jù)傳輸以及cpu與cpu間mpi通信;步驟t102:當(dāng)計(jì)算流程進(jìn)行到限制器變量limit[5]剩余計(jì)算部分,該部分直到最終限制器變量limit[5]虛擬單元通信前,沒有cpu與gpu數(shù)據(jù)傳輸以及mpi間通信,此時(shí)若層流計(jì)算涉及流體粘性,則在此處并發(fā)多流執(zhí)行溫度梯度計(jì)算,使用限制器變量limit[5]的計(jì)算過程掩蓋溫度梯度計(jì)算中的虛擬單元節(jié)點(diǎn)node值、cpu與gpu數(shù)據(jù)傳輸以及mpi間通信;步驟t103:限制器變量limit[5]計(jì)算完成后,開始進(jìn)行l(wèi)imit[5]虛擬單元通信,此時(shí)使用時(shí)間步進(jìn)模塊來(lái)掩蓋其上的通信過程,時(shí)間步進(jìn)模塊計(jì)算數(shù)據(jù)僅依賴于流場(chǎng)變量q[5],limit[5]虛擬單元通信流與時(shí)間步進(jìn)模塊計(jì)算流可并發(fā)執(zhí)行;步驟t104:進(jìn)行通量flux[5]計(jì)算。
11、需要注意的是,限制器計(jì)算主要包含流場(chǎng)變量最大最小值以及部分與梯度值無(wú)關(guān)的限制器計(jì)算流程,兩個(gè)計(jì)算流可并發(fā)執(zhí)行,來(lái)掩蓋虛擬單元梯度值更新時(shí)的cpu與gpu數(shù)據(jù)傳輸以及cpu與cpu間mpi通信。
12、進(jìn)一步的:所述步驟t103包括:首先計(jì)算流體無(wú)粘性對(duì)通量flux[5]的貢獻(xiàn),該計(jì)算流程不涉及通信;若計(jì)算涉及流體粘性,將溫度梯度計(jì)算完成后的虛擬單元通信置于此處與流體無(wú)粘性對(duì)通量flux[5]的貢獻(xiàn)計(jì)算模塊并發(fā)執(zhí)行,掩蓋溫度梯度虛擬單元通信;若計(jì)算涉及流體粘性,則繼續(xù)計(jì)算流體粘性對(duì)通量flux[5]的貢獻(xiàn),此時(shí)已得到溫度涉及的所有信息,計(jì)算將不再涉及虛擬單元通信。
13、進(jìn)一步的:所述步驟t200的湍流求解模塊異步多流構(gòu)建方法包括如下步驟:步驟t201:湍流模塊的初始湍流變量虛擬單元更新,此時(shí)同步執(zhí)行湍動(dòng)能生成量計(jì)算流,該計(jì)算過程僅依賴所述層流求解模塊的數(shù)據(jù),能夠與初始湍流變量虛擬單元更新并發(fā)執(zhí)行,掩蓋其中的通信過程;步驟t202:湍流梯度計(jì)算模塊需要虛擬單元節(jié)點(diǎn)node值和湍流變量值通信以及梯度計(jì)算完成后的虛擬單元梯度值更新,將湍流粘性通量項(xiàng)和源項(xiàng)遷移至湍流梯度計(jì)算模塊,兩個(gè)計(jì)算流同步執(zhí)行,從而對(duì)通信進(jìn)行掩蓋;步驟t203:梯度計(jì)算完成后即行進(jìn)到湍流無(wú)粘通量部分,此計(jì)算模塊無(wú)虛擬單元通信,單流完成計(jì)算。
14、進(jìn)一步的:所述五個(gè)變量的梯度計(jì)算模塊包括三個(gè)速度分量u、v、w、壓力p和密度rho,且五個(gè)變量的梯度計(jì)算具有并發(fā)性,三個(gè)速度分量對(duì)稱面修正需提前完成,同時(shí)發(fā)起計(jì)算不影響計(jì)算的結(jié)果。
15、進(jìn)一步的:所述步驟t202中的湍流梯度計(jì)算對(duì)湍流粘性通量項(xiàng)和源項(xiàng)的計(jì)算無(wú)影響,將湍流粘性通量項(xiàng)和源項(xiàng)遷移至湍流梯度計(jì)算模塊,從而使兩個(gè)計(jì)算流同步執(zhí)行。
16、進(jìn)一步的:所述兩個(gè)計(jì)算流分為計(jì)算流0和計(jì)算流1。
17、綜上所述,由于采用了上述技術(shù)方案,本發(fā)明的有益效果是:
18、本發(fā)明通過基于數(shù)據(jù)依賴關(guān)系分解的cfd多gpu異步多流優(yōu)化方法,采用按計(jì)算變量數(shù)據(jù)相關(guān)性分解的方法與按計(jì)算流程數(shù)據(jù)相關(guān)性流程重構(gòu)的方法,可掩蓋層流與湍流求解器上的所有cpu與gpu數(shù)據(jù)傳輸及mpi間通信模塊,達(dá)到設(shè)備資源最大化利用率和整體性能提升的目的。
19、本發(fā)明實(shí)現(xiàn)了在多節(jié)點(diǎn)多卡異構(gòu)環(huán)境下基于mpi-x模型的cfd異步多流技術(shù),能夠在cfd計(jì)算過程有效掩蓋cpu與gpu數(shù)據(jù)傳輸及cpu與cpu間mpi通信開銷,從而顯著提升cfd應(yīng)用的整體性能。
20、本發(fā)明僅通過調(diào)整計(jì)算調(diào)用流程,不改變底層計(jì)算核心函數(shù)kernel與數(shù)據(jù)結(jié)構(gòu)的多節(jié)點(diǎn)多卡異構(gòu)并行mpi-x的異步多流cfd性能優(yōu)化技術(shù),達(dá)到實(shí)現(xiàn)異步多流在大規(guī)模cfd上的性能提升。