本發(fā)明涉及計算流體力學(xué)(cfd)的高性能計算領(lǐng)域,特別是針對大規(guī)模cpu/gpu異構(gòu)高性能計算系統(tǒng)上的cfd計算方法與結(jié)構(gòu)優(yōu)化。本發(fā)明主要聚焦于熱物理量的gpu加速計算、數(shù)據(jù)傳輸優(yōu)化以及數(shù)組結(jié)構(gòu)的適應(yīng)性改造,可應(yīng)用于寬域組合發(fā)動機內(nèi)流場的快速計算,以期達到更高的計算效率和資源利用率。
背景技術(shù):
1、在計算流體力學(xué)(cfd)的發(fā)展史上,隨著計算需求的日益增長,傳統(tǒng)的cpu中心的計算方法已逐漸顯得力不從心。寬域組合發(fā)動機是未來高速飛行器重要的動力來源。但較為嚴苛的工作性能使其在設(shè)計過程中需要進行大量的數(shù)值計算來滿足設(shè)計需求。對于百萬、千萬量級有限元網(wǎng)格的求解,目前的數(shù)值模擬需要通過上百塊的cpu并行計算來實現(xiàn),由于cpu之間的數(shù)據(jù)通信問題,并行效率并不高,這導(dǎo)致常規(guī)的數(shù)值模擬方法需要消耗大量的計算資源。特別是在熱物理量的計算領(lǐng)域,如溫度、壓力、熵等關(guān)鍵參數(shù)的精確模擬,對于預(yù)測流體行為和設(shè)計優(yōu)化至關(guān)重要。然而,這些計算任務(wù)往往需要處理大量的數(shù)據(jù)和復(fù)雜的數(shù)值方法,導(dǎo)致計算過程耗時且資源密集。
2、cpu作為計算機的運算控制核心,擅長復(fù)雜邏輯運算;而gpu作為圖形處理器,擁有大量流處理器(sp),擅長圖像數(shù)據(jù)并行處理。隨著gpu在并行處理方面的突出能力被廣泛認識,其在cfd領(lǐng)域的應(yīng)用潛力逐漸被挖掘。gpu不僅能夠提供比cpu更多的計算核心,而且其設(shè)計更適合執(zhí)行大規(guī)模并行計算任務(wù)。這使得gpu成為加速cfd仿真的理想選擇,尤其是在處理熱物理量計算這類高度并行化的任務(wù)時。
3、然而,將cfd計算從cpu遷移到gpu并非無障礙。一方面,需要解決的是數(shù)據(jù)結(jié)構(gòu)的適配問題。傳統(tǒng)的二維數(shù)組結(jié)構(gòu)在cpu上運行效率較高,但在gpu上卻可能導(dǎo)致內(nèi)存訪問的低效率和索引沖突。另一方面,cpu與gpu之間的數(shù)據(jù)交換頻繁,成為了影響計算性能的瓶頸。如何有效地管理這些數(shù)據(jù)交換,并減少通信成本,是提升cfd計算性能的關(guān)鍵。
技術(shù)實現(xiàn)思路
1、針對上述問題,本發(fā)明提供一種用于計算流體力學(xué)仿真中的gpu計算方法,解決了由于cpu與gpu之間的數(shù)據(jù)通信問題,并行效率不高,導(dǎo)致數(shù)值模擬方法需要消耗大量計算資源的問題,減少了cpu與gpu之間的通信次數(shù),降低了通信成本,提升了并行計算的效率和數(shù)據(jù)吞吐量。
2、本發(fā)明采用了以下技術(shù)方案來實現(xiàn)目的:一種用于計算流體力學(xué)仿真中的gpu計算方法,包括:
3、(1)搭建基于cpu/gpu異構(gòu)系統(tǒng)的混合編程框架;
4、(2)基于openfoam開源計算框架,建立openfoam-gpu數(shù)據(jù)結(jié)構(gòu);
5、(3)將化學(xué)計算遷移到gpu上;
6、(4)將熱物理量計算任務(wù)從cpu遷移到gpu執(zhí)行,并采用并行計算策略;
7、(5)改進內(nèi)存拷貝邏輯,減少在計算過程中g(shù)pu內(nèi)存與cpu之間的數(shù)據(jù)交換頻率;
8、(6)將原本在cpu上使用的二維數(shù)組結(jié)構(gòu)重構(gòu)為適合gpu并行計算的一維數(shù)組結(jié)構(gòu);
9、其中,所述步驟(1)中,所述搭建基于cpu/gpu異構(gòu)系統(tǒng)的混合編程框架,包括利用nvidia提供的cuda版本的基本線性代數(shù)子程序庫的cublas和cusparse函數(shù)庫對線性代數(shù)運算進行優(yōu)化,使用culatools和magma進行矩陣的分解,以及通過thrust并行算法庫進行編程,建立cpu/gpu異構(gòu)系統(tǒng)的混合編程框架;
10、所述步驟(2)中,所述基于openfoam開源計算框架,建立openfoam-gpu數(shù)據(jù)結(jié)構(gòu),包括基于openfoam原生的類進行針對gpu的重寫,結(jié)合步驟(1)搭建的cpu/gpu異構(gòu)系統(tǒng)的混合編程框架,使得gpu具備滿足openfoam計算要求的數(shù)據(jù)結(jié)構(gòu),并能對數(shù)據(jù)結(jié)構(gòu)進行編輯、計算操作;
11、所述步驟(3)中,化學(xué)計算包括以熱學(xué)相關(guān)為基礎(chǔ)的化學(xué)反應(yīng)相關(guān)類數(shù)據(jù)計算;具體地:所述將化學(xué)計算遷移到gpu上,包括在openfoam原有的chemistrymodel類上進行計算化學(xué)源項、反應(yīng)速率參數(shù)的優(yōu)化,對化學(xué)反應(yīng)源項的求解以及壓強p、溫度t、密度rho參數(shù)并行化重構(gòu);
12、所述步驟(4)中,將熱物理量計算任務(wù)從cpu遷移到gpu執(zhí)行,并采用并行計算策略包括:首先將相關(guān)物理量字段存儲于gpu內(nèi)存,然后利用thrust庫的并行算法,將計算任務(wù)分配至多個gpu線程,最后通過transform函數(shù)、make_zip_iterator和counting_iterator實現(xiàn)網(wǎng)格數(shù)據(jù)點的并行處理;
13、所述步驟(5)中,改進內(nèi)存拷貝邏輯包括:在計算前,將必要的數(shù)據(jù)統(tǒng)一拷貝到cpu內(nèi)存中,計算完成后再統(tǒng)一拷貝回gpu內(nèi)存;
14、所述步驟(6)中,所述將原本在cpu上使用的二維數(shù)組結(jié)構(gòu)轉(zhuǎn)換為適合gpu并行計算的一維數(shù)組結(jié)構(gòu),包括利用labelgpulist存儲轉(zhuǎn)換后的數(shù)據(jù),實現(xiàn)從單元格到點的字段插值的并行計算。
15、可選地,所述步驟(2)中建立openfoam-gpu數(shù)據(jù)結(jié)構(gòu)包括構(gòu)建的scalargpufield類型的數(shù)據(jù)字段,包括焓、壓力、溫度、比容、黏度和熱導(dǎo)率。
16、可選地,所述步驟(3)還具體包括定義了一個chemistrymodelcaculatefunctor<deltattype,thermotype>類的名為func的函數(shù)對象,為壓強p、溫度t、密度rho提供了相應(yīng)的處理方式,再通過thrust并行算法庫中的函數(shù)進行并行計算加速。
17、可選地,所述步驟(4)還具體包括熱物理量hepsithermo類的calculate()函數(shù)負責(zé)處理gpu內(nèi)存中的scalargpufield類型數(shù)據(jù)。
18、可選地,所述步驟(5)還具體包括首先將焓、壓力和溫度字段數(shù)據(jù)從cpu內(nèi)存?zhèn)鬏數(shù)絞pu內(nèi)存,然后,使用統(tǒng)一數(shù)據(jù)拷貝策略,將質(zhì)量、動量和焓源項數(shù)據(jù)從gpu內(nèi)存中拷貝回主機存儲??蛇x地,所述步驟(6)gpu并行計算時,還具體包括通過數(shù)據(jù)結(jié)構(gòu)重構(gòu),將二維數(shù)組展平為一維數(shù)組,利用labelgpulist存儲轉(zhuǎn)換后的數(shù)據(jù),在gpu上實現(xiàn)并行計算,通過thrust::for_each結(jié)合計數(shù)迭代器實現(xiàn)了從單元格到點的字段插值的并行計算。
19、可選地,所述步驟(5)中字段數(shù)據(jù)從cpu內(nèi)存?zhèn)鬏數(shù)絞pu內(nèi)存,利用cudamemcpyasync和cudamemcpysync函數(shù)進行數(shù)據(jù)傳輸。
20、相對于現(xiàn)有技術(shù),本發(fā)明具有如下有益效果:首先,通過將熱物理量計算遷移到gpu上,利用其并行計算能力,顯著提升了計算速度,其次,通過引入數(shù)據(jù)批量拷貝方法,減少了cpu與gpu之間的通信次數(shù),降低了通信成本,最后,通過將二維數(shù)組結(jié)構(gòu)重構(gòu)為一維數(shù)組結(jié)構(gòu),優(yōu)化了內(nèi)存訪問模式,提升了并行計算的效率和數(shù)據(jù)吞吐量。
1.一種用于計算流體力學(xué)仿真中的gpu計算方法,其特征在于,包括:
2.根據(jù)權(quán)利要求1所述的一種用于計算流體力學(xué)仿真中的gpu計算方法,其特征在于,所述步驟(2)中建立openfoam-gpu數(shù)據(jù)結(jié)構(gòu)包括構(gòu)建的scalargpufield類型的數(shù)據(jù)字段,包括焓、壓力、溫度、比容、黏度和熱導(dǎo)率。
3.根據(jù)權(quán)利要求1所述的一種用于計算流體力學(xué)仿真中的gpu計算方法,其特征在于,所述步驟(3)還具體包括定義了一個chemistrymodelcaculatefunctor<deltattype,thermotype>類的名為func的函數(shù)對象,為壓強p、溫度t、密度rho提供了相應(yīng)的處理方式,再通過thrust并行算法庫中的函數(shù)進行并行計算加速。
4.根據(jù)權(quán)利要求1所述的一種用于計算流體力學(xué)仿真中的gpu計算方法,其特征在于,所述步驟(4)還具體包括熱物理量hepsithermo類的calculate()函數(shù)負責(zé)處理gpu內(nèi)存中的scalargpufield類型數(shù)據(jù)。
5.根據(jù)權(quán)利要求1所述的一種用于計算流體力學(xué)仿真中的gpu計算方法,其特征在于,所述步驟(5)還具體包括首先將焓、壓力和溫度字段數(shù)據(jù)從cpu內(nèi)存?zhèn)鬏數(shù)絞pu內(nèi)存,然后,使用統(tǒng)一數(shù)據(jù)拷貝策略,將質(zhì)量、動量和焓源項數(shù)據(jù)從gpu內(nèi)存中拷貝回主機存儲。
6.根據(jù)權(quán)利要求1所述的一種用于計算流體力學(xué)仿真中的gpu計算方法,其特征在于,所述步驟(6)gpu并行計算時,還具體包括通過數(shù)據(jù)結(jié)構(gòu)重構(gòu),將二維數(shù)組展平為一維數(shù)組,利用labelgpulist存儲轉(zhuǎn)換后的數(shù)據(jù),在gpu上實現(xiàn)并行計算,通過thrust::for_each結(jié)合計數(shù)迭代器實現(xiàn)了從單元格到點的字段插值的并行計算。
7.根據(jù)權(quán)利要求5所述的一種用于計算流體力學(xué)仿真中的gpu計算方法,其特征在于,所述步驟(5)中字段數(shù)據(jù)從cpu內(nèi)存?zhèn)鬏數(shù)絞pu內(nèi)存,利用cudamemcpyasync和cudamemcpysync函數(shù)進行數(shù)據(jù)傳輸。