專利名稱::一種基于圖形處理器的多組分系統(tǒng)離散模擬計(jì)算方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及多組分系統(tǒng)離散模擬的計(jì)算,特別涉及到在圖形處理器GPU上實(shí)現(xiàn)多組分系統(tǒng)離散模擬計(jì)算的相關(guān)方法。
背景技術(shù):
:多組分系統(tǒng)是指由兩種以上不同性質(zhì)的組分所形成的系統(tǒng)。在對(duì)多組分系統(tǒng)做模擬時(shí),多組分系統(tǒng)中的不同組分可以用不同種類的粒子來(lái)表示,所述的模擬過(guò)程需要處理粒子運(yùn)動(dòng)以及粒子間的相互作用。在模擬過(guò)程中,粒子間的相互作用一般可以用二體作用"勢(shì)"或者作用力函數(shù)表示。如在分子動(dòng)力學(xué)MD模擬中,常見(jiàn)的Lennard-Jones勢(shì)采用下列公式表示<formula>formulaseeoriginaldocumentpage4</formula>其中,£為作用勢(shì)能,o為作用特征長(zhǎng)度(一般為分子直徑),&為分子i到分子j的距離;系數(shù)a、b表示斥力項(xiàng)和引力項(xiàng)的相對(duì)大小,一般情況a二b二l,而a二l和b二o時(shí)表示只有斥力作用。而MD模擬中的作用力函數(shù)則可以用下列公式表示<formula>formulaseeoriginaldocumentpage4</formula>其中,F(xiàn)u表示分子i受到分子j的作用力。關(guān)于分子動(dòng)力學(xué)MD模擬的具體情況可參見(jiàn)參考文獻(xiàn)1:"FrenkelDaanandSmitBerend,1996.UnderstandingMolecularSimulation:FromAlgorithmstoApplications.Orlando,AcademicPress,,?,F(xiàn)有技術(shù)中,用計(jì)算機(jī)實(shí)現(xiàn)前述的對(duì)多組分系統(tǒng)的模擬,主要是在計(jì)算機(jī)上實(shí)現(xiàn)了對(duì)粒子間勢(shì)函數(shù)或者作用力函數(shù)的計(jì)算。在實(shí)際模擬過(guò)程中,由于所要模擬的粒子數(shù)目十分龐大,因此對(duì)計(jì)算機(jī)的計(jì)算能力的要求很高?,F(xiàn)有技術(shù)中通常采用由中央處理器(CPU)為計(jì)算部件的計(jì)算機(jī)實(shí)現(xiàn)對(duì)多組分系統(tǒng)的模擬。但由于CPU自身性能在發(fā)展上的瓶頸,使得此類計(jì)算機(jī)并不能夠很好地滿足對(duì)多組分系統(tǒng)模擬的需要,帶來(lái)計(jì)算效率較低,所能模擬的多組分系統(tǒng)的規(guī)模偏小等一系列問(wèn)題。與CPU相比,圖形處理器GPU集成了更多晶體管,而且有更高比例的晶體管用于數(shù)值計(jì)算,因此其計(jì)算速度遠(yuǎn)高于主流CPU,兩者在計(jì)算能力上的差別在10100倍左右,目前最先進(jìn)的圖形處理器GPU的計(jì)算能力已經(jīng)達(dá)到了1Teraflops(萬(wàn)億次)。因此,GPU特別適合并行度高的計(jì)算密集型計(jì)算領(lǐng)域,即采用GPU的計(jì)算機(jī)較采用CPU的計(jì)算機(jī)更適合多組分系統(tǒng)的計(jì)算機(jī)模擬。現(xiàn)有技術(shù)中存在多種在計(jì)算機(jī)上實(shí)現(xiàn)多組分系統(tǒng)模擬的相關(guān)算法,但這些算法都是在以CPU為計(jì)算部件的計(jì)算機(jī)上實(shí)現(xiàn)的,由于CPU與GPU在結(jié)構(gòu)以及工作原理等方面的諸多差異,使得這些算法并不能夠直接移植到以GPU為計(jì)算部件的計(jì)算機(jī)上,即便能夠移植,也會(huì)對(duì)模擬效果產(chǎn)生影響。例如1、在現(xiàn)有算法中,不同作用勢(shì)的選擇主要通過(guò)各個(gè)條件選項(xiàng)分支完成,但該方式對(duì)于流水線的優(yōu)化極為不利。由于圖形處理器GPU擅長(zhǎng)順序執(zhí)行,但缺乏邏輯判斷的硬件實(shí)現(xiàn),GPU需完整計(jì)算作用勢(shì)選擇的各個(gè)分支后根據(jù)條件判斷選擇合適的分支,如此對(duì)于存在較多作用勢(shì)的多組分系統(tǒng),GPU會(huì)將大部分計(jì)算消耗在無(wú)用分支上,GPU計(jì)算發(fā)揮的性能將大打折扣。2、由于GPU在硬件上缺乏跳轉(zhuǎn)(jump)指令實(shí)現(xiàn),因此目前的GPU計(jì)算還不能實(shí)現(xiàn)由函數(shù)指針來(lái)選擇不同的作用函數(shù),這也為現(xiàn)有算法到以GPU為計(jì)算部件的平臺(tái)上的移植帶來(lái)了困難。
發(fā)明內(nèi)容本發(fā)明的目的是克服現(xiàn)有的多組分系統(tǒng)模擬計(jì)算方法無(wú)法直接移植到GPU平臺(tái)上的缺陷,從而提供一種在帶有GPU的并行計(jì)算系統(tǒng)上實(shí)現(xiàn)計(jì)算的相關(guān)方法。為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種基于圖形處理器的多組分系統(tǒng)離散模擬計(jì)算方法,該方法在由多個(gè)計(jì)算節(jié)點(diǎn)組成的并行計(jì)算系統(tǒng)上實(shí)現(xiàn),所述計(jì)算節(jié)點(diǎn)上安裝有圖形處理器GPU;該方法包括步驟1)、對(duì)所要模擬的多組分系統(tǒng)做空間分解,在所述空間分解中,將所述多組分系統(tǒng)的空間分為多個(gè)子區(qū)域,并將所述子區(qū)域分為網(wǎng)格;步驟2)、建立所述多組分系統(tǒng)中的粒子與所述步驟1)所得到的網(wǎng)格之間的映射關(guān)系;步驟3)、將所述多組分系統(tǒng)中的粒子信息按照所述空間分解的結(jié)果分別分配給所述多個(gè)計(jì)算節(jié)點(diǎn)上的GPU內(nèi)的線程塊,并將粒子的作用勢(shì)參數(shù)、模擬設(shè)置信息保存到所述GPU的內(nèi)存中;步驟4)、在所述GPU上計(jì)算粒子所受到的作用力,并根據(jù)所述作用力對(duì)粒子的速度與位置進(jìn)行更新;步驟5)、重復(fù)對(duì)粒子的上述計(jì)算過(guò)程,直到對(duì)所述多組分系統(tǒng)模擬結(jié)束后將模擬結(jié)果從所述并行計(jì)算系統(tǒng)中輸出。上述技術(shù)方案中,所述的步驟4)包括步驟4-l)、在所述GPU的各個(gè)線程塊上并行計(jì)算各個(gè)粒子的當(dāng)前速度與當(dāng)前位置,根據(jù)計(jì)算結(jié)果實(shí)現(xiàn)對(duì)粒子位移以及粒子速度的更新;步驟4-2)、根據(jù)步驟4-l)的更新結(jié)果在各個(gè)GPU內(nèi)實(shí)現(xiàn)所述粒子到所述網(wǎng)格映射的更新;步驟4-3)、利用所述計(jì)算節(jié)點(diǎn)上的CPU進(jìn)程實(shí)現(xiàn)GPU間的信息傳遞,實(shí)現(xiàn)粒子在不同GPU間的遷移以及邊界粒子傳遞;步驟4-4)、根據(jù)所述粒子的類型,選擇相應(yīng)的粒子作用勢(shì)參數(shù),實(shí)現(xiàn)粒子間作用力的計(jì)算;步驟4-5)、根據(jù)所述粒子間作用力的計(jì)算結(jié)果,再次對(duì)所述粒子的速度做更新操作。上述技術(shù)方案中,在所述的步驟1)中,按照所述并行計(jì)算系統(tǒng)中的GPU個(gè)數(shù)實(shí)現(xiàn)對(duì)所述子區(qū)域的劃分,使得所述子區(qū)域的個(gè)數(shù)與所述GPU的個(gè)數(shù)相等;在所述子區(qū)域內(nèi)按照作用截?cái)嗑嚯x信息劃分網(wǎng)格。上述技術(shù)方案中,在所述的步驟3)中,將所述多組分系統(tǒng)中的粒子信息按照所述空間分解的結(jié)果分別分配給所述多個(gè)計(jì)算節(jié)點(diǎn)上的GPU內(nèi)的線程塊時(shí),將所述多組分系統(tǒng)的一個(gè)子區(qū)域分配給一個(gè)所述的GPU,將所述子區(qū)域內(nèi)的一個(gè)網(wǎng)格分配給所述GPU內(nèi)的一個(gè)線程塊,所述網(wǎng)格內(nèi)的一個(gè)粒子由所述線程塊內(nèi)的一個(gè)線程做專門(mén)的處理。上述技術(shù)方案中,在所述的步驟3)中,所述的作用勢(shì)參數(shù)包括作用截?cái)嗑嚯xr、作用特征長(zhǎng)度0、作用勢(shì)能e、用于表示斥力項(xiàng)相對(duì)大小的系數(shù)a、用于表示引力項(xiàng)相對(duì)大小的系數(shù)b在內(nèi)的多個(gè)參數(shù)。上述技術(shù)方案中,所述的步驟4-2)包括步驟4-2-1)、根據(jù)粒子的新位置計(jì)算粒子在運(yùn)動(dòng)后所在網(wǎng)格的坐標(biāo);步驟4-2-2)、各個(gè)網(wǎng)格備份原有的粒子到網(wǎng)格的映射信息,并從所述映射信息中找出網(wǎng)格坐標(biāo)與當(dāng)前網(wǎng)格坐標(biāo)不相符合的粒子,刪除該粒子;步驟4-2-3)、網(wǎng)格根據(jù)周邊鄰居網(wǎng)格所備份的粒子到網(wǎng)格的映射信息,從周邊鄰居中找出屬于自己的粒子,并將這些粒子放入本網(wǎng)格的粒子映射信息中。上述技術(shù)方案中,所述的步驟4-3)包括步驟4-3-1)、GPU線程塊中的各個(gè)線程分別將位于內(nèi)邊界區(qū)域和外邊界區(qū)域中的各個(gè)粒子的到網(wǎng)格的映射信息保存到所述GPU內(nèi)存的緩沖區(qū)內(nèi);步驟4-3-2)、將GPU內(nèi)存緩沖區(qū)內(nèi)的信息復(fù)制到對(duì)所述GPU進(jìn)行管理的CPU進(jìn)程所對(duì)應(yīng)的發(fā)送緩沖區(qū)內(nèi);步驟4-3-3)、由所述CPU進(jìn)程將所述發(fā)送緩沖區(qū)內(nèi)的信息傳輸?shù)侥繕?biāo)鄰居進(jìn)程的接收緩沖區(qū),將其他鄰居進(jìn)程傳入的信息放置于本進(jìn)程的接收緩沖區(qū)內(nèi);步驟4-3-4)、將所述接收緩沖區(qū)內(nèi)的信息復(fù)制到所述GPU的內(nèi)存緩沖區(qū);步驟4-3-5)、GPU解析內(nèi)存緩沖區(qū)內(nèi)的粒子信息,將跨界粒子添加到內(nèi)邊界網(wǎng)格粒子的映射信息中,或者對(duì)位于外邊界網(wǎng)格的粒子的映射信息做替換。上述技術(shù)方案中,在所述的步驟4-3-3)中,CPU進(jìn)程與鄰居進(jìn)程間的通信采用shift模式。上述技術(shù)方案中,所述的步驟4-4)包括步驟4-4-1)、GPU在內(nèi)核中為一個(gè)線程塊開(kāi)辟共享內(nèi)存;步驟4-4-2)、在所述的共享內(nèi)存內(nèi)存放該線程塊所對(duì)應(yīng)的網(wǎng)格的信息以及該網(wǎng)格的鄰居網(wǎng)格的信息;步驟4-4-3)、在共享內(nèi)存內(nèi),根據(jù)粒子類型,選擇相應(yīng)的粒子作用勢(shì)參數(shù),計(jì)算線程塊所對(duì)應(yīng)網(wǎng)格內(nèi)的粒子與一個(gè)鄰居網(wǎng)格內(nèi)粒子的所有作用力;步驟4-4-4)、在計(jì)算完一個(gè)線程塊所對(duì)應(yīng)網(wǎng)格內(nèi)的粒子與一個(gè)鄰居網(wǎng)格內(nèi)的粒子間的相互作用力后輪換鄰居網(wǎng)格,重復(fù)上述的步驟4-4-3),直到執(zhí)行完與周邊所有鄰居粒子間的作用力計(jì)算后才將線程塊對(duì)應(yīng)網(wǎng)格內(nèi)的包括作用力大小的粒子信息寫(xiě)回。本發(fā)明的優(yōu)點(diǎn)在于1、本發(fā)明的方法預(yù)先將作用勢(shì)參數(shù)進(jìn)行存儲(chǔ),然后在計(jì)算粒子對(duì)相互作用力時(shí),根據(jù)涉及粒子的種類屬性,通過(guò)簡(jiǎn)單數(shù)值計(jì)算得到所需作用勢(shì)參數(shù)在存儲(chǔ)時(shí)的位置,從而根據(jù)所獲得的作用勢(shì)參數(shù)完成粒子間的作用計(jì)算,克服了GPU在計(jì)算多種作用勢(shì)時(shí)由于選擇導(dǎo)致的低效問(wèn)題。2、本發(fā)明的方法在多個(gè)GPU的多個(gè)線程塊內(nèi)并行實(shí)現(xiàn)對(duì)所要模擬的多組分系統(tǒng)中的粒子的計(jì)算,與CPU相比,在計(jì)算效率上有很大的提高。圖1為在本發(fā)明的一個(gè)實(shí)施例中所提供的并行計(jì)算系統(tǒng)的示意圖;圖2為本發(fā)明的方法的流程圖;圖3為在本發(fā)明的方法中實(shí)現(xiàn)線程塊與網(wǎng)格對(duì)應(yīng)的示意圖;圖4為本發(fā)明的方法中對(duì)并行計(jì)算區(qū)域進(jìn)行分解的示意圖;圖5為本發(fā)明在一個(gè)實(shí)施例中在鄰居進(jìn)程間所采用的shift模式的示意圖;圖6為采用本發(fā)明的方法對(duì)氣液固三相體系進(jìn)行模擬的結(jié)果示意圖;其中圖6(a)表示在t為0時(shí)的結(jié)果,圖6(b)表示t在300時(shí)的結(jié)果,圖6(c)表示t在500時(shí)的結(jié)果,圖6(d)表示t在900時(shí)的結(jié)果,圖6(e)表示t在1250時(shí)的結(jié)果。具體實(shí)施例方式下面結(jié)合附圖和具體實(shí)施方式,對(duì)本發(fā)明做進(jìn)一步說(shuō)明。本發(fā)明在模擬多組分系統(tǒng)時(shí),以GPU為計(jì)算部件的計(jì)算機(jī)系統(tǒng)為基礎(chǔ),實(shí)現(xiàn)模擬過(guò)程。雖然單個(gè)的GPU與對(duì)應(yīng)的CPU相比,在計(jì)算性能上已經(jīng)有了很大的提高,但為了更好地對(duì)多組分系統(tǒng)中大量粒子的模擬,本發(fā)明采用由多個(gè)GPU組成的并行計(jì)算系統(tǒng)實(shí)現(xiàn)對(duì)多組分系統(tǒng)的模擬計(jì)算。所述的并行計(jì)算系統(tǒng)由多個(gè)計(jì)算節(jié)點(diǎn)組成,在每個(gè)計(jì)算節(jié)點(diǎn)上都分別安裝有所述的圖形處理器GPU,不同計(jì)算節(jié)點(diǎn)間通過(guò)網(wǎng)絡(luò)連接。在本發(fā)明的一個(gè)實(shí)施例中,提供了如圖1所示的并行計(jì)算系統(tǒng),該計(jì)算系統(tǒng)包括4個(gè)計(jì)算節(jié)點(diǎn),每個(gè)計(jì)算節(jié)點(diǎn)安裝有2塊NVIDIA⑧.公司生產(chǎn)的TeslaTMC870圖形處理器(GPU),由Li皿x系統(tǒng)構(gòu)建計(jì)算環(huán)境,采用以太網(wǎng)連接各計(jì)算節(jié)點(diǎn),其中的GPU包括計(jì)算內(nèi)核、多處理器片下內(nèi)存以及多處理器片上內(nèi)存。多處理器片下內(nèi)存則包括全局內(nèi)存、常量?jī)?nèi)存、紋理內(nèi)存在內(nèi)的多種內(nèi)存,多處理器片上內(nèi)存包括寄存器、當(dāng)?shù)貎?nèi)存以及共享內(nèi)存。多處理器片下內(nèi)存中的全局內(nèi)存和常量?jī)?nèi)存也被稱為GPU顯存。在本實(shí)施例中,假設(shè)用上述的并行計(jì)算系統(tǒng)對(duì)一種三組分系統(tǒng)做分子動(dòng)力學(xué)MD模擬,所要模擬區(qū)域的大小為80X160X80,在該模擬區(qū)域內(nèi),具有厚度為3的兩邊壁面(由76800個(gè)數(shù)密度r^=1的固體分子組成)、固定在上部的直徑Ds=20的固體顆粒(含3544個(gè)固體分子)、位于底端的直徑Db=50的氣泡(含45965個(gè)氣體分子)以及填充在其他區(qū)域內(nèi)的數(shù)密度=0.733的液體分子(總數(shù)&=643240)。上述三組分系統(tǒng)的初始溫度設(shè)定為kj=1。下面參考圖2,對(duì)如何在圖1所示的并行計(jì)算系統(tǒng)上實(shí)現(xiàn)對(duì)三組分系統(tǒng)的模擬進(jìn)行說(shuō)明。將所要模擬的三組分系統(tǒng)的上述信息讀入到前述的并行計(jì)算系統(tǒng)中,在所述的計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)對(duì)模擬區(qū)域的空間分解。從前面的說(shuō)明中已經(jīng)知道,本發(fā)明為了提高效率,將多個(gè)具有GPU的計(jì)算節(jié)點(diǎn)通過(guò)網(wǎng)絡(luò)并行連接,而各個(gè)GPU中的線程間又具有并行計(jì)算的功能。為了提高模擬計(jì)算的效率,需要將模擬區(qū)域中的不同空間分配給不同的GPU以及GPU中的不同線程進(jìn)行相關(guān)的計(jì)算,這種分配也被稱為任務(wù)劃分。因此,首先需要對(duì)模擬區(qū)域做空間分解,即將三維的模擬區(qū)域做立體分割,得到相應(yīng)的子區(qū)域。在本實(shí)施例中,采用二維分割的方式將所述的模擬區(qū)域分割成NxXNy個(gè)子區(qū)域,在各個(gè)子區(qū)域內(nèi)再根據(jù)作用截?cái)嗑嚯x信息(作用截?cái)嗑嚯x是指當(dāng)兩個(gè)粒子間距離大于該作用截?cái)嗑嚯x時(shí),則兩粒子之間就被視作不發(fā)生作用)劃分網(wǎng)格。在劃分子區(qū)域時(shí),所劃分子區(qū)域的個(gè)數(shù)通常與并行計(jì)算機(jī)系統(tǒng)內(nèi)的GPU個(gè)數(shù)相關(guān),一個(gè)GPU對(duì)應(yīng)一個(gè)子區(qū)域。本實(shí)施例中,由子區(qū)域進(jìn)一步劃分所得到的網(wǎng)格的大小為5(此處的大小為無(wú)量綱值,可以根據(jù)實(shí)際體系需要轉(zhuǎn)化為帶單位的真實(shí)值),根據(jù)粒子數(shù)密度(一般在0.61.1之間)等信息可知大小為5的網(wǎng)格內(nèi)粒子數(shù)在100個(gè)左右。在對(duì)模擬區(qū)域做空間分解后,并行計(jì)算機(jī)系統(tǒng)根據(jù)模擬區(qū)域中的粒子所在的位置,在粒子與粒子所在網(wǎng)格間建立對(duì)應(yīng)關(guān)系,即建立粒子到網(wǎng)格的映射。通過(guò)映射得到的相關(guān)信息,可以知道一個(gè)粒子在哪個(gè)網(wǎng)格中,也可以知道在一個(gè)網(wǎng)格中有哪些粒子。上述操作都在本發(fā)明所涉及的并行計(jì)算系統(tǒng)中的CPU內(nèi)實(shí)現(xiàn),在得到上述操作的結(jié)果后,需要由CPU將相應(yīng)的信息分配到計(jì)算節(jié)點(diǎn)內(nèi)的GPU上。由于GPU間具有并行性,而GPU內(nèi)的線程間也具有并行性,因此,為了提高計(jì)算效率,需要將各個(gè)子區(qū)域內(nèi)的信息賦予對(duì)應(yīng)的GPU,將子區(qū)域中各個(gè)網(wǎng)格內(nèi)的粒子信息分別賦予對(duì)應(yīng)的線程塊(block)。所述的線程塊是一個(gè)GPU內(nèi)網(wǎng)格計(jì)算的對(duì)應(yīng)單位,S卩如圖3所示,一個(gè)線程塊對(duì)應(yīng)一個(gè)網(wǎng)格,線程塊中的一個(gè)線程(thread)對(duì)應(yīng)網(wǎng)格中的一個(gè)粒子。每個(gè)線程塊中所開(kāi)辟的線程數(shù)與網(wǎng)格內(nèi)的粒子數(shù)相關(guān),在原則上需要保證一個(gè)粒子有一個(gè)專門(mén)的處理線程。由于粒子在運(yùn)動(dòng)過(guò)程中會(huì)發(fā)生位置變化,因此,在一個(gè)網(wǎng)格中的粒子數(shù)目是動(dòng)態(tài)變化的,所以線程塊中所開(kāi)辟的線程數(shù)應(yīng)具有冗余量,超過(guò)網(wǎng)格內(nèi)粒子數(shù)的最大可能值。在前面的說(shuō)明中提到,根據(jù)網(wǎng)格大小和粒子密度,一個(gè)網(wǎng)格內(nèi)的粒子數(shù)目在100左右,因此,在GPU線程塊內(nèi)可以開(kāi)辟160個(gè)左右的線程。CPU將信息如前所述分配到GPU內(nèi)后,還需要為每一個(gè)GPU分別分配一個(gè)進(jìn)程做相應(yīng)的管理。在為GPU的線程塊分配對(duì)應(yīng)網(wǎng)格的粒子后,還需要將粒子的作用勢(shì)參數(shù)、模擬設(shè)置信息等信息保存到GPU的顯存中。在
背景技術(shù):
中已經(jīng)提到,在GPU中采用選擇分支的方式對(duì)不同作用勢(shì)進(jìn)行計(jì)算會(huì)降低多組分系統(tǒng)離散模擬的計(jì)算效率與可靠性。考慮到在一種模擬中,各種粒子間的不同作用勢(shì)的基本形式相同,有差異的僅是作用勢(shì)參數(shù)。因此,本發(fā)明可以將各個(gè)作用勢(shì)參數(shù)存儲(chǔ)在GPU的一個(gè)參數(shù)數(shù)組中,然后在后續(xù)的計(jì)算粒子對(duì)相互作用時(shí),根據(jù)相關(guān)粒子的種類屬性,選擇相應(yīng)的作用勢(shì)參數(shù),從而實(shí)現(xiàn)粒子間的作用計(jì)算。以本實(shí)施例所要模擬的三組分系統(tǒng)為例,該系統(tǒng)具有氣、液、固三相,因此在氣(粒子種類號(hào)fos二l)-液(粒子種類號(hào)fos=2)_固(粒子種類號(hào)fos=3)三相體系中,分子間兩兩作用共有6種Le皿archJones勢(shì)參數(shù)。所述勢(shì)參數(shù)具體包括作用勢(shì)l,氣體-氣體間,r^=2,ogg=0.5,egg=l,agg=1,bgg=0;作用勢(shì)2,液體-液體間,rcll=5,。n=1,eu=1,&=1,、=1;作用勢(shì)3,固體-固體間,rcss=5,oss=1,ess=1,ass=1,bss=1;作用勢(shì)4,氣體-液體間,rcgl=3,。gl=1,egl=l,agl=1,^=0;作用勢(shì)5,氣體-固體間,1^=3,。gs=1,eES=1,aES=1,bKS=0;作用勢(shì)6,液體—固體間,rcls=5,ols=1,£ls=1,als=1,bls=0。其中的r代表作用截?cái)嗑嚯x。要保存到GPU顯存中的模擬設(shè)置信息則包括質(zhì)量力g=2X10—3,溫控采用壁面分子速度標(biāo)定方法,Y、Z方向?yàn)橹芷谛赃吔纾腆w粒子由倔強(qiáng)系數(shù)C=75的彈簧"錨"在平衡位置附近運(yùn)動(dòng)。GPU顯存除了要存儲(chǔ)上述信息外,還要存儲(chǔ)前述的粒子到網(wǎng)格映射信息。上述多種信息在GPU中所存儲(chǔ)的位置有所不同,其中的粒子到網(wǎng)格映射信息傳輸?shù)饺謨?nèi)存中,作用勢(shì)參數(shù)以及模擬設(shè)置信息存儲(chǔ)在常量?jī)?nèi)存中,利用常量?jī)?nèi)存的緩存機(jī)制來(lái)提高作用勢(shì)計(jì)算中對(duì)相關(guān)勢(shì)參數(shù)的調(diào)用速度,提高計(jì)算性能。通過(guò)以上操作,為各個(gè)GPU分配任務(wù)并賦予相應(yīng)的參數(shù)后,就可以在各個(gè)GPU的線程塊中為對(duì)應(yīng)網(wǎng)格內(nèi)的粒子執(zhí)行相應(yīng)的計(jì)算。在計(jì)算過(guò)程中,由于所要模擬的三組分系統(tǒng)中的各個(gè)粒子是隨著時(shí)間而不斷運(yùn)動(dòng)著的,因此需要對(duì)粒子的位置和速度信息做更新,了解粒子當(dāng)前所在的位置和速度的大小。在更新粒子位置和速度時(shí),可采用前述參考文獻(xiàn)1中所提到的蛙跳方式,即<formula>formulaseeoriginaldocumentpage9</formula><formula>formulaseeoriginaldocumentpage9</formula><formula>formulaseeoriginaldocumentpage9</formula>具體而言,在更新粒子位置和速度時(shí),首先將分子在t時(shí)的速度v(t)根據(jù)當(dāng)時(shí)的受力f(t)更新到v(t+At/2),從而將其位置r(t)更新到r(t+At);然后按t+At時(shí)的各分子位置計(jì)算受力f(t+At),把速度由v(t+At/2)更新到v(t+At),從而完成分子位置、速度的同步。在更新粒子的位置后,需要重新實(shí)現(xiàn)粒子到網(wǎng)格的映射。在前文中已經(jīng)提到,粒子的位置在運(yùn)動(dòng)過(guò)程中會(huì)發(fā)生變化,可能會(huì)從一個(gè)網(wǎng)格到了另一個(gè)網(wǎng)格,因此,需要對(duì)粒子到網(wǎng)格的映射關(guān)系加以更新。在更新過(guò)程中,需要對(duì)網(wǎng)格發(fā)生變化的粒子重新建立粒子到網(wǎng)格的映射,并刪除原網(wǎng)格內(nèi)的相應(yīng)映射。在并行計(jì)算系統(tǒng)內(nèi),各個(gè)網(wǎng)格內(nèi)的粒子映射更新可以在各個(gè)線程塊內(nèi)并行進(jìn)行,即每個(gè)網(wǎng)格可同時(shí)完成刪除已不屬于本網(wǎng)格的粒子,并從周邊鄰居網(wǎng)格接收屬于自己的粒子。以一個(gè)網(wǎng)格為例,對(duì)GPU內(nèi)的對(duì)應(yīng)線程塊如何完成粒子到網(wǎng)格映射的更新進(jìn)行說(shuō)明步驟a、根據(jù)粒子的新位置計(jì)算移動(dòng)后粒子所在網(wǎng)格的坐標(biāo);步驟b、每個(gè)網(wǎng)格剔除不屬于自己的粒子。本步驟中,首先要將原有的粒子到網(wǎng)格的映射信息進(jìn)行備份,然后為了防止內(nèi)存沖突,在線程塊內(nèi)用唯一的活動(dòng)線程遍歷整個(gè)網(wǎng)格內(nèi)的各個(gè)粒子的歸屬情況,若某個(gè)粒子所歸屬的網(wǎng)格的坐標(biāo)與所在網(wǎng)格不符,則將該網(wǎng)格粒子映射中最后一個(gè)實(shí)粒子轉(zhuǎn)移到待刪除粒子所在位置,而將原最后實(shí)粒子位置替代為虛粒子,完成粒子刪除操作。步驟c、網(wǎng)格從周邊鄰居網(wǎng)格中找出屬于自己的粒子,并將這些粒子放入本網(wǎng)格的粒子映射信息中。本步驟中,為了防止內(nèi)存沖突,在每個(gè)線程塊中采用唯一的活動(dòng)線程從步驟b所備份的原有的粒子到網(wǎng)格的映射信息中遍歷該網(wǎng)格周邊所有鄰居網(wǎng)格的所有實(shí)粒子新歸屬,若粒子的新歸屬坐標(biāo)與該網(wǎng)格一致,則將粒子插入到該網(wǎng)格的粒子映射信息中。通過(guò)上述的操作,完成了粒子到網(wǎng)格映射的更新,粒子到網(wǎng)格映射的更新主要解決了在同一個(gè)子區(qū)域內(nèi)的粒子在不同網(wǎng)格間遷移的問(wèn)題,但在實(shí)際應(yīng)用中,粒子也有可能從一個(gè)子區(qū)域移動(dòng)到另一個(gè)子區(qū)域,即由一個(gè)GPU轉(zhuǎn)到另一個(gè)GPU做相關(guān)的粒子計(jì)算,因此還需要實(shí)現(xiàn)在不同GPU間粒子的遷移操作。由于GPU與GPU之間不能直接做數(shù)據(jù)交換,需要通過(guò)CPU的進(jìn)程完成GPU間數(shù)據(jù)交換的操作,因此,GPU間粒子遷移的操作也被稱為進(jìn)程間的粒子遷移。為了方便理解,以圖4為例,對(duì)進(jìn)程間粒子遷移的操作進(jìn)行說(shuō)明。在圖4中,根據(jù)前述任務(wù)劃分的需求,整個(gè)模擬區(qū)域[GlobalLeftBottom,GlobalRightTop]被分割成NxXNy個(gè)子區(qū)域,一個(gè)進(jìn)程Pi,j(進(jìn)程編號(hào)為i+jXNx)負(fù)責(zé)一個(gè)子區(qū)域內(nèi)([LocalLeftBottom,LocalRightTop])的計(jì)算。在前面已經(jīng)提到,子區(qū)域可以進(jìn)一步劃分為網(wǎng)格,在圖4中,用小方塊表示網(wǎng)格。子區(qū)域按照由外到內(nèi)的順序,還可以分為外邊界區(qū)、內(nèi)邊界區(qū)以及子區(qū)域內(nèi)部,其中,一個(gè)子區(qū)域的外邊界區(qū)是相鄰子區(qū)域的內(nèi)邊界區(qū),類似的,一個(gè)子區(qū)域的內(nèi)邊界區(qū)是相鄰子區(qū)域的外邊界區(qū)。例如,圖4中進(jìn)程Pi,j所對(duì)應(yīng)子區(qū)域左側(cè)外邊界區(qū)是其左側(cè)相鄰的進(jìn)程P卜lj所對(duì)應(yīng)的子區(qū)域的右側(cè)內(nèi)邊界區(qū)。如果某個(gè)粒子從進(jìn)程Pi,j所對(duì)應(yīng)子區(qū)域左側(cè)內(nèi)邊界區(qū)運(yùn)動(dòng)到了左側(cè)外邊界區(qū),實(shí)際上也就運(yùn)動(dòng)到了進(jìn)程Pi—w所對(duì)應(yīng)的子區(qū)域的右側(cè)內(nèi)邊界區(qū),因此對(duì)該粒子的處理由進(jìn)程Pi,j所管理的GPU轉(zhuǎn)移到了由進(jìn)程Pi-w所管理的GPU內(nèi)。此外,在計(jì)算粒子間相互作用力時(shí),由于子區(qū)域的邊界區(qū)域內(nèi)的粒子需要其他子區(qū)域內(nèi)的粒子信息才能完成完整的受力計(jì)算,因此一個(gè)GPU還需要得到鄰居GPU的邊界粒子信息,這種現(xiàn)象也被稱為邊界粒子傳遞。邊界粒子傳遞同樣需要借助CPU內(nèi)的進(jìn)程實(shí)現(xiàn)。上述的進(jìn)程間粒子遷移與邊界粒子傳遞都可以采用相同的方法實(shí)現(xiàn),因此下面做統(tǒng)一的說(shuō)明步驟A、GPU線程塊中的各個(gè)線程各自將內(nèi)邊界區(qū)域和外邊界區(qū)域中粒子到網(wǎng)格的映射信息保存到GPU顯存的緩沖區(qū)內(nèi)。步驟B、將顯存緩沖區(qū)內(nèi)的信息復(fù)制到主存的發(fā)送緩沖區(qū)內(nèi),供進(jìn)程間通訊傳輸使用。步驟C、由CPU實(shí)現(xiàn)進(jìn)程與鄰居進(jìn)程之間數(shù)據(jù)的發(fā)送接收傳輸。將發(fā)送緩沖區(qū)內(nèi)的信息傳輸?shù)侥繕?biāo)進(jìn)程,并將其他進(jìn)程傳入的信息放置于接收緩沖區(qū)內(nèi),與所述發(fā)送和接收相關(guān)的進(jìn)程均為本進(jìn)程的鄰居進(jìn)程。步驟D、將接收緩沖區(qū)內(nèi)信息復(fù)制到顯存緩沖區(qū)內(nèi),供GPU下一步操作調(diào)用。步驟E、GPU解析顯存緩沖區(qū)內(nèi)的粒子信息,將跨界粒子添加到本進(jìn)程內(nèi)邊界網(wǎng)格粒子映射中,或者替換外邊界網(wǎng)格的粒子映射信息。在跨界粒子添加到對(duì)應(yīng)網(wǎng)格的粒子映射時(shí),只有一個(gè)線程在進(jìn)行寫(xiě)入操作避免內(nèi)存沖突和數(shù)據(jù)不完整。在上述的步驟C中,為了提高通信效率,可以采用現(xiàn)有技術(shù)中的shift模式實(shí)現(xiàn)相鄰進(jìn)程間的通信。以圖4中的空間二維分割為例,shift模式將通信過(guò)程分為兩個(gè)階段,分別是x方向的傳遞和y方向的傳遞,如圖5所示。對(duì)于空間二維分割而言,shift模式中一個(gè)進(jìn)程只需與相鄰四個(gè)進(jìn)程進(jìn)行通信,與點(diǎn)對(duì)點(diǎn)傳輸模式相比,shift模式通信次數(shù)大大減少。借助CPU完成關(guān)于進(jìn)程間粒子遷移和邊界粒子傳遞的相關(guān)操作后,就可以對(duì)粒子間作用力進(jìn)行計(jì)算。在計(jì)算某一粒子與周邊鄰居粒子間的作用力時(shí),該粒子的信息需要被頻繁訪問(wèn),因此將粒子信息(前述的粒子到網(wǎng)格映射信息中已經(jīng)包含了粒子信息)放置在GPU的共享內(nèi)存中以提高訪問(wèn)速度進(jìn)而提高計(jì)算性能。對(duì)粒子間作用力的計(jì)算通常對(duì)一個(gè)線程塊內(nèi)的所有粒子同時(shí)進(jìn)行,其實(shí)現(xiàn)步驟如下步驟1、GPU在執(zhí)行的內(nèi)核(kernel)中為每個(gè)線程塊開(kāi)辟共享內(nèi)存,以存放該線程塊對(duì)應(yīng)的網(wǎng)格以及它的鄰居網(wǎng)格,所存放的網(wǎng)格信息中包括粒子信息;步驟2、GPU從全局內(nèi)存中讀入網(wǎng)格信息后復(fù)制到對(duì)應(yīng)的共享內(nèi)存;步驟3、在共享內(nèi)存內(nèi),計(jì)算線程塊所對(duì)應(yīng)網(wǎng)格內(nèi)的粒子與一個(gè)鄰居網(wǎng)格內(nèi)粒子的所有作用力,在計(jì)算過(guò)程中鄰居網(wǎng)格內(nèi)的某一粒子能被該線程塊內(nèi)的所有線程同時(shí)訪問(wèn);步驟4、在計(jì)算完一個(gè)線程塊所對(duì)應(yīng)網(wǎng)格內(nèi)的粒子與一個(gè)鄰居網(wǎng)格內(nèi)的粒子間的相互作用力后輪換鄰居網(wǎng)格,重復(fù)上述的步驟3,直到執(zhí)行完與周邊所有鄰居粒子(幾百幾千個(gè))間的作用力計(jì)算后才將線程塊對(duì)應(yīng)網(wǎng)格內(nèi)的粒子的信息寫(xiě)回全局內(nèi)存。以上就是粒子間作用力計(jì)算的基本實(shí)現(xiàn)步驟。上述步驟在實(shí)現(xiàn)粒子與其他粒子間的作用力時(shí),參照
背景技術(shù):
中所提到的相關(guān)內(nèi)容可以知道,在計(jì)算粒子間作用力時(shí)需要用到作用勢(shì),而計(jì)算作用勢(shì)時(shí)又需要根據(jù)粒子的類型選擇適當(dāng)?shù)淖饔脛?shì)參數(shù)。在前面的說(shuō)明中,已經(jīng)對(duì)本實(shí)施例所模擬的三組分系統(tǒng)中所可能包含的勢(shì)參數(shù)做了列舉,在此則決定具體選用哪個(gè)勢(shì)參數(shù)。在如下的表l中,對(duì)本實(shí)施例中三組分系統(tǒng)的勢(shì)函數(shù)參數(shù)選擇方式做了說(shuō)明<table>tableseeoriginaldocumentpage11</column></row><table>表l根據(jù)上表中的內(nèi)容,結(jié)合下列公式,可以知道某線程計(jì)算兩個(gè)粒子間的作用力時(shí)所選用的勢(shì)參數(shù)PotentialType=(parti,fos==part2.fos)氺partl.fos+(parti,fos!=part2.fos)*(parti,fos+part2.fos+1)在得到勢(shì)參數(shù)后,就可以對(duì)粒子間的作用力進(jìn)行計(jì)算。具體的計(jì)算過(guò)程在
背景技術(shù):
中已經(jīng)做了較為詳細(xì)的說(shuō)明,此處不再重復(fù)。在得到粒子所受到的作用力后,可以根據(jù)作用力再次更新粒子的速度,對(duì)粒子速度更新的實(shí)現(xiàn)可參照前面的說(shuō)明。然后對(duì)三組分系統(tǒng)的模擬是否結(jié)束進(jìn)行判斷,若沒(méi)有結(jié)束,則重新執(zhí)行上述從更新粒子位移起的各個(gè)操作步驟,直到模擬結(jié)束后將相關(guān)信息從并行計(jì)算系統(tǒng)輸出。以上是對(duì)在帶有GPU的并行計(jì)算系統(tǒng)上實(shí)現(xiàn)三組分系統(tǒng)模擬的基本流程。采用上述方法可以取得良好的模擬效果。對(duì)上述實(shí)施例中所模擬的三組分系統(tǒng)的模擬結(jié)果在圖6中做了展示。其中,圖中的體積較大的絮狀物(在圖6(a)中為體積較大的圓球)表示氣泡,體積較小的圓球狀物表示固定顆粒,填充在空間內(nèi)的其余部分為液體。在圖6(b)中t=300時(shí),氣泡第一次接觸固體顆粒,在圖6(c)中t=500時(shí),固體顆粒穿過(guò)氣泡;而在圖6(d)中t=900時(shí),由于固體顆粒周圍流場(chǎng)非對(duì)稱,氣泡受力偏倚,之后沿一側(cè)隨液體流動(dòng)。在圖6(e)中t二1250時(shí),氣泡再次與固體顆粒接觸,由于氣液界面張力的限制而未被固體顆粒穿透,而后氣泡貼在壁面運(yùn)動(dòng)。此現(xiàn)象與人們?cè)O(shè)想的礦物浮選等過(guò)程中氣固接觸的一些典型過(guò)程相符,因此采用上述方法所實(shí)現(xiàn)的模擬結(jié)果較為真實(shí)可信。經(jīng)過(guò)測(cè)算,本實(shí)施例中的GPU并行計(jì)算系統(tǒng)發(fā)揮的計(jì)算性能約為450Gflops,是單個(gè)CPU可發(fā)揮性能的200倍左右,可見(jiàn)本發(fā)明的方法在計(jì)算效率上也有很大的提高。最后所應(yīng)說(shuō)明的是,以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案而非限制。盡管參照實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,對(duì)本發(fā)明的技術(shù)方案進(jìn)行修改或者等同替換,都不脫離本發(fā)明技術(shù)方案的精神和范圍,其均應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。權(quán)利要求一種基于圖形處理器的多組分系統(tǒng)離散模擬計(jì)算方法,其特征在于,該方法在由多個(gè)計(jì)算節(jié)點(diǎn)組成的并行計(jì)算系統(tǒng)上實(shí)現(xiàn),所述計(jì)算節(jié)點(diǎn)上安裝有圖形處理器GPU;該方法包括步驟1)、對(duì)所要模擬的多組分系統(tǒng)做空間分解,在所述空間分解中,將所述多組分系統(tǒng)的空間分為多個(gè)子區(qū)域,并將所述子區(qū)域分為網(wǎng)格;步驟2)、建立所述多組分系統(tǒng)中的粒子與所述步驟1)所得到的網(wǎng)格之間的映射關(guān)系;步驟3)、將所述多組分系統(tǒng)中的粒子信息按照所述空間分解的結(jié)果分別分配給所述多個(gè)計(jì)算節(jié)點(diǎn)上的GPU內(nèi)的線程塊,并將粒子的作用勢(shì)參數(shù)、模擬設(shè)置信息保存到所述GPU的內(nèi)存中;步驟4)、在所述GPU上計(jì)算粒子所受到的作用力,并根據(jù)所述作用力對(duì)粒子的速度與位置進(jìn)行更新;步驟5)、重復(fù)對(duì)粒子的上述計(jì)算過(guò)程,直到對(duì)所述多組分系統(tǒng)模擬結(jié)束后將模擬結(jié)果從所述并行計(jì)算系統(tǒng)中輸出。2.根據(jù)權(quán)利要求1所述的基于圖形處理器的多組分系統(tǒng)離散模擬計(jì)算方法,其特征在于,所述的步驟4)包括步驟4-1)、在所述GPU的各個(gè)線程塊上并行計(jì)算各個(gè)粒子的當(dāng)前速度與當(dāng)前位置,根據(jù)計(jì)算結(jié)果實(shí)現(xiàn)對(duì)粒子位移以及粒子速度的更新;步驟4-2)、根據(jù)步驟4-l)的更新結(jié)果在各個(gè)GPU內(nèi)實(shí)現(xiàn)所述粒子到所述網(wǎng)格映射的更新;步驟4-3)、利用所述計(jì)算節(jié)點(diǎn)上的CPU進(jìn)程實(shí)現(xiàn)GPU間的信息傳遞,實(shí)現(xiàn)粒子在不同GPU間的遷移以及邊界粒子傳遞;步驟4-4)、根據(jù)所述粒子的類型,選擇相應(yīng)的粒子作用勢(shì)參數(shù),實(shí)現(xiàn)粒子間作用力的計(jì)算;步驟4-5)、根據(jù)所述粒子間作用力的計(jì)算結(jié)果,再次對(duì)所述粒子的速度做更新操作。3.根據(jù)權(quán)利要求1或2所述的基于圖形處理器的多組分系統(tǒng)離散模擬計(jì)算方法,其特征在于,在所述的步驟1)中,按照所述并行計(jì)算系統(tǒng)中的GPU個(gè)數(shù)實(shí)現(xiàn)對(duì)所述子區(qū)域的劃分,使得所述子區(qū)域的個(gè)數(shù)與所述GPU的個(gè)數(shù)相等;在所述子區(qū)域內(nèi)按照作用截?cái)嗑嚯x信息劃分網(wǎng)格。4.根據(jù)權(quán)利要求1或2所述的基于圖形處理器的多組分系統(tǒng)離散模擬計(jì)算方法,其特征在于,在所述的步驟3)中,將所述多組分系統(tǒng)中的粒子信息按照所述空間分解的結(jié)果分別分配給所述多個(gè)計(jì)算節(jié)點(diǎn)上的GPU內(nèi)的線程塊時(shí),將所述多組分系統(tǒng)的一個(gè)子區(qū)域分配給一個(gè)所述的GPU,將所述子區(qū)域內(nèi)的一個(gè)網(wǎng)格分配給所述GPU內(nèi)的一個(gè)線程塊,所述網(wǎng)格內(nèi)的一個(gè)粒子由所述線程塊內(nèi)的一個(gè)線程做專門(mén)的處理。5.根據(jù)權(quán)利要求1或2所述的基于圖形處理器的多組分系統(tǒng)離散模擬計(jì)算方法,其特征在于,在所述的步驟3)中,所述的作用勢(shì)參數(shù)包括作用截?cái)嗑嚯xr、作用特征長(zhǎng)度0、作用勢(shì)能e、用于表示斥力項(xiàng)相對(duì)大小的系數(shù)a、用于表示引力項(xiàng)相對(duì)大小的系數(shù)b在內(nèi)的多個(gè)參數(shù)。6.根據(jù)權(quán)利要求2所述的基于圖形處理器的多組分系統(tǒng)離散模擬計(jì)算方法,其特征在于,所述的步驟4-2)包括步驟4-2-1)、根據(jù)粒子的新位置計(jì)算粒子在運(yùn)動(dòng)后所在網(wǎng)格的坐標(biāo);步驟4-2-2)、各個(gè)網(wǎng)格備份原有的粒子到網(wǎng)格的映射信息,并從所述映射信息中找出網(wǎng)格坐標(biāo)與當(dāng)前網(wǎng)格坐標(biāo)不相符合的粒子,刪除該粒子;步驟4-2-3)、網(wǎng)格根據(jù)周邊鄰居網(wǎng)格所備份的粒子到網(wǎng)格的映射信息,從周邊鄰居中找出屬于自己的粒子,并將這些粒子放入本網(wǎng)格的粒子映射信息中。7.根據(jù)權(quán)利要求2所述的基于圖形處理器的多組分系統(tǒng)離散模擬計(jì)算方法,其特征在于,所述的步驟4-3)包括步驟4-3-1)、GPU線程塊中的各個(gè)線程分別將位于內(nèi)邊界區(qū)域和外邊界區(qū)域中的各個(gè)粒子的到網(wǎng)格的映射信息保存到所述GPU內(nèi)存的緩沖區(qū)內(nèi);步驟4-3-2)、將GPU內(nèi)存緩沖區(qū)內(nèi)的信息復(fù)制到對(duì)所述GPU進(jìn)行管理的CPU進(jìn)程所對(duì)應(yīng)的發(fā)送緩沖區(qū)內(nèi);步驟4-3-3)、由所述CPU進(jìn)程將所述發(fā)送緩沖區(qū)內(nèi)的信息傳輸?shù)侥繕?biāo)鄰居進(jìn)程的接收緩沖區(qū),將其他鄰居進(jìn)程傳入的信息放置于本進(jìn)程的接收緩沖區(qū)內(nèi);步驟4-3-4)、將所述接收緩沖區(qū)內(nèi)的信息復(fù)制到所述GPU的內(nèi)存緩沖區(qū);步驟4-3-5)、GPU解析內(nèi)存緩沖區(qū)內(nèi)的粒子信息,將跨界粒子添加到內(nèi)邊界網(wǎng)格粒子的映射信息中,或者對(duì)位于外邊界網(wǎng)格的粒子的映射信息做替換。8.根據(jù)權(quán)利要求7所述的基于圖形處理器的多組分系統(tǒng)離散模擬計(jì)算方法,其特征在于,在所述的步驟4-3-3)中,CPU進(jìn)程與鄰居進(jìn)程間的通信采用shift模式。9.根據(jù)權(quán)利要求2所述的基于圖形處理器的多組分系統(tǒng)離散模擬計(jì)算方法,其特征在于,所述的步驟4-4)包括步驟4-4-1)、GPU在內(nèi)核中為一個(gè)線程塊開(kāi)辟共享內(nèi)存;步驟4-4-2)、在所述的共享內(nèi)存內(nèi)存放該線程塊所對(duì)應(yīng)的網(wǎng)格的信息以及該網(wǎng)格的鄰居網(wǎng)格的信息;步驟4-4-3)、在共享內(nèi)存內(nèi),根據(jù)粒子類型,選擇相應(yīng)的粒子作用勢(shì)參數(shù),計(jì)算線程塊所對(duì)應(yīng)網(wǎng)格內(nèi)的粒子與一個(gè)鄰居網(wǎng)格內(nèi)粒子的所有作用力;步驟4-4-4)、在計(jì)算完一個(gè)線程塊所對(duì)應(yīng)網(wǎng)格內(nèi)的粒子與一個(gè)鄰居網(wǎng)格內(nèi)的粒子間的相互作用力后輪換鄰居網(wǎng)格,重復(fù)上述的步驟4-4-3),直到執(zhí)行完與周邊所有鄰居粒子間的作用力計(jì)算后才將線程塊對(duì)應(yīng)網(wǎng)格內(nèi)的包括作用力大小的粒子信息寫(xiě)回。全文摘要本發(fā)明提供一種基于圖形處理器的多組分系統(tǒng)離散模擬計(jì)算方法,該方法在由多個(gè)計(jì)算節(jié)點(diǎn)組成的并行計(jì)算系統(tǒng)上實(shí)現(xiàn),計(jì)算節(jié)點(diǎn)上安裝有圖形處理器GPU;包括對(duì)所要模擬的多組分系統(tǒng)做空間分解;建立多組分系統(tǒng)中的粒子與網(wǎng)格之間的映射關(guān)系;將粒子信息分配給多個(gè)計(jì)算節(jié)點(diǎn)上的GPU內(nèi)的線程塊,并將粒子的作用勢(shì)參數(shù)、模擬設(shè)置信息保存到GPU的內(nèi)存中;在所述GPU上計(jì)算粒子所受到的作用力,并根據(jù)所述作用力對(duì)粒子的速度與位置進(jìn)行更新;在對(duì)所述多組分系統(tǒng)模擬結(jié)束前,重復(fù)在GPU內(nèi)完成的執(zhí)行步驟,直到模擬結(jié)束后將模擬結(jié)果從所述并行計(jì)算系統(tǒng)中輸出。本發(fā)明克服了GPU在計(jì)算多種作用勢(shì)時(shí)由于選擇導(dǎo)致的低效問(wèn)題,與CPU相比,在計(jì)算效率上有很大的提高。文檔編號(hào)G06T1/00GK101727653SQ200810225458公開(kāi)日2010年6月9日申請(qǐng)日期2008年10月31日優(yōu)先權(quán)日2008年10月31日發(fā)明者李靜海,葛蔚,陳飛國(guó)申請(qǐng)人:中國(guó)科學(xué)院過(guò)程工程研究所