本發明專利技術涉及一種N-body問題近程作用計算在GPU結構的優化映射方法,用于計算粒子受到本盒子中其他粒子以及鄰居盒子中粒子的近程作用,所述方法包括建立數組Neighbor?List,依次存儲編號大于當前盒子編號的鄰居盒子信息;建立數組acc記錄全局存儲器中粒子所受其他粒子近程作用的計算結果;建立多個block與所有盒子的一一對應關系,使每個block處理與其對應的盒子中粒子近程作用的計算。本發明專利技術提出的通過高速存取的片上共享存儲來復用數據,解決了CPU算法訪存的瓶頸,利用牛頓第三定律減少了算法的計算量,總體時間得到了進一步優化,實現近程計算部分在GPU結構上的高效執行,提高了計算效率。
【技術實現步驟摘要】
一種N-body問題近程作用計算在GPU結構的優化映射方法
本專利技術涉及GPU并行計算領域,尤其涉及一種N-body問題近程作用計算在GPU(GraphicProcessingUnit,圖形處理器)結構的優化映射方法。
技術介紹
隨著技術的發展,眾核GPU已經成為目前重要的處理器。傳統上GPU只用于處理3D渲染任務,而其它大多數的任務都交給了CPU處理。CPU作為一種通用處理器,其體系結構設計必須兼顧各種任務的需要,因此CPU中大多數晶體管被用于制造龐大的緩存和復雜的控制邏輯,而運算單元占用面積則并不多;相反地,GPU由于圖形渲染的并行特性與生俱來具有大量運算單元,非常適合計算密集型的大規模數據并行計算。但由于傳統GPU硬件架構的限制很難有效利用其資源進行通用計算,為此,NVIDIA公司推出了CUDA(ComputeUnifiedDeviceArchitecture,通用并行計算架構)完全扭轉了局面,由于其功能強大、應用領域廣泛,推動了GPU通用計算的發展。但如何高效地在GPU架構上實現算法是研究人員當前面臨的巨大挑戰。N-body問題是高性能計算領域最具代表性、最有影響力以及最有挑戰性的問題之一,具有廣泛的應用領域,并因其應用的重要性和實際計算的復雜性一直是高性能計算的主要熱點之一。N-body問題主要應用在天體物理學、分子動力學等領域,多體問題是計算場中的多個粒子之間的相互作用及其運動軌道,是最具普適性的力學問題之一。當粒子為宏觀的天體時,天體多體模擬計算是當前研究星系以及宇宙結構形成的主要途徑。當粒子為微觀的分子、原子時,多體問題即表現為分子動力學問題,由于分子動力學可以預測納米尺度材料動力學特性,因此在物理、化學、生物、醫藥、新材料設計等領域有著廣泛的應用。N-body問題主要解決有限空間中每個粒子所受其它粒子作用的計算,算法復雜度為O(N2),由于當空間中粒子數很大時計算量非常巨大,因此為了減少計算量,提出了樹形算法,其中最主要的FastMultipoleMethod(快速多極算法,以下簡稱FMM算法)將算法復雜度降低到了O(N)。樹形算法的核心思想是通過對空間進行劃分將粒子所受作用分類為近程作用和遠程作用,近程作用直接計算而遠程作用則近似計算。目前關于N-body的并行計算主要采用基于MPI編程模型的CPU集群,存在大量的通信和負載的不均衡造成的性能瓶頸,而以GRAPE為代表的專用機雖然取得較高的性能但并未對整個樹形算法加速,并且專用機本身應用的局限性提高了設備的成本。GPU加速平臺提供解決上述問題的途徑,但現有對求解N-body問題的FMM算法進行CUDA加速的軟件對于近程計算部分存在訪存的瓶頸,并且對計算量未進行優化,因此計算性能不理想。
技術實現思路
為了解決上述現有技術存在的問題,本專利技術旨在提供一種N-body問題近程作用計算在GPU結構的優化映射方法,以高效實現CPU算法到GPU結構映射的計算任務劃分和數據存取,從而為求解典型N-body應用問題提供多級并行求解方法。本專利技術所述的一種N-body問題近程作用計算在GPU結構的優化映射方法,用于計算粒子受到本盒子中其他粒子以及鄰居盒子中粒子的近程作用,所述方法包括以下步驟:步驟S0,建立數組NeighborList,依次存儲編號大于當前盒子編號的鄰居盒子信息;建立數組acc記錄全局存儲器中粒子所受其他粒子近程作用的計算結果;建立多個block與所有盒子的一一對應關系,使每個block處理與其對應的盒子中粒子近程作用的計算,每個block中的線程數不小于與其對應的盒子中的粒子數,每個盒子中的粒子數均為n;步驟S1,對應當前盒子的block在共享存儲器中申請大小均為n的數組A和數組B,其中,數組A用于保存當前盒子中的n個粒子的信息,數組B用于存放當前盒子中每個粒子所受當前盒子中其他n-1個粒子的反作用力數據;步驟S2,建立對應當前盒子的block中的前n個線程與當前盒子中的n個粒子的一一對應關系,使每個線程將與其對應的當前盒子中的粒子信息裝載到共享存儲器中的數組A中;步驟S3,對應當前盒子的block的前n個線程中的每個線程在寄存器中申請一個局部變量d_acc,每個局部變量d_acc用于保存當前線程對應的當前盒子中粒子所受的作用力,設當前線程對應的粒子為第threadIdx.x個粒子,threadIdx.x的取值范圍為0至n-1,然后當前線程從共享存儲器的數組A中順序讀取第threadIdx.x個粒子后面的n-threadIdx.x-1個粒子的信息,并分別將n-threadIdx.x-1個粒子與第threadIdx.x個粒子進行近程作用計算;每對粒子間的近程作用計算結果同時更新到局部變量d_acc和數組B;完成當前盒子中所有粒子間的近程作用計算后,對應當前盒子的block的前n個線程中的每個線程將數組B中存放的與該線程對應的當前盒子中粒子所受的反作用力數據疊加到數組acc中的元素acc[i]的位置,i表示當前線程所對應的當前盒子中的粒子;步驟S4,根據數組NeighborList,建立對應當前盒子的block中的前n個線程與當前盒子的下一個鄰居盒子中的n個粒子的一一對應關系,使每個線程將與其對應的鄰居盒子中粒子信息裝載到共享存儲器中的數組A中,以覆蓋數組A中當前盒子中粒子的信息,同時,將數組B中存放的數據清零,使數組B用于存放當前盒子的下一個鄰居盒子中每個粒子所受當前盒子中n個粒子的反作用力數據;步驟S5,對應當前盒子的block的前n個線程中的每個線程從共享存儲器的數組A中順序讀取當前盒子的下一個鄰居盒子中的n個粒子的信息,并將該鄰居盒子中的n個粒子分別與當前線程對應的當前盒子中的粒子進行近程作用計算;每對粒子間的計算結果需要同時更新到局部變量d_acc和數組B;完成當前盒子中n個粒子與當前盒子的下一個鄰居盒子中n個粒子間的近程作用計算后,對應當前盒子的block的前n個線程中的每個線程將數組B中存放的與該線程對應的鄰居盒子中粒子所受的反作用力數據疊加到數組acc中的元素acc[j]位置,j表示當前線程所對應的鄰居盒子中的粒子;步驟S6,根據數組NeighborList,判斷是否所有編號大于當前盒子編號的鄰居盒子中的粒子信息都已經被裝載到過共享存儲器中用來與當前盒子中的粒子進行近程作用計算,若是,則當前盒子中粒子受到鄰居盒子中粒子的近程作用計算完成,否則回到步驟S4繼續裝載再下一個鄰居盒子中的粒子信息并依次執行步驟S5和步驟S6,直至完成當前盒子中粒子與其所有鄰居盒子中粒子間的近程作用計算;步驟S7,對應當前盒子的block的前n個線程中的每個線程將該線程申請的局部變量d_acc一一對應地寫入全局存儲器的數組acc中的元素acc[i]的位置,i表示當前線程所對應的當前盒子中的粒子。在上述的N-body問題近程作用計算在GPU結構的優化映射方法中,所述每個block中的前n個線程處理其對應盒子中的n個粒子,每個block中的其余線程閑置。在上述的N-body問題近程作用計算在GPU結構的優化映射方法中,所述每個block中的線程數最大為512。由于采用了上述的技術解決方案,本專利技術是一種根據牛頓第三定律所構建的基于GPU硬件加速的本文檔來自技高網...

