專利名稱:基于gpu的有限元顯式并行求解仿真方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)輔助工程中的有限元仿真領(lǐng)域,具體涉及一種基于GPU的有限元顯式并行求解仿真方法。
背景技術(shù):
顯式有限元計(jì)算方法不需要進(jìn)行任何方程組的求解,具有很好的穩(wěn)定性和收斂性,目前已經(jīng)被廣泛應(yīng)用于汽車碰撞和金屬薄板成形等強(qiáng)非線性問(wèn)題的仿真計(jì)算。隨著現(xiàn)代工程問(wèn)題復(fù)雜度的提升,有限元計(jì)算模型規(guī)模越來(lái)越大,對(duì)于條件穩(wěn)定的顯式有限元算法,計(jì)算時(shí)間步長(zhǎng)一般在微秒級(jí),而實(shí)際仿真時(shí)間一般達(dá)到秒級(jí),這意味著巨大的計(jì)算量。 隨著計(jì)算技術(shù)的發(fā)展,并行計(jì)算方法是解決計(jì)算效率問(wèn)題的有效手段,并且已經(jīng)在多個(gè)領(lǐng)域等到了成功的應(yīng)用?,F(xiàn)有技術(shù)的并行有限元計(jì)算方法,在技術(shù)層面上主要采用分布式計(jì)算、并行機(jī)或多線程等并行處理技術(shù),所使用的計(jì)算硬件主要是以CPU為計(jì)算核心的并行計(jì)算平臺(tái),在取得較好加速比的同時(shí)還存在以下的下足一方面,對(duì)于大規(guī)模的有限元模型,龐大的單元、節(jié)點(diǎn)規(guī)模導(dǎo)致分布式計(jì)算機(jī)之間或多線程之間的通訊消耗提升,導(dǎo)致加速比難以提升;另一方面,并行機(jī)價(jià)格昂貴,使用和維護(hù)相對(duì)復(fù)雜,對(duì)研究人員算法改寫和編程能力要求也較高,難于普及。此外,目前基于GPU和CUDA的通用計(jì)算平臺(tái),硬件成本低,軟件實(shí)現(xiàn)容易,計(jì)算效率提升明顯,目前已成為國(guó)內(nèi)外一個(gè)新的研究熱點(diǎn),目前在力學(xué)領(lǐng)域,顯式有限元計(jì)算仍然不能利用基于GPU和CUDA的通用計(jì)算平臺(tái)來(lái)實(shí)現(xiàn)并行求解仿真。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問(wèn)題是提供一種運(yùn)算速度快、計(jì)算成本低、硬件成本低,使用簡(jiǎn)單方便,尤其適用于板料成形優(yōu)化、汽車碰撞等力學(xué)領(lǐng)域的非線性計(jì)算的基于GPU的有限元顯式并行求解仿真方法。為了解決上述技術(shù)問(wèn)題,本發(fā)明采用的技術(shù)方案為一種基于GPU的有限元顯式并行求解仿真方法,其實(shí)施步驟如下I)將有限元計(jì)算模型數(shù)據(jù)讀入主機(jī)內(nèi)存中,通過(guò)主機(jī)CPU識(shí)別所述有限元計(jì)算模型數(shù)據(jù)中的節(jié)點(diǎn)和單元,找到每一個(gè)節(jié)點(diǎn)歸屬的單元并保存節(jié)點(diǎn)和單元之間的歸屬關(guān)系,將所述有限元計(jì)算模型數(shù)據(jù)讀入GPU全局存儲(chǔ)器;2)設(shè)定GPU執(zhí)行的線程塊數(shù)量和每一個(gè)線程塊所包含的線程數(shù)量;3)通過(guò)GPU讀取所述GPU全局存儲(chǔ)器中存儲(chǔ)的有限元計(jì)算模型數(shù)據(jù),并根據(jù)線程塊數(shù)量和每一個(gè)線程塊所包含的線程數(shù)量,通過(guò)多線程的方法計(jì)算單元的最小時(shí)間步長(zhǎng)、各個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)加速度以及各個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)作用力;4)判斷是否需要輸出計(jì)算結(jié)果,如果需要?jiǎng)t采用異步的方式將GPU全局存儲(chǔ)器上的計(jì)算結(jié)果復(fù)制到主機(jī)的內(nèi)存中,并寫入到輸出文件;通過(guò)CPU判斷總仿真時(shí)間或者總迭代次數(shù)是否達(dá)到設(shè)定值,如果達(dá)到設(shè)定值則退出;否則返回執(zhí)行步驟3)。
所述步驟3)的詳細(xì)步驟包括3. I)通過(guò)GPU讀取GPU全局存儲(chǔ)器中存儲(chǔ)的所有單元數(shù)據(jù),然后采用線程與單元一一對(duì)應(yīng)的執(zhí)行方式計(jì)算出每個(gè)單元對(duì)應(yīng)的時(shí)間步長(zhǎng),并通過(guò)并行縮減的方法在所述時(shí)間步長(zhǎng)中查找最小值作為最小時(shí)間步長(zhǎng);3. 2)通過(guò)GPU讀取GPU全局存儲(chǔ)器中存儲(chǔ)的所有節(jié)點(diǎn)數(shù)據(jù),然后采用線程與節(jié)點(diǎn)--對(duì)應(yīng)的執(zhí)行方式計(jì)算每個(gè)所述節(jié)點(diǎn)所對(duì)應(yīng)的節(jié)點(diǎn)加速度;3. 3)通過(guò)GPU根據(jù)約束邊界條件以及所述最小時(shí)間步長(zhǎng)、節(jié)點(diǎn)加速度采用線程與節(jié)點(diǎn)對(duì)應(yīng)的方法計(jì)算出每個(gè)節(jié)點(diǎn)新的速度和位移;3. 4)通過(guò)GPU讀取GPU全局存儲(chǔ)器中存儲(chǔ)的所有節(jié)點(diǎn)數(shù)據(jù)和單元數(shù)據(jù),然后GPU根據(jù)有限元計(jì)算模型的力邊界條件計(jì)算得到各個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)外力,通過(guò)并行運(yùn)算的方法分 別計(jì)算各個(gè)單元的單元內(nèi)力,采用線程與節(jié)點(diǎn)一一對(duì)應(yīng)的執(zhí)行方式將單元內(nèi)力離散到整體節(jié)點(diǎn)內(nèi)力中,采用線程與節(jié)點(diǎn)一一對(duì)應(yīng)的執(zhí)行方式將節(jié)點(diǎn)外力和整體節(jié)點(diǎn)內(nèi)力做差值運(yùn)算得到各個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)作用力。本發(fā)明具有下述優(yōu)點(diǎn)I、本發(fā)明的并行計(jì)算基于GPU通用計(jì)算平臺(tái)實(shí)現(xiàn),具有計(jì)算成本低,通用性強(qiáng)的優(yōu)點(diǎn)。2、本發(fā)明在顯式有限元計(jì)算的全部迭代過(guò)程均移植到GPU上進(jìn)行計(jì)算,數(shù)據(jù)輸出采用異步執(zhí)行的方式,從而有效避免了由于主機(jī)與GPU的數(shù)據(jù)交換所產(chǎn)生的額外時(shí)間。3、本發(fā)明能夠充分利用GPU計(jì)算特性,保證了程序的計(jì)算效率,能夠利用現(xiàn)有的NVIDIA公司所提供的免費(fèi)數(shù)值計(jì)算庫(kù)CUBLAS,保證了程序代碼的簡(jiǎn)潔性和可操作性。4、本實(shí)施例通過(guò)在程序開始階段查找到每個(gè)節(jié)點(diǎn)所歸屬的單元,并記錄到相關(guān)數(shù)據(jù)中,從而避免了單元作用力與離散節(jié)點(diǎn)作用力操作在GTO上并行執(zhí)行時(shí)所產(chǎn)生的并行競(jìng)寫錯(cuò)誤。5、本發(fā)明進(jìn)一步在采用GPU進(jìn)行計(jì)算時(shí),根據(jù)所計(jì)算對(duì)象的不同,分別采用不同的線程映射模式,主要包括兩種映射模式單元與線程的一一映射,節(jié)點(diǎn)與線程的一一映射。6、本發(fā)明通過(guò)建立有限元模型和GPU線程之間的映射關(guān)系,針對(duì)非線性問(wèn)題,在保證求解精度的前提下,能夠大幅度提高顯式有限元算法的計(jì)算效率。同傳統(tǒng)的顯式有限元并行計(jì)算方法不同,本發(fā)明通過(guò)建立有限元計(jì)算模型中的單元或節(jié)點(diǎn)與GPU線程間的一一對(duì)應(yīng)關(guān)系,利用GPU所提供大規(guī)模計(jì)算線程,在計(jì)算流程中由一個(gè)線程負(fù)責(zé)一個(gè)單元或節(jié)點(diǎn)的計(jì)算,從而能夠在包含成百上千個(gè)處理核心的GPU上并行、高效的實(shí)現(xiàn)顯式有限元計(jì)算以及在工程中應(yīng)用,具有高效、計(jì)算成本低的特點(diǎn),能夠應(yīng)用于任何力學(xué)領(lǐng)域有限元問(wèn)題的求解,尤其適用于類似于板料成形優(yōu)化、汽車碰撞等的非線性計(jì)算領(lǐng)域。
圖I為本發(fā)明實(shí)施例的實(shí)施流程示意圖。圖2為用于驗(yàn)證本發(fā)明實(shí)施例的Spherical cap模型示意圖。圖3為本發(fā)明實(shí)施例與傳統(tǒng)CPU并行計(jì)算結(jié)果的精度對(duì)比示意圖。
具體實(shí)施例方式如圖I所示,本實(shí)施例基于GPU的有限元顯式并行求解仿真方法的實(shí)施步驟如下I)將有限元計(jì)算模型數(shù)據(jù)讀入主機(jī)內(nèi)存中;通過(guò)主機(jī)CPU識(shí)別有限元計(jì)算模型數(shù)據(jù)中的節(jié)點(diǎn)和單元,找到每一個(gè)節(jié)點(diǎn)歸屬的單元并保存節(jié)點(diǎn)和單元之間的歸屬關(guān)系;將有限元計(jì)算模型數(shù)據(jù)讀入GPU全局存儲(chǔ)器;2)設(shè)定GPU執(zhí)行的線程塊數(shù)量和每一個(gè)線程塊所包含的線程數(shù)量;3)通過(guò)GPU讀取GPU全局存儲(chǔ)器中存儲(chǔ)的有限元計(jì)算模型數(shù)據(jù),并根據(jù)線程塊數(shù)量和每一個(gè)線程塊所包含的線程數(shù)量,通過(guò)多線程的方法計(jì)算單元的最小時(shí)間步長(zhǎng)、各個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)加速度以及各個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)作用力;4)判斷是否需要輸出計(jì)算結(jié)果,如果需要?jiǎng)t采用異步的方式將GPU全局存儲(chǔ)器上 的計(jì)算結(jié)果復(fù)制到主機(jī)的內(nèi)存中,并寫入到輸出文件;通過(guò)CPU判斷總仿真時(shí)間或者總迭代次數(shù)是否達(dá)到設(shè)定值,如果達(dá)到設(shè)定值則退出;否則返回執(zhí)行步驟3)。其中,步驟3)的詳細(xì)步驟包括3. I)通過(guò)GPU讀取GPU全局存儲(chǔ)器中存儲(chǔ)的所有單元數(shù)據(jù),然后采用線程與單元一一對(duì)應(yīng)的執(zhí)行方式計(jì)算出每個(gè)單元對(duì)應(yīng)的時(shí)間步長(zhǎng),并通過(guò)并行縮減的方法在時(shí)間步長(zhǎng)中查找最小值作為最小時(shí)間步長(zhǎng);3. 2)通過(guò)GPU讀取GPU全局存儲(chǔ)器中存儲(chǔ)的所有節(jié)點(diǎn)數(shù)據(jù),然后采用線程與節(jié)點(diǎn)一一對(duì)應(yīng)的執(zhí)行方式計(jì)算每個(gè)節(jié)點(diǎn)所對(duì)應(yīng)的節(jié)點(diǎn)加速度;3. 3)通過(guò)GPU根據(jù)約束邊界條件以及最小時(shí)間步長(zhǎng)、節(jié)點(diǎn)加速度采用線程與節(jié)點(diǎn)對(duì)應(yīng)的方法計(jì)算出每個(gè)節(jié)點(diǎn)新的速度和位移;3. 4)通過(guò)GPU讀取GPU全局存儲(chǔ)器中存儲(chǔ)的所有節(jié)點(diǎn)數(shù)據(jù)和單元數(shù)據(jù),然后GPU根據(jù)有限元計(jì)算模型的力邊界條件計(jì)算得到各個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)外力,通過(guò)并行運(yùn)算的方法分別計(jì)算各個(gè)單元的單元內(nèi)力,采用線程與節(jié)點(diǎn)一一對(duì)應(yīng)的執(zhí)行方式將單元內(nèi)力離散到整體節(jié)點(diǎn)內(nèi)力中,采用線程與節(jié)點(diǎn)一一對(duì)應(yīng)的執(zhí)行方式將節(jié)點(diǎn)外力和整體節(jié)點(diǎn)內(nèi)力做差值運(yùn)算得到各個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)作用力。本實(shí)施例中使用的有限元計(jì)算模型數(shù)據(jù)包括1600個(gè)四邊形單元和1681個(gè)節(jié)點(diǎn)。本實(shí)施例中針對(duì)該有限元計(jì)算模型數(shù)據(jù)的具體實(shí)施步驟如下第一步將有限元計(jì)算模型數(shù)據(jù)(包括模型網(wǎng)格信息、單元信息、節(jié)點(diǎn)信息、邊界信息、材料參數(shù)等)存儲(chǔ)到輸入文件input, inp中。在程序運(yùn)行界面輸入input, inp, input,inp中的數(shù)據(jù)將被程序讀取到主機(jī)內(nèi)存中,本實(shí)施例中以A。表示主機(jī)內(nèi)存中的有限元計(jì)算模型數(shù)據(jù)。一個(gè)標(biāo)準(zhǔn)的input, inp文件格式如下
權(quán)利要求
1.一種基于GPU的有限元顯式并行求解仿真方法,其特征在于其實(shí)施步驟如下 1)將有限元計(jì)算模型數(shù)據(jù)讀入主機(jī)內(nèi)存中,通過(guò)主機(jī)CPU識(shí)別所述有限元計(jì)算模型數(shù)據(jù)中的節(jié)點(diǎn)和單元,找到每一個(gè)節(jié)點(diǎn)歸屬的單元并保存節(jié)點(diǎn)和單元之間的歸屬關(guān)系,將所述有限元計(jì)算模型數(shù)據(jù)讀入GPU全局存儲(chǔ)器; 2)設(shè)定GPU執(zhí)行的線程塊數(shù)量和每一個(gè)線程塊所包含的線程數(shù)量; 3)通過(guò)GPU讀取所述GPU全局存儲(chǔ)器中存儲(chǔ)的有限元計(jì)算模型數(shù)據(jù),并根據(jù)線程塊數(shù)量和每一個(gè)線程塊所包含的線程數(shù)量,通過(guò)多線程的方法計(jì)算單元的最小時(shí)間步長(zhǎng)、各個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)加速度以及各個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)作用力; 4)判斷是否需要輸出計(jì)算結(jié)果,如果需要?jiǎng)t采用異步的方式將GPU全局存儲(chǔ)器上的計(jì)算結(jié)果復(fù)制到主機(jī)的內(nèi)存中,并寫入到輸出文件;通過(guò)CPU判斷總仿真時(shí)間或者總迭代次數(shù)是否達(dá)到設(shè)定值,如果達(dá)到設(shè)定值則退出;否則返回執(zhí)行步驟3)。
2.根據(jù)權(quán)利要求I所述的基于GPU的有限元顯式并行求解仿真方法,其特征在于,所述步驟3)的詳細(xì)步驟包括` 3.I)通過(guò)GPU讀取GPU全局存儲(chǔ)器中存儲(chǔ)的所有單元數(shù)據(jù),然后采用線程與單元一一對(duì)應(yīng)的執(zhí)行方式計(jì)算出每個(gè)單元對(duì)應(yīng)的時(shí)間步長(zhǎng),并通過(guò)并行縮減的方法在所述時(shí)間步長(zhǎng)中查找最小值作為最小時(shí)間步長(zhǎng); `3.2)通過(guò)GPU讀取GPU全局存儲(chǔ)器中存儲(chǔ)的所有節(jié)點(diǎn)數(shù)據(jù),然后采用線程與節(jié)點(diǎn)一一對(duì)應(yīng)的執(zhí)行方式計(jì)算每個(gè)所述節(jié)點(diǎn)所對(duì)應(yīng)的節(jié)點(diǎn)加速度; `3.3)通過(guò)GPU根據(jù)約束邊界條件以及所述最小時(shí)間步長(zhǎng)、節(jié)點(diǎn)加速度采用線程與節(jié)點(diǎn)對(duì)應(yīng)的方法計(jì)算出每個(gè)節(jié)點(diǎn)新的速度和位移; ` 3.4)通過(guò)GPU讀取GPU全局存儲(chǔ)器中存儲(chǔ)的所有節(jié)點(diǎn)數(shù)據(jù)和單元數(shù)據(jù),然后GPU根據(jù)有限元計(jì)算模型的力邊界條件計(jì)算得到各個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)外力,通過(guò)并行運(yùn)算的方法分別計(jì)算各個(gè)單元的單元內(nèi)力,采用線程與節(jié)點(diǎn)一一對(duì)應(yīng)的執(zhí)行方式將單元內(nèi)力離散到整體節(jié)點(diǎn)內(nèi)力中,采用線程與節(jié)點(diǎn)一一對(duì)應(yīng)的執(zhí)行方式將節(jié)點(diǎn)外力和整體節(jié)點(diǎn)內(nèi)力做差值運(yùn)算得到各個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)作用力。
全文摘要
本發(fā)明公開了一種基于GPU的有限元顯式并行求解仿真方法,實(shí)施步驟如下1)將數(shù)據(jù)讀入主機(jī)內(nèi)存中,通過(guò)主機(jī)CPU識(shí)別有限元計(jì)算模型數(shù)據(jù)中的節(jié)點(diǎn)和單元,查找并保存節(jié)點(diǎn)和單元之間的歸屬關(guān)系,將所述有限元計(jì)算模型數(shù)據(jù)讀入GPU全局存儲(chǔ)器;2)設(shè)定GPU執(zhí)行參數(shù);3)通過(guò)GPU讀取GPU全局存儲(chǔ)器中存儲(chǔ)的數(shù)據(jù),根據(jù)GPU執(zhí)行參數(shù)通過(guò)多線程的方法計(jì)算各個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)作用力;4)選擇性輸出計(jì)算結(jié)果,CPU根據(jù)收斂判斷情況決定退出或者返回執(zhí)行步驟3)。本發(fā)明具有運(yùn)算速度快、計(jì)算成本低、硬件成本低,使用簡(jiǎn)單方便,尤其適用于板料成形仿真優(yōu)化、汽車碰撞仿真等力學(xué)領(lǐng)域的動(dòng)態(tài)非線性計(jì)算。
文檔編號(hào)G06F9/46GK102819454SQ20121026643
公開日2012年12月12日 申請(qǐng)日期2012年7月30日 優(yōu)先權(quán)日2012年7月30日
發(fā)明者蔡勇, 李光耀, 王琥, 鄭剛 申請(qǐng)人:湖南大學(xué)