蔡云龍,肖素梅,齊龍
西南科技大學(xué)制造科學(xué)與工程學(xué)院,四川綿陽 621010
基于GPU的加鎖并行化非結(jié)構(gòu)網(wǎng)格生成方法研究
蔡云龍,肖素梅,齊龍
西南科技大學(xué)制造科學(xué)與工程學(xué)院,四川綿陽 621010
非結(jié)構(gòu)網(wǎng)格的生成在時(shí)間和內(nèi)存上有一定的缺陷,這里提出了一種新的方法,命名為GPU-PDMG,是基于CUDA架構(gòu)的GPU并行非結(jié)構(gòu)網(wǎng)格生成技術(shù)。該技術(shù)結(jié)合了GPU的高速并行計(jì)算能力與Delaunay三角化的優(yōu)點(diǎn),在英偉達(dá)GPU模塊下采用CUDA程序模型,開發(fā)出了加鎖并行區(qū)劃分技術(shù),通過對NACA0012翼型、多段翼型等算例進(jìn)行測試,分析此方法的加速比和效率,對其計(jì)算性能展開評估。實(shí)驗(yàn)結(jié)果表明,GPU-PDMG優(yōu)于現(xiàn)存在的CPU算法的速度,在保證網(wǎng)格質(zhì)量的同時(shí),提高了效率。
非結(jié)構(gòu)網(wǎng)格;并行域;加鎖;圖形處理單元(GPU);加速比
為了提高飛行器的氣動性能,網(wǎng)格生成可以說是至關(guān)重要的一步,需要優(yōu)質(zhì)的網(wǎng)格來準(zhǔn)確捕捉復(fù)雜的物理現(xiàn)象[1]。計(jì)算網(wǎng)格按網(wǎng)格點(diǎn)之間的鄰接關(guān)系可分為結(jié)構(gòu)網(wǎng)格、非結(jié)構(gòu)網(wǎng)格和混合網(wǎng)格等。上述網(wǎng)格均已成功地應(yīng)用于實(shí)際外形的計(jì)算中,并取得較大的成功,各有優(yōu)點(diǎn),但也各有不足。
非結(jié)構(gòu)網(wǎng)格對描述和離散復(fù)雜幾何外形有良好的通用性,但是由于其數(shù)據(jù)的隨機(jī)性[2],導(dǎo)致需要大量的存儲空間和計(jì)算時(shí)間?,F(xiàn)如今擁有大型計(jì)算能力的計(jì)算系統(tǒng)解決了具有數(shù)以千萬節(jié)點(diǎn)網(wǎng)格的問題。然而,在單一機(jī)器上生成如此大規(guī)模、高質(zhì)量的網(wǎng)格,還是給CPU帶來了時(shí)間和內(nèi)存需求上的挑戰(zhàn)[3]。比如說,即使在目前工藝水平所能提供的浮動運(yùn)算速度最快、容量最大的超級計(jì)算機(jī)上進(jìn)行計(jì)算一個(gè)三維非定常問題的數(shù)值模擬可能也要花費(fèi)較長的時(shí)間,數(shù)值模擬精度的提高勢必要求有更大規(guī)模的網(wǎng)格量網(wǎng)格的細(xì)化,必然要求更大的儲存量、計(jì)算量和更多的迭代步數(shù),這都將使計(jì)算時(shí)間增加、效率降低。所以,一方面需要高速度、大容量的計(jì)算機(jī),另一方面要開發(fā)并行軟件程序,以實(shí)現(xiàn)大規(guī)模高效并行計(jì)算。
加鎖并行的網(wǎng)格生成技術(shù)研究正是在這一背景下展開的。圖形處理單元(簡稱GPU)由于自身強(qiáng)大的并行計(jì)算能力,被應(yīng)用于各種算例的數(shù)值計(jì)算中。采用基于GPU的CUDA[4]程序模型擁有健全的數(shù)值計(jì)算能力,比現(xiàn)如今存在的CPU數(shù)值算法都要優(yōu)越[5]。
因此本文提出一種基于GPU的加鎖并行化非結(jié)構(gòu)網(wǎng)格生成技術(shù)[6],用于解決生成大規(guī)模網(wǎng)格的CPU內(nèi)存和時(shí)間上的瓶頸。
為對某些復(fù)雜工程進(jìn)行更精細(xì)的模擬和分析,往往要生成包含多達(dá)幾千萬甚至上億單元的體網(wǎng)格。為解決由此帶來的內(nèi)存和時(shí)間性能瓶頸,國外十幾年前開始關(guān)注并行網(wǎng)格生成算法的研究,目前國內(nèi)的浙江大學(xué)和南京航空航天大學(xué)在這一領(lǐng)域取得了一定的進(jìn)展。南航采取的陣面推進(jìn)方法[7]實(shí)現(xiàn)網(wǎng)格的并行生成,而浙大方面利用Delaunay三角剖分法[8]。雖然方法不同,但兩者都是通過多CPU的并行實(shí)現(xiàn)的。
基于上述已經(jīng)探究的并行方案,將采取在GPU上實(shí)現(xiàn)網(wǎng)格劃分功能,結(jié)合GPU高速性能的優(yōu)點(diǎn),來達(dá)到網(wǎng)格加速生成的目的,得出方案如下:
首先,在CPU端上初始化算法的基本參數(shù);再者,從CPU端上讀取輸入文件,即劃分區(qū)域的離散化文件;隨后,在CPU端生成背景網(wǎng)格文件,將其存入內(nèi)存中;最后,將背景網(wǎng)格數(shù)據(jù)傳入GPU端的顯存。數(shù)據(jù)導(dǎo)入工作結(jié)束后,就可以正式在GPU上進(jìn)行非結(jié)構(gòu)網(wǎng)格的劃分工作了。利用主機(jī)端控制著算法的迭代過程,而迭代中的每個(gè)步驟都在設(shè)備端上執(zhí)行。主機(jī)端通過循環(huán)變量控制著循環(huán)體中的各個(gè)步驟,都由CUDA內(nèi)核函數(shù)[9]來實(shí)現(xiàn)。通過這種方式,就可達(dá)到在非結(jié)構(gòu)網(wǎng)格劃分算法的每一次迭代中能并行地實(shí)現(xiàn)多區(qū)域自動插點(diǎn)的目的。當(dāng)主機(jī)端控制的循環(huán)結(jié)束后,設(shè)備端上的運(yùn)算告一段落,算法迭代產(chǎn)生的網(wǎng)格數(shù)據(jù)被傳回CPU中。
這種方案減少了CPU與GPU二者之間的通信,只有讀取輸入文件和生成待剖分區(qū)域的背景網(wǎng)格在主機(jī)端完成,剩余的工作交給GPU來執(zhí)行。這種方案加速了程序的運(yùn)行效率,解決了基于GPU的非結(jié)構(gòu)網(wǎng)格生成技術(shù)改造的關(guān)鍵問題。因此,本文采取該方案作為并行分區(qū)的研究方向。
與傳統(tǒng)的非結(jié)構(gòu)網(wǎng)格并行生成(簡稱為CPU-PDMG)方法相比,本文提出的基于GPU的加鎖并行化非結(jié)構(gòu)網(wǎng)格生成方法(簡稱為GPU-PDMG),不用在多個(gè)CPU上分別執(zhí)行序列化網(wǎng)格生成算法[10]生成子網(wǎng)格,而是將劃分網(wǎng)格的工作交給GPU來做,利用其自身的特點(diǎn)來達(dá)到并行化的目的。
基于GPU的加鎖并行化非結(jié)構(gòu)網(wǎng)格生成方法的整體框架如圖1所示。
圖1 GPU-PDMG基本框架
3.1 搜索背景網(wǎng)格中滿足條件的狹長單元
將傳入設(shè)備端的背景網(wǎng)格數(shù)據(jù),以三角單元elem的形式分配給每個(gè)GPU線程,并計(jì)算出在GPU中對應(yīng)的線程位置tx,用線程塊blockId和線程threadId進(jìn)行表示,對應(yīng)的公式如下:
在每個(gè)線程tx上同時(shí)進(jìn)行三角單元狀態(tài)的搜索,找個(gè)滿足條件的三角單元,其狀態(tài)設(shè)為活躍,將這些三角單元的編號存入狹長單元Ugly。然后,采用分步歸約的方法,獲得最狹長的單元ugly,該單元要滿足條件:
elem[tid].R為單元外接圓的半徑,elem[tid].r為單元內(nèi)切圓的半徑。
3.2 獲得每次迭代的并行域
初始化時(shí),所有單元的鎖初始化為0(即沒有上鎖狀態(tài)),然后依據(jù)最狹長單元得到待插入新節(jié)點(diǎn)的位置坐標(biāo)(x,y),利用空外接圓性質(zhì),當(dāng)滿足待插入點(diǎn)到單元外接圓圓心(xv,yv)的距離小于該單元外接圓半徑時(shí),單元就被存入鎖域中。
判斷鎖域中單元的鎖是否為0:如果鎖域中單元鎖全部為0,則將單元鎖修改為1(即上鎖狀態(tài));如果鎖域中單元鎖不全部為0,則放棄加鎖,將該狹長單元的鎖修改為2。單元鎖全部為1的鎖域就是一個(gè)并行區(qū),然后將結(jié)果存入并行域中。
圖2 連續(xù)線程的歸約
3.3 對當(dāng)前并行域執(zhí)行逐步插點(diǎn)操作
由上一步得到的插入點(diǎn)坐標(biāo)位置,便可找到包含該點(diǎn)的單元,隨后將插入點(diǎn)與該單元的三個(gè)頂點(diǎn)連接起來,這樣就增加兩個(gè)新單元和三條新邊,對新增加的單元和邊進(jìn)行編號。最后,新單元進(jìn)行循環(huán)操作。
3.4 對并行域內(nèi)進(jìn)行邊交換操作
首先在搜索前將邊的交換狀態(tài)初始化為0,接著對并行區(qū)域內(nèi)的每條邊進(jìn)行搜索,從第一條邊開始,在此利用Delaunay法則進(jìn)行判斷,共邊三角形單元是否需要交換對角線。如果符合條件,則邊的交換狀態(tài)為1,執(zhí)行邊交換操作;反之,進(jìn)入下一次迭代,直至并行域內(nèi)所有的邊都被搜索過。
4.1 搜索最狹長單元
首先要獲得背景網(wǎng)格中的狹長單元集,其次要計(jì)算出這些狹長單元的外接圓半徑R,內(nèi)切圓半徑r,最后通過比較函數(shù)得到狹長單元集中,其外接圓半徑與內(nèi)切圓半徑比值最大的一個(gè)。具體見以下幾步:
步驟1對單元的狀態(tài)進(jìn)行分類,可分為可接受單元和不可接受單元。不可接受的單元又可以分為活躍的(Active)和等待的(Waiting)?;钴S狀態(tài)的單元是該單元位于剖分區(qū)域邊界上或鄰單元至少有一個(gè)是可接受的,等待狀態(tài)的單元是該單元的鄰單元都是不可接受的。將處于活躍狀態(tài)的單元存入狹長單元集中。
步驟2計(jì)算出外接圓半徑R和內(nèi)切圓半徑r,采用向量方式求解,在二維情況下,令A(yù)(xA,yA),B(xB,yB),C(xC,yC)。首先可以得到AB邊的中點(diǎn)坐標(biāo)AB(xAB,yAB)和BC邊的中點(diǎn)坐標(biāo)BC(xBC,yBC),令:
當(dāng)Den>0時(shí),則可得到外接圓的圓心坐標(biāo):
令三條邊分別為sA,sB,sC周長為C=sA+sB+sC,則內(nèi)切圓的半徑r=Det/C。
步驟3尋找狹長單元集中比值R/r最大的狹長單元。
為了減少比較大小的操作次數(shù),采用排序法,將狹長單元集中所有的元素從大到小排序,把結(jié)果存入數(shù)組中。隨著網(wǎng)格數(shù)量的增加,排序耗時(shí)也線性增加,不利于大規(guī)模網(wǎng)格的生成。為了解決排序耗時(shí)的問題,采取并行歸約的方法。把歸約抽象為一般形式:對一個(gè)輸入數(shù)組執(zhí)行某種計(jì)算,然后產(chǎn)生一個(gè)更小的結(jié)果數(shù)組,如圖2所示。
在GPU中有大量的線程可以使用,因此以并行的方式來執(zhí)行歸約運(yùn)算,這樣所花的時(shí)間將與數(shù)組長度的對數(shù)成正比。故此,狹長單元集中元素的排序時(shí)間大幅度縮減。
4.2 加鎖機(jī)制
非結(jié)構(gòu)網(wǎng)格的并行生成,首要的就是待剖分區(qū)域的劃分。而本文的目的是實(shí)現(xiàn)剖分區(qū)域的自動劃分,將每個(gè)剖分動作交付給一個(gè)線程去執(zhí)行,達(dá)到GPU并行加速的目的。目前常用的做法是人為進(jìn)行分塊,然后將每塊交給一個(gè)CPU核來處理,最后再將各個(gè)子區(qū)域的網(wǎng)格進(jìn)行合并。但這種方法不適用在GPU上實(shí)現(xiàn)大規(guī)模的并行,且目前還沒有很好的手段來解決公共邊界的問題。針對上述的問題,本文采取加鎖機(jī)制,將各個(gè)子區(qū)域之間的耦合關(guān)系切斷,這就可避開公共邊界的問題,大大減小了算法的復(fù)雜度,將并行效率得到提升。
步驟1初始化單元鎖,在實(shí)際編程中,在單元結(jié)構(gòu)體中設(shè)定一個(gè)全局變量lock:
當(dāng)lock為0時(shí),單元未被鎖上,lock為1時(shí)表示該單元被鎖上,lock為2時(shí),表示此時(shí)的狹長單元所關(guān)聯(lián)的區(qū)域內(nèi),有元素處于上鎖狀態(tài),這時(shí)放棄為子區(qū)域加鎖,將該鎖的狀態(tài)記為2。
步驟2人為給單元鎖賦值,假如令335號單元的鎖為2,得到劃分后的效果圖如圖3所示。
圖3335 號單元加鎖的效果圖
從圖3(a)中可以看出,給單元加鎖的機(jī)制已經(jīng)實(shí)現(xiàn)了,但不是理想中的效果,加上鎖的單元本應(yīng)該不能被修改,圖中的335號單元被修改過,將這種現(xiàn)象稱為“單元漂移”。圖3(b)是正確的335號單元加鎖效果圖。
4.3 并行區(qū)域的劃分技術(shù)
非結(jié)構(gòu)網(wǎng)格的并行生成,首先是剖分區(qū)域的分塊問題,分塊的思想在加鎖機(jī)制中已經(jīng)涉及到。文中借鑒多塊分區(qū)的思想,將每個(gè)子區(qū)域在GPU上執(zhí)行劃分工作。在程序結(jié)構(gòu)設(shè)計(jì)方面:程序采用雙層循環(huán)設(shè)計(jì),內(nèi)層循環(huán)迭代一次就可找到當(dāng)前所有的并行區(qū)域,外層循環(huán)控制著并行區(qū)域的數(shù)量,直至沒有并行區(qū)域。
圖4即NACA0012并行區(qū)域劃分效果圖,(a)圖表示的是整個(gè)剖分區(qū)域,(b)圖表示的是外層循環(huán)迭代一次產(chǎn)生的所有并行區(qū)。
圖4 NACA0012翼型并行區(qū)劃分
從圖4中可以發(fā)現(xiàn)三點(diǎn)現(xiàn)象:
(1)NACA0012翼型第一次循環(huán)產(chǎn)生9個(gè)并行區(qū);
(2)每個(gè)并行區(qū)大小不同,形狀各異;
(3)產(chǎn)生并行區(qū)后圖與待剖分區(qū)域圖相比,有空白區(qū)域。
本實(shí)驗(yàn)是基于這樣的平臺開展的:CPU為Intel?CoreTMCPU i3-2120,主頻為3.30 GHz,安裝內(nèi)存為8.00 GB,系統(tǒng)類型為Win7 64位操作系統(tǒng),顯卡采用NVIDIA GeForce GTX 560 SE,該顯卡擁有288個(gè)CUDA Cores,其計(jì)算能力為2.1,GPU的驅(qū)動版本為CUDA 4.2。通過該平臺,對NACA0012與多段翼型進(jìn)行了兩組實(shí)例的網(wǎng)格劃分實(shí)驗(yàn),得出以下結(jié)論:
隨著迭代次數(shù)的增加,每次迭代時(shí)產(chǎn)生并行區(qū)的數(shù)量也在增加;當(dāng)并行區(qū)的數(shù)量達(dá)到峰值時(shí),迭代次數(shù)的值增加,并行區(qū)的數(shù)量反而降低,直至并行區(qū)的數(shù)量為零,網(wǎng)格劃分結(jié)束。二者的關(guān)系呈類拋物線變化。
將對NACA0012翼型與多段翼型的網(wǎng)格劃分結(jié)果進(jìn)行分析,圖5與圖6是串行非結(jié)構(gòu)網(wǎng)格生成方法生成的網(wǎng)格和GPU下并行方法生成的網(wǎng)格之間的對比。從這兩組對比圖可以看出,串行的非結(jié)構(gòu)網(wǎng)格生成技術(shù)產(chǎn)生的網(wǎng)格單元排列有序,而基于GPU并行的網(wǎng)格單元看上去有些雜亂無章。產(chǎn)生這一現(xiàn)象的原因是,串行非結(jié)構(gòu)網(wǎng)格生成技術(shù)采用的是逐步插點(diǎn)的思想,程序每迭代一次只插入一個(gè)點(diǎn),然后交換邊,接著網(wǎng)格優(yōu)化;而基于GPU的并行技術(shù)采取的是隨機(jī)分配并行區(qū),采用多線程并行分塊插點(diǎn)方法,所以產(chǎn)生的網(wǎng)格單元排列比較混亂。
圖5 NACA0012翼型網(wǎng)格圖
圖6 多段翼型網(wǎng)格圖
表1與表2給出了NACA0012翼型與多段翼型在兩種情況下網(wǎng)格生成時(shí)間以及加速比等對比數(shù)據(jù)。在并行算法的設(shè)計(jì)中,采用加鎖機(jī)制,避開公共邊界的問題,并行效率得到提升。時(shí)間消耗在狹長單元的搜索上,逐點(diǎn)插入與狹長單元判據(jù)使得整體效率被拉低。所以,在狹長單元搜索存在缺陷的情況下,比對數(shù)據(jù),得到的加速比效果理想,達(dá)到了要求。在NACA0012翼型整體加速比在網(wǎng)格單元為6萬級別時(shí)約為3.6,多段翼型整體加速比在網(wǎng)格單元為5萬級別時(shí)約為2.3,可見加速效果明顯。
表1 NACA0012翼型在CPU和GPU下網(wǎng)格生成情況
表2 多段翼型在CPU和GPU下網(wǎng)格生成情況
本文提出了一種基于GPU的加鎖并行化非結(jié)構(gòu)網(wǎng)格生成技術(shù),建立了GPU-PDMG框架模型,針對其算法與核心技術(shù)進(jìn)行了設(shè)計(jì),應(yīng)用于NACA0012翼型與多段翼型的二維網(wǎng)格劃分,并對網(wǎng)格生成效率產(chǎn)生了積極影響,得出以下結(jié)論:
(1)選取逐點(diǎn)插入算法[11]實(shí)現(xiàn)了并行化改造并針對目前分布式并行技術(shù)的不足,提出了并行域劃分加鎖機(jī)制,實(shí)現(xiàn)了計(jì)算域網(wǎng)格的自動劃分。
(2)對比串行CPU非結(jié)構(gòu)網(wǎng)格生成,并行GPU加速明顯,且生成網(wǎng)格效果理想,驗(yàn)證了這種基于GPU的并行非結(jié)構(gòu)網(wǎng)格生成技術(shù)的加速效果。
(3)受制于實(shí)驗(yàn)條件與技術(shù)尚不成熟,存在一些不足,例如測試算例處于一般規(guī)模的二維網(wǎng)格的實(shí)驗(yàn)驗(yàn)證,網(wǎng)格生成算法效率過低,在以后的工作中會加入對三維復(fù)雜網(wǎng)格的驗(yàn)證并改進(jìn)設(shè)計(jì)技術(shù)。
[1]Yasushi I,Alan M S,Anil K E.Parallel unstructured mesh generation by an advancing front method[J].Mathematics and Computers in Simulation,2007,75(5/6):200-209.
[2]Baker T J.Mesh generation:art or science?[J].Progress in Aerospace Sciences,2005,41:29-63.
[3]Frey P J,Loic M.Fast adaptive quadtree mesh generation[C]//Proceedings of the7th International Meshing Round table,1998.
[4]NVIDIA.CUDA C programming guide[S].2010.
[5]Qi Meng,Cao Thanh-Tung,Tan Tiow-Seng.Computing 2D constrained delaunay triangulation using graphics hardware[R].School of Computing,National University of Singapore,Singapore,2011.
[6]齊龍,肖素梅,蔡云龍,等.基于GPU的并行非結(jié)構(gòu)網(wǎng)格生成技術(shù)研究[J].機(jī)械設(shè)計(jì)與制造,2013,2(2):184-186.
[7]Pirzadeh S.Structured background grids for generation of unstructured grids by advancing front method[J].AIAA J,1993,31(2).
[8]Kallmann M,Bieri H,Thalmann D.Fully dynamic constrained delaunay triangulations[M]//Geometric Modelling for Scientific Visualization.New York:Springer-Verlag,2003.
[9]Garland M,GrandS L,Nickolls J,et al.Parallel graph component experiences with CUDA[J].Micro,IEEE,2008,28(4):13-27.
[10]Rebay S.Efficient unstructured mesh generation by means of delaunay triangulation and Bowyer-Watson algorithm[J]. Journal of Computational Physics,1993,106(1):106-125.
[11]朱培燁.Delaunay非結(jié)構(gòu)網(wǎng)格生成之布點(diǎn)技術(shù)[J].航空計(jì)算技術(shù),1999,29(3):21-25.
CAI Yunlong,XIAO Sumei,QI Long
School of Manufacturing Science and Engineering,Southwest University of Science and Technology,Mianyang,Sichuan 621010,China
Defects of consuming time and memory consist in unstructured mesh generation.This paper proposes a novel approach,terming GPU-PDMG,which is GPU parallel unstructured mesh generation based on the framework of CUDA. The technology combines the high-speed parallel GPU and advantages of Delaunay triangulation.It develops a method of locking parallel area dividing,using the CUDA programming model on nVidia GPUs.By analyzing the tested examples’speedup rate and efficiency,it has evaluated their computing performance.This result is identified in NACA0012 and multi-element airfoil experiment with both the analysis of speedup rate and efficiency and GPU-PDMG is better than any existing GPU algorithms.
unstructured mesh;parallel area;locking;Graphic Processing Unit(GPU);speed-up ratio
A
TP311;TH16
10.3778/j.issn.1002-8331.1308-0387
CAI Yunlong,XIAO Sumei,QI Long.Locking paralleled GPU-based method research for unstructured mesh generation.Computer Engineering and Applications,2014,50(6):56-60.
國家重點(diǎn)基礎(chǔ)研究發(fā)展規(guī)劃(973)(No.2009CB723805)。
蔡云龍(1988—),男,碩士研究生,主要研究領(lǐng)域?yàn)榫W(wǎng)格生產(chǎn)算法研究,計(jì)算流體力學(xué);肖素梅(1966—),女,博士,教授,主要研究領(lǐng)域?yàn)楣I(yè)工程,動力系統(tǒng)仿真,計(jì)算流體力學(xué)等;齊龍(1986—),男,碩士研究生,主要研究領(lǐng)域?yàn)榫W(wǎng)格生產(chǎn)算法。E-mail:cylinder1220@gmail.com
2013-08-30
2013-10-15
1002-8331(2014)06-0056-05
CNKI網(wǎng)絡(luò)優(yōu)先出版:2013-11-25,http://www.cnki.net/kcms/detail/11.2127.TP.20131125.1535.011.html