【技術保護點】
一種N?body問題近程作用計算在GPU結構的優化映射方法,用于計算粒子受到本盒子中其他粒子以及鄰居盒子中粒子的近程作用,其特征在于,所述方法包括以下步驟:步驟S0,建立數組Neighbor?List,依次存儲編號大于當前盒子編號的鄰居盒子信息;建立數組acc記錄全局存儲器中粒子所受其他粒子近程作用的計算結果;建立多個block與所有盒子的一一對應關系,使每個block處理與其對應的盒子中粒子近程作用的計算,每個block中的線程數不小于與其對應的盒子中的粒子數,每個盒子中的粒子數均為n;步驟S1,對應當前盒子的block在共享存儲器中申請大小均為n的數組A和數組B,其中,數組A用于保存當前盒子中的n個粒子的信息,數組B用于存放當前盒子中每個粒子所受當前盒子中其他n?1個粒子的反作用力數據;步驟S2,建立對應當前盒子的block中的前n個線程與當前盒子中的n個粒子的一一對應關系,使每個線程將與其對應的當前盒子中的粒子信息裝載到共享存儲器中的數組A中;步驟S3,對應當前盒子的block的前n個線程中的每個線程在寄存器中申請一個局部變量d_acc,每個局部變量d_acc用于保存當前線程對應的當前盒子中粒子所受的作用力,設當前線程對應的粒子為第threadIdx.x個粒子,threadIdx.x的取值范圍為0至n?1,然后當前線程從共享存儲器的數組A中順序讀取第threadIdx.x個粒子后面的n?threadIdx.x?1個粒子的信息,并分別將n?threadIdx.x?1個粒子與第threadIdx.x個粒子進行近程作用計算;每對粒子間的近程作用計算結果同時更新到局部變量d_acc和數組B;完成當前盒子中所有粒子間的近程作用計算后,對應當前盒子的block的前n個線程中的每個線程將數組B中存放的與該線程對應的當前盒子中粒子所受的反作用力數據疊加到數組acc中的元素acc[i]的位置,i表示當前線程所對應的當前盒子中的粒子;步驟S4,根據數組Neighbor?List,建立對應當前盒子的block中的前n個線程與當前盒子的下一個鄰居盒子中的n個粒子的一一對應關系,使每個線程將與其對應的鄰居盒子中粒子信息裝載到共享存儲器中的數組A中,以 覆蓋數組A中當前盒子中粒子的信息,同時,將數組B中存放的數據清零,使數組B用于存放當前盒子的下一個鄰居盒子中每個粒子所受當前盒子中n個粒子的反作用力數據;步驟S5,對應當前盒子的block的前n個線程中的每個線程從共享存儲器的數組A中順序讀取當前盒子的下一個鄰居盒子中的n個粒子的信息,并將該鄰居盒子中的n個粒子分別與當前線程對應的當前盒子中的粒子進行近程作用計算;每對粒子間的計算結果需要同時更新到局部變量d_acc和數組B;完成當前盒子中n個粒子與當前盒子的下一個鄰居盒子中n個粒子間的近程作用計算后,對應當前盒子的block的前n個線程中的每個線程將數組B中存放的與該線程對應的鄰居盒子中粒子所受的反作用力數據疊加到數組acc中的元素acc[j]位置,j表示當前線程所對應的鄰居盒子中的粒子;步驟S6,根據數組Neighbor?List,判斷是否所有編號大于當前盒子編號的鄰居盒子中的粒子信息都已經被裝載到過共享存儲器中用來與當前盒子中的粒子進行近程作用計算,若是,則當前盒子中粒子受到鄰居盒子中粒子的近程作用計算完成,否則回到步驟S4繼續裝載再下一個鄰居盒子中的粒子信息并依次執行步驟S5和步驟S6,直至完成當前盒子中粒子與其所有鄰居盒子中粒子間的近程作用計算;步驟S7,對應當前盒子的block的前n個線程中的每個線程將該線程申請的局部變量d_acc一一對應地寫入全局存儲器的數組acc中的元素acc[i]的位置,i表示當前線程所對應的當前盒子中的粒子。...
【技術特征摘要】
1.一種N-body問題近程作用計算在GPU結構的優化映射方法,用于計算粒子受到本盒子中其他粒子以及鄰居盒子中粒子的近程作用,其特征在于,所述方法包括以下步驟:步驟S0,建立數組NeighborList,依次存儲編號大于當前盒子編號的鄰居盒子信息;建立數組acc記錄全局存儲器中粒子所受其他粒子近程作用的計算結果;建立多個block與所有盒子的一一對應關系,使每個block處理與其對應的盒子中粒子近程作用的計算,每個block中的線程數不小于與其對應的盒子中的粒子數,每個盒子中的粒子數均為n;步驟S1,對應當前盒子的block在共享存儲器中申請大小均為n的數組A和數組B,其中,數組A用于保存當前盒子中的n個粒子的信息,數組B用于存放當前盒子中每個粒子所受當前盒子中其他n-1個粒子的反作用力數據;步驟S2,建立對應當前盒子的block中的前n個線程與當前盒子中的n個粒子的一一對應關系,使每個線程將與其對應的當前盒子中的粒子信息裝載到共享存儲器中的數組A中;步驟S3,對應當前盒子的block的前n個線程中的每個線程分別在寄存器中申請一個局部變量d_acc,每個局部變量d_acc用于保存其所屬當前線程對應的當前盒子中一個粒子所受的近程作用力,設當前線程對應的粒子為第threadIdx.x個粒子,threadIdx.x的取值范圍為0至n-1,然后當前線程從共享存儲器的數組A中順序讀取第threadIdx.x個粒子后面的n-threadIdx.x-1個粒子的信息,并分別將n-threadIdx.x-1個粒子與第threadIdx.x個粒子進行近程作用計算;每對粒子間的近程作用計算結果同時疊加到相應線程的局部變量d_acc和數組B中相應位置;完成當前盒子中所有粒子間的近程作用計算后,對應當前盒子的block的前n個線程中的每個線程分別將數組B中存放的與該線程對應的當前盒子中粒子所受的反作用力數據疊加到全局存儲器的數組acc中的元素acc[i]的位置,i表示當前線程所對應的當前盒子中的粒子編號;步驟S4,根據數組NeighborList,建...
【專利技術屬性】
技術研發人員:雷詠梅,單健晨,朱勁師,方韻,
申請(專利權)人:上海大學,上海紅神信息技術有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。