基于gpu的多粒子輸運(yùn)仿真方法
【專利摘要】公開(kāi)了一種基于GPU的粒子輸運(yùn)仿真方法,包括:初始化;根據(jù)粒子的數(shù)目劃分GPU的線程數(shù)目;在GPU并行計(jì)算粒子的下一個(gè)碰撞點(diǎn),判斷是否有粒子的權(quán)重分裂或者死亡,給出碰撞點(diǎn)將要發(fā)生的事件;將計(jì)算結(jié)果返回給CPU,CPU根據(jù)事件數(shù)目及類型重新劃分GPU的線程數(shù)目;在GPU中并行處理這些事件,給出事件發(fā)生后粒子新的能量,方位角等信息以及產(chǎn)生的二次粒子的信息,并返回給CPU;CPU匯總這些信息并返回到程序開(kāi)頭,依此類推循環(huán),最后統(tǒng)計(jì)輸出粒子輸運(yùn)的仿真結(jié)果。根據(jù)本發(fā)明實(shí)施例,能夠?qū)崿F(xiàn)高效的粒子輸運(yùn)實(shí)驗(yàn)仿真,并在降低能耗的同時(shí)提高運(yùn)算效率。
【專利說(shuō)明】基于GPU的多粒子輸運(yùn)仿真方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明示例性實(shí)施例總體上涉及多粒子輸運(yùn)仿真【技術(shù)領(lǐng)域】,具體地,涉及一種可應(yīng)用于中子、光子和電子混合輸運(yùn)研究的基于GPU的蒙特卡羅輸運(yùn)方法。
【背景技術(shù)】
[0002]粒子輸運(yùn)模擬在科學(xué)與工程計(jì)算中具有重要意義,其求解算法發(fā)展至今,可以分為:確定論方法和蒙特卡洛(Monte Carlo)方法。由于蒙特卡洛方法具有收斂速度與問(wèn)題的維數(shù)無(wú)關(guān)、受問(wèn)題的條件限制影響小且程序結(jié)構(gòu)簡(jiǎn)單等特點(diǎn),在處理粒子輸運(yùn)相關(guān)時(shí),蒙特卡洛方法對(duì)于處理截面與能量、散射各向異性、介質(zhì)非均勻、復(fù)雜幾何、事件相關(guān)等問(wèn)題時(shí)具有得天獨(dú)厚的優(yōu)勢(shì)。但其最大的缺點(diǎn)在于收斂速度慢,誤差的概率性質(zhì)使得需要大量的抽樣才能保證準(zhǔn)確度。目前粒子輸運(yùn)模擬計(jì)算的實(shí)現(xiàn)以CPU為主,由于CPU計(jì)算能力不足直接影響到其計(jì)算效率,因此在可以接受的機(jī)時(shí)內(nèi)只能計(jì)算很小的空間尺寸和時(shí)間尺寸;或者為了提高計(jì)算量可以建設(shè)大規(guī)模甚至超大規(guī)模的CPU計(jì)算機(jī)集群,但這樣又會(huì)出現(xiàn)耗電量過(guò)大、使用和維護(hù)成本極高等問(wèn)題。
【發(fā)明內(nèi)容】
[0003]本發(fā)明示例性實(shí)施例提出了一種基于GPU的多粒子輸運(yùn)仿真方法,通過(guò)在GPU上并行執(zhí)行蒙特卡洛(MC)算法來(lái)進(jìn)行多粒子輸運(yùn)仿真,在降低能耗的同時(shí)提高運(yùn)算效率,該方法包括以下步驟:
[0004]a、使用蒙特卡洛算法對(duì)粒子輸運(yùn)建模,建立包括多種幾何體的空間,向CPU和GPU分別分配內(nèi)存空間,在CPU中進(jìn)行數(shù)據(jù)初始化,將初始化后的數(shù)據(jù)從CPU的內(nèi)存空間拷貝到GPU的內(nèi)存空間中;
[0005]b、在CPU中從源產(chǎn)生多個(gè)粒子,所述多個(gè)粒子包括光子、中子和電子,每個(gè)粒子具有粒子信息,包括粒子的種類、位置、速度、權(quán)重及所在幾何體的編號(hào),將粒子信息連同粒子數(shù)目?jī)?chǔ)存在相應(yīng)數(shù)組中;
[0006]C、判斷光子和中子數(shù)目之和是否大于設(shè)定值,如果數(shù)目之和大于設(shè)定值,則根據(jù)該數(shù)目之和確定要使用的線程數(shù)目,并將每個(gè)中子或光子分配給GPU中的一個(gè)線程進(jìn)行處理,計(jì)算前進(jìn)距離以及判斷中子或光子是否死亡;如果數(shù)目之和不大于設(shè)定值,則由CPU處理每個(gè)中子或光子,計(jì)算前進(jìn)距離以及判斷中子或光子是否死亡;
[0007]d、由CPU依據(jù)中子、光子和電子的碰撞事件數(shù)目重新劃分線程數(shù)目,并且GPU中每個(gè)線程處理一個(gè)碰撞事件;
[0008]e、判斷粒子是否死亡,如果繼續(xù)存活,將粒子的信息更新;
[0009]f、判斷是否產(chǎn)生二次粒子,如果產(chǎn)生,將二次粒子的信息存儲(chǔ);
[0010]g、由CPU重新統(tǒng)計(jì)所有存活的粒子信息,統(tǒng)計(jì)需要處理的粒子的數(shù)目;
[0011]h、判斷運(yùn)行時(shí)間是否大于設(shè)定值,如果大于設(shè)定值,則輸出統(tǒng)計(jì)量并釋放CPU和GPU的內(nèi)存空間,所述方法結(jié)束;[0012]1、如果運(yùn)行時(shí)間不大于設(shè)定值,則判斷要處理的粒子的數(shù)目是否小于設(shè)定的最小值;如果小于最小值,則返回步驟b,否則返回步驟c ;
[0013]其中GPU包括多個(gè)流處理器,所述多個(gè)流處理器通過(guò)多個(gè)線程對(duì)粒子輸運(yùn)仿真進(jìn)行并行處理,并且所述多個(gè)流處理器對(duì)粒子的輸運(yùn)仿真和碰撞事件的處理是同步進(jìn)行的。
[0014]根據(jù)示例實(shí)施例,在步驟c還包括:
[0015]對(duì)于處理的中子或光子,獲得時(shí)間截?cái)嗑嚯x、到達(dá)邊界距離、平均自由程和碰撞距離;
[0016]計(jì)算以上距離之中的最小距離;
[0017]如果最小距離是時(shí)間截?cái)嗑嚯x,則確定該中子或光子死亡;
[0018]如果最小距離是達(dá)到邊界距離,則更新該中子或光子的所在幾何體的編號(hào);
[0019]如果最小距離是平均自由程,則用其余三個(gè)距離減掉平均自由程,并返回到步驟c的開(kāi)始;
[0020]如果最小距離是碰撞距離,則判斷碰撞是中子碰撞還是光子碰撞。
[0021]根據(jù)示例實(shí)施例,在步驟e中如下處理碰撞事件:
[0022]如果碰撞事件為電子碰撞事件,則計(jì)算電子在上一個(gè)最小距離中的能量損失,將產(chǎn)生的二次粒子的數(shù)目和狀態(tài)進(jìn)行記錄,并返回給CPU ;
[0023]如果碰撞事件為光子碰撞事件,則抽樣碰撞核素,處理光子反應(yīng),將產(chǎn)生的二次粒子的數(shù)目和狀態(tài)進(jìn)行記錄,并返回給CPU ;
[0024]如果碰撞事件為中子碰撞事件,則抽樣碰撞核素,處理中子反應(yīng),將產(chǎn)生的二次粒子的數(shù)目和狀態(tài)進(jìn)行記錄,并返回給CPU。
[0025]本發(fā)明實(shí)現(xiàn)了基于GPU的多粒子輸運(yùn)蒙特卡洛仿真系統(tǒng),充分利用GPU的超強(qiáng)浮點(diǎn)運(yùn)算能力、高帶寬及多輕量計(jì)算核心的特點(diǎn),及GPU內(nèi)眾多流處理器,將蒙特卡洛算法合理引入粒子輸運(yùn)仿真中,使得蒙特卡洛粒子輸運(yùn)仿真適合于GPU硬件架構(gòu)。在本發(fā)明中,GPU和CPU充分結(jié)合,發(fā)揮各自優(yōu)勢(shì),極大地提高了運(yùn)算效率。在可以接受的能耗和時(shí)間條件下,取得了非常好的計(jì)算效果,達(dá)到了提高運(yùn)算效率的效果。
【專利附圖】
【附圖說(shuō)明】
[0026]下面結(jié)合附圖對(duì)本發(fā)明的【具體實(shí)施方式】作進(jìn)一步詳細(xì)的說(shuō)明,其中:
[0027]圖1示出了根據(jù)本發(fā)明示例實(shí)施例的基于GPU的多粒子輸運(yùn)仿真方法的流程圖。
【具體實(shí)施方式】
[0028]下面結(jié)合附圖對(duì)本發(fā)明的示例實(shí)施例進(jìn)行詳述。以下描述包括各種具體細(xì)節(jié)以輔助理解,但這些具體細(xì)節(jié)應(yīng)僅被示為示例性的。因此,本領(lǐng)域普通技術(shù)人員將認(rèn)識(shí)到,可以在不脫離本公開(kāi)范圍和精神的情況下對(duì)這里描述的各個(gè)實(shí)施例進(jìn)行各種改變和修改。此夕卜,為了清楚和簡(jiǎn)明起見(jiàn),省略了公知功能和結(jié)構(gòu)的描述。
[0029]以下描述和權(quán)利要求中使用的術(shù)語(yǔ)和詞語(yǔ)不限于其字面含義,而是僅由發(fā)明人用于實(shí)現(xiàn)本發(fā)明的清楚一致的理解。因此,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)清楚,對(duì)本發(fā)明各個(gè)示例實(shí)施例的以下描述僅被提供用于說(shuō)明目的,而不意在限制由所附權(quán)利要求及其等同物限定的本發(fā)明。[0030]本發(fā)明實(shí)施例提供了。以下結(jié)合附圖詳細(xì)說(shuō)明本發(fā)明實(shí)施例。
[0031]圖1示出了根據(jù)本發(fā)明示例實(shí)施例的基于GPU的多粒子輸運(yùn)仿真方法的流程圖。如圖1所示,該多粒子輸運(yùn)仿真方法包括如下步驟。
[0032]步驟1、使用蒙特卡洛方法對(duì)粒子輸運(yùn)建模,建立由各種幾何體(后面簡(jiǎn)稱為體,體由面圍成,每個(gè)體和面均有對(duì)應(yīng)的編號(hào))組成的空間,并在CPU中進(jìn)行初始化數(shù)據(jù)并拷入GPU內(nèi)存。這里,粒子可以包括中子、光子和電子。
[0033]步驟2、在CPU中從源產(chǎn)生多個(gè)粒子,其中每個(gè)粒子均包含如下信息:該粒子的存活標(biāo)志live,該粒子編號(hào)idf,該粒子的重復(fù)數(shù)目npa,該粒子所在體的編號(hào)icl,種類ipt,截面庫(kù)的編號(hào)iex,絕對(duì)坐標(biāo)XXX, yyy, zzz,方位角uuu, vvv, www,能量erg,權(quán)重wgt等。
[0034]在步驟2中,如果粒子是電子,則粒子信息還包括電子當(dāng)前能量erg在能量網(wǎng)格中對(duì)應(yīng)的編號(hào)ngp,小步步數(shù)ns (將電子走的路徑分為若干大步,大步內(nèi)的能量損失率不變,每大步又細(xì)分為ns個(gè)小步)。判斷標(biāo)識(shí)El (如El為I則在處理電子時(shí),需要計(jì)算電子在當(dāng)前體的能量損失率qs及小步步數(shù)ns。計(jì)算完畢后,就恢復(fù)El為0,避免下次跳轉(zhuǎn)到該步驟時(shí)重復(fù)計(jì)算qs及ns);如果粒子是中子或者光子,則粒子信息還包括碰撞標(biāo)識(shí)NPl (I代表中子碰撞,2代表光子碰撞)。
[0035]步驟3、如果中子和光子數(shù)目超過(guò)設(shè)定值,則將每個(gè)中子和/或光子分配給GPU中一個(gè)線程進(jìn)行處理(電子不參與該過(guò)程),若數(shù)目小于該設(shè)定值,則由CPU處理每個(gè)中子和/或光子,包括計(jì)算前進(jìn)距離,判斷粒子是否死亡。
[0036]在步驟3中如果處理的是中子或者光子,則還包含以下子步驟:
[0037]3.1:計(jì)算粒子到體邊界的的距離(即沿當(dāng)前運(yùn)動(dòng)方向穿出當(dāng)前所在體需要走的距離dls)、時(shí)間截?cái)嗑嚯x(即粒子在剩余壽命內(nèi)按照當(dāng)前的速度所能通過(guò)的距離dtc (每種粒子均設(shè)置了所能存活的最長(zhǎng)壽命))、平均自由程dw (權(quán)重窗存在情況下為平均自由程,否則為無(wú)窮大,其中權(quán)重窗為空間-能量或空間-時(shí)間構(gòu)成的相空間)、及到下次碰撞點(diǎn)的距離pmf ;
[0038]3.2:計(jì)算步驟3.1中四種距離中哪種距離具有最小值,并更新粒子坐標(biāo)XXX,yyy,ZZZ和已存活時(shí)間tme ;
[0039]3.3:如果步驟3.1中的最小距離為時(shí)間截?cái)嗑嚯xdtc,則判斷粒子死亡,更新其存活標(biāo)志live為O,跳轉(zhuǎn)至步驟4 ;
[0040]3.4:如果步驟3.1中的最小距離為平均自由程dw,進(jìn)行粒子在權(quán)重窗中的分裂和賭(分裂和賭為方差減少技巧,當(dāng)粒子進(jìn)入重要的相空間區(qū)域,則進(jìn)行分裂。雖然粒子權(quán)重變小,但數(shù)目增多,使抽樣結(jié)果更加精確,反之進(jìn)入不重要的相空間區(qū)域,它們以一定的概率被殺死,以節(jié)省運(yùn)算時(shí)間),判斷結(jié)果若為粒子死亡,則更新存活標(biāo)志live為0,跳轉(zhuǎn)至步驟4,否則其余三個(gè)距離均減去平均自由程dw,并回到步驟3.2 ;
[0041]3.5:如果步驟3.1中的最小距離為到達(dá)邊界的距離dls,更新所在體的編號(hào)icl,跳轉(zhuǎn)至步驟4 ;
[0042]3.6:如果步驟3.1中的最小距離為碰撞距離pmf,則更新碰撞標(biāo)識(shí)NPl為I或2 (I代表中子碰撞,2代表光子碰撞),跳轉(zhuǎn)至步驟4。
[0043]步驟4:在CPU端統(tǒng)計(jì)死亡的粒子,對(duì)存活的粒子進(jìn)行匯總,統(tǒng)計(jì)有多少個(gè)碰撞事件要發(fā)生(其中電子碰撞事件的數(shù)目等于電子的個(gè)數(shù)),重新劃分并行的線程數(shù)目,GPU每個(gè)線程處理一個(gè)碰撞事件;
[0044]在步驟4對(duì)碰撞事件的處理中,如果粒子是電子碰撞事件,則包含以下子步驟:
[0045]4.1.1:判斷標(biāo)識(shí)El是否為I (El初始設(shè)置為I),如為I則計(jì)算電子在當(dāng)前體的能量損失率qs及小步步數(shù)ns,否則略過(guò)本步至下一步驟4.1.2 ;
[0046]4.1.2:針對(duì)電子,分別計(jì)算時(shí)間截?cái)嗑嚯xdtc,小步步長(zhǎng)pmf,到體邊界的距離dls ;
[0047]4.1.3:找到步驟4.1.2中計(jì)算的三個(gè)距離中的最小距離,計(jì)算電子在通過(guò)該最小距離后新的方位角uuu, vvv, WWW,更新當(dāng)前電子的能量erg和能群編號(hào)ngp,如有二次粒子產(chǎn)生,得到二次粒子的能量、方位角、權(quán)重等信息;
[0048]4.1.5:根據(jù)步驟4.1.3,如果
[0049]I).最小距離為時(shí)間截?cái)嗑嚯xdtc,粒子死亡,更新其存活標(biāo)志live為0,跳轉(zhuǎn)到步驟5 ;
[0050]2).最小距離為到達(dá)邊界的距離dls,判斷粒子偏轉(zhuǎn)后是否還在該體內(nèi),如果不在,則粒子必然到達(dá)新的體,判斷該新體的編號(hào)icl,更新判斷標(biāo)識(shí)El為1,跳轉(zhuǎn)到步驟5 ;
[0051]3).最小距離為小步步長(zhǎng)pmf,小步剩余步數(shù)rns減I (rns初始為步數(shù)ns),若小步剩余步數(shù)rns為0,更新判斷標(biāo)識(shí)El為1,跳轉(zhuǎn)到步驟5 ;
[0052]在步驟4中,如果粒子是中子碰撞事件,則包含以下子步驟:
[0053]4.2.1:采用離散型隨機(jī)變量抽樣法抽樣中子與哪種核素碰撞,判斷是否采用熱力學(xué)方法進(jìn)行處理;
[0054]4.2.2:如果滿足以下四個(gè)條件,則產(chǎn)生光子;
[0055]I).處理的粒子中包含光子;
[0056]2).該體中光子的重要性(Particle cell importance)不為O,而且沒(méi)有設(shè)置光子產(chǎn)生的偏置處理(即按照正常的反應(yīng)抽樣光子的產(chǎn)生)或者進(jìn)行了光子產(chǎn)生的偏置處理;
[0057]3).產(chǎn)生光子的截面庫(kù)存在;
[0058]4).當(dāng)前時(shí)間不超過(guò)光子的截?cái)鄷r(shí)間。
[0059]其中產(chǎn)生光子的數(shù)目和權(quán)重依據(jù)如下步驟:
[0060]1.)如果沒(méi)有進(jìn)行光子產(chǎn)生的偏置設(shè)置,則:
[0061]1.1).首先得到產(chǎn)生光子總權(quán)重Wp:當(dāng)前中子權(quán)重乘以光子產(chǎn)生截面與總截面之比;
[0062]1.2).光子數(shù)目Np = Wp / 51+1,Wi為光子權(quán)重臨界值(Np最大
[0063]值設(shè)為10);
[0064]1.3).單個(gè)光子權(quán)重為Wp / Np。
[0065]2.)如果進(jìn)行了光子產(chǎn)生的偏置設(shè)置,則:
[0066]1.1).產(chǎn)生的光子數(shù)目設(shè)置為I ;
[0067]1.2).光子權(quán)重為:當(dāng)前中子權(quán)重乘以偏置反應(yīng)總截面與所有反應(yīng)的總截面之比;
[0068]1.3).抽樣產(chǎn)生光子的偏置反應(yīng)。
[0069]依據(jù)產(chǎn)生每個(gè)光子的反應(yīng)類型,并據(jù)此抽樣得到每個(gè)光子的出射角;[0070]4.2.3:如果屬于裂變?cè)?,則處理裂變部分,并記錄裂變點(diǎn)的位置及其他信息;
[0071]4.2.4:如果滿足以下兩個(gè)條件,則進(jìn)行模擬俘獲處理的判斷:
[0072]I).第一權(quán)重截?cái)酁?,即隱式俘獲關(guān)閉,并且只在粒子越過(guò)界面時(shí)進(jìn)行權(quán)重窗處理;
[0073]2).中子能量小于模擬俘獲的截?cái)嗄芰浚?br>
[0074]如果抽樣確實(shí)發(fā)生模擬俘獲(如果是kcode模式,裂變反應(yīng)也當(dāng)作模擬俘獲進(jìn)行處理),中子死亡,跳轉(zhuǎn)至步驟5 ;
[0075]4.2.5:如果沒(méi)有進(jìn)行模擬俘獲的處理,則進(jìn)行隱式俘獲處理,即把粒子權(quán)重按照是否發(fā)生俘獲的概率分為俘獲部分和非俘獲部分,俘獲部分被強(qiáng)制殺死,非俘獲部分繼續(xù)參加其它反應(yīng);
[0076]4.2.6:如果經(jīng)4.2.4步驟和4.2.5步驟后粒子依然存活,則處理中子的彈性或非彈性碰撞;步驟4.2. 6包含以下子步驟:
[0077]I).判斷靶核的原子量是否小于1.5或者中子能量是否小于400kT,如果兩個(gè)條件至少滿足一個(gè),則抽樣靶核的速度,得到中子相對(duì)于靶核的相對(duì)能量;
[0078]2).處理彈性或者非彈性碰撞反應(yīng),得到反應(yīng)后的中子數(shù)cmult、質(zhì)心C系中的能量 colout (I, k)和極角 colout (2, k)、延遲時(shí)間 colout (3, k)等;
[0079]3).將中子的速度和方位角轉(zhuǎn)換為實(shí)驗(yàn)室L系;
[0080]在步驟4中,如果粒子是光子碰撞事件,包含以下子步驟:
[0081]4.3.1:抽樣碰撞核素;
[0082]4.3.2:如果光子能量大于簡(jiǎn)單處理方式的最低臨界值,則采用簡(jiǎn)單物理處理方式,否則跳轉(zhuǎn)步驟4.3.8,采用詳盡處理方式;
[0083]4.3.3:如果允許光子產(chǎn)生電子,進(jìn)行光電效應(yīng)的偏置處理,光子的一部分權(quán)重產(chǎn)生光電子(不考慮熒光效應(yīng)),另一部分繼續(xù)下一步的輸運(yùn);
[0084]光電效應(yīng)的具體處理步驟為:
[0085]I).光電子的權(quán)重為光子權(quán)重乘以光電效應(yīng)截面與總截面的比;
[0086]2).將光子的能量賦值為光電子的能量(忽略電子對(duì)結(jié)合能);
[0087]3).計(jì)算光電子的極角;
[0088]4.3.5:進(jìn)行模擬俘獲處理,如果發(fā)生俘獲,則此次光子碰撞處理完畢;
[0089]4.3.6:進(jìn)行隱式俘獲;
[0090]4.3.7:抽樣碰撞類型進(jìn)行處理,分別為非相干散射和電子對(duì)效應(yīng);
[0091]非相干散射的具體處理方式為:微分散射截面Κ(α, μ)由klein_nishina公式給出,
[0092]Κ(α, μ)?μ = 3?02(α ' / α2[α' / α+α / α ' +μ 2-1]?μ
[0093]抽樣散射后的光子方向和能量,其中μ為偏轉(zhuǎn)角余弦,α和α '分別為入射和出射的光子能量,α ' =α / [1+α (1-μ)],(ι為經(jīng)典電子半徑2.817938X10_13cm。
[0094]如果康普頓反彈電子能量大于電子截?cái)嗄芰?,并且程序允許電子輸運(yùn),記錄反彈電子信息,否則采用TTB (thick-tatget bremsstrahlung)即厚祀韌致福射模型近似進(jìn)行處理。
[0095]電子對(duì)效應(yīng)的具體處理方式為:[0096]如果允許電子輸運(yùn),獲得正負(fù)電子的能量和極角記錄電子信息,否則采用TTB近似進(jìn)行處理,特別地如果不允許正電子的輸運(yùn),或者正電子的能量小于截?cái)嗄芰?,該正電子轉(zhuǎn)換為一對(duì)方向相反的光子。
[0097]4.3.8:采用詳盡處理方式,直接抽樣碰撞類型,分別為光電效應(yīng),電子對(duì)效應(yīng),非相干散射(康普頓散射)和相干散射。
[0098]光電效應(yīng)的處理方式為:相較于簡(jiǎn)單處理方式增加了對(duì)熒光光子的處理,具體方法為:當(dāng)核電荷數(shù)小于12時(shí),無(wú)突光光子,大于12小于30時(shí),一個(gè)突光光子,大于30時(shí)兩個(gè)突光光子。
[0099]電子對(duì)效應(yīng)的處理與簡(jiǎn)單處理方式相同。
[0100]非相干散射(康普頓散射)的處理方式是:在簡(jiǎn)單處理方式的基礎(chǔ)上增加了對(duì)散射微分截面的修正。
[0101]相干散射(湯姆遜散射)的處理方式為:光子能量不變,按照湯姆遜散射截面抽樣光子散射角。
[0102]步驟5、判斷粒子是否死亡,如果存活,更新粒子的信息,否則跳轉(zhuǎn)至步驟6。
[0103]步驟6、判斷是否有二次粒子產(chǎn)生,如有,將二次粒子的整數(shù)類型的信息(包括二次粒子的編號(hào),分身數(shù)目npa、所在體中的編號(hào)icl、種類ipt、截面庫(kù)編號(hào)iex等)存儲(chǔ)在多維數(shù)組GPBLCM中;實(shí)數(shù)類型的信息(包括坐標(biāo)XXX, yyy, zzz,方位角uuu, vvv, www,能量erg,及權(quán)重wgt等)存儲(chǔ)在數(shù)組JPBLCM中。
[0104]步驟7、在CPU端匯總所有粒子的信息,統(tǒng)計(jì)需要進(jìn)行處理的粒子數(shù)目。
[0105]步驟8、判斷運(yùn)行時(shí)間是否大于指定時(shí)間,如果運(yùn)行時(shí)間大于指定時(shí)間,輸出統(tǒng)計(jì)量,釋放CPU和GPU的內(nèi)存空間,方法結(jié)束。
[0106]步驟9、如果運(yùn)動(dòng)時(shí)間不大于指定時(shí)間,判斷要處理的粒子數(shù)目是否小于設(shè)定的最小值,如果小于該值,回到步驟2,如果大于該值,回到步驟3。
[0107]以上的詳細(xì)描述通過(guò)使用示意圖、流程圖和/或示例,已經(jīng)闡述了根據(jù)本發(fā)明的基于GPU的多粒子輸運(yùn)仿真方法的實(shí)施例。在這種示意圖、流程圖和/或示例包含一個(gè)或多個(gè)功能和/或操作的情況下,本領(lǐng)域技術(shù)人員應(yīng)理解,這種示意圖、流程圖或示例中的每一功能和/或操作可以通過(guò)各種結(jié)構(gòu)、硬件、軟件、固件或?qū)嵸|(zhì)上它們的任意組合來(lái)單獨(dú)和/或共同實(shí)現(xiàn)。本領(lǐng)域技術(shù)人員應(yīng)認(rèn)識(shí)到,這里所公開(kāi)的實(shí)施例的一些方面在整體上或部分地可以等同地實(shí)現(xiàn)在集成電路中,實(shí)現(xiàn)為在一臺(tái)或多臺(tái)計(jì)算機(jī)上運(yùn)行的一個(gè)或多個(gè)計(jì)算機(jī)程序(例如,實(shí)現(xiàn)為在一臺(tái)或多臺(tái)計(jì)算機(jī)系統(tǒng)上運(yùn)行的一個(gè)或多個(gè)程序),實(shí)現(xiàn)為固件,或者實(shí)質(zhì)上實(shí)現(xiàn)為上述方式的任意組合,并且本領(lǐng)域技術(shù)人員根據(jù)本公開(kāi),將具備設(shè)計(jì)電路和/或?qū)懭胲浖?或固件代碼的能力。此外,本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到,本公開(kāi)所述主題的機(jī)制能夠作為多種形式的程序產(chǎn)品進(jìn)行分發(fā),并且無(wú)論實(shí)際用來(lái)執(zhí)行分發(fā)的信號(hào)承載介質(zhì)的具體類型如何,本公開(kāi)所述主題的示例性實(shí)施例均適用。信號(hào)承載介質(zhì)的示例包括但不限于:可記錄型介質(zhì),如軟盤、硬盤驅(qū)動(dòng)器、緊致盤(⑶)、數(shù)字通用盤(DVD)、數(shù)字磁帶、計(jì)算機(jī)存儲(chǔ)器等;以及傳輸型介質(zhì),如數(shù)字和/或模擬通信介質(zhì)(例如,光纖光纜、波導(dǎo)、有線通信鏈路、無(wú)線通信鏈路等)。
[0108]雖然已參照幾個(gè)典型實(shí)施例描述了本發(fā)明,但應(yīng)當(dāng)理解,所用的術(shù)語(yǔ)是說(shuō)明和示例性、而非限制性的術(shù)語(yǔ)。由于本發(fā)明能夠以多種形式具體實(shí)施而不脫離發(fā)明的精神或?qū)嵸|(zhì),所以應(yīng)當(dāng)理解,上述實(shí)施例不限于任何前述的細(xì)節(jié),而應(yīng)在隨附權(quán)利要求所限定的精神和范圍內(nèi)廣泛地解釋,因此落入權(quán)利要求或其等效范圍內(nèi)的全部變化和改型都應(yīng)為隨附權(quán)利要求所涵蓋。
【權(quán)利要求】
1.一種基于GPU的多粒子輸運(yùn)仿真方法,包括以下步驟: a、使用蒙特卡洛算法對(duì)粒子輸運(yùn)建模,建立包括多種幾何體的空間,向CPU和GPU分別分配內(nèi)存空間,在CPU中進(jìn)行數(shù)據(jù)初始化,將初始化后的數(shù)據(jù)從CPU的內(nèi)存空間拷貝到GPU的內(nèi)存空間中; b、在CPU中從源產(chǎn)生多個(gè)粒子,所述多個(gè)粒子包括光子、中子和電子,每個(gè)粒子具有粒子信息,包括粒子的種類、位置、速度、權(quán)重及所在幾何體的編號(hào),將粒子信息連同粒子數(shù)目?jī)?chǔ)存在相應(yīng)數(shù)組中; C、判斷光子和中子數(shù)目之和是否大于設(shè)定值,如果數(shù)目之和大于設(shè)定值,則根據(jù)該數(shù)目之和確定要使用的線程數(shù)目,并將每個(gè)中子或光子分配給GPU中的一個(gè)線程進(jìn)行處理,計(jì)算前進(jìn)距離以及判斷粒子是否死亡;如果數(shù)目之和不大于設(shè)定值,則由CPU處理每個(gè)中子或光子,計(jì)算前進(jìn)距離以及判斷粒子是否死亡; d、由CPU依據(jù)中子、光子和電子的碰撞事件數(shù)目重新劃分線程數(shù)目,并且GPU中每個(gè)線程處理一個(gè)碰撞事件; e、判斷粒子是否死亡,如果繼續(xù)存活,將粒子的信息更新; f、判斷是否產(chǎn)生二次粒子,如果產(chǎn)生,將二次粒子的信息存儲(chǔ); g、由CPU重新統(tǒng)計(jì)所有存活的粒子信息,統(tǒng)計(jì)需要處理的粒子的數(shù)目; h、判斷運(yùn)行時(shí)間是否大于設(shè)定值,如果大于設(shè)定值,則輸出統(tǒng)計(jì)量并釋放CPU和GPU的內(nèi)存空間,所述方法結(jié)束; 1、如果運(yùn)行時(shí)間不大于設(shè)定值,則判斷要處理的粒子的數(shù)目是否小于設(shè)定的最小值;如果小于最小值,則返回步驟b,否則返回步驟c ; 其中GPU包括多個(gè)流處理器,所述多個(gè)流處理器通過(guò)多個(gè)線程對(duì)粒子輸運(yùn)仿真進(jìn)行并行處理,并且所述多個(gè)流處理器對(duì)粒子的輸運(yùn)仿真和碰撞事件的處理是同步進(jìn)行的。
2.根據(jù)權(quán)利要求1所述的方法,其中步驟c還包括: 對(duì)于處理的中子或光子,獲得時(shí)間截?cái)嗑嚯x、到達(dá)邊界距離、平均自由程以及碰撞距離; 計(jì)算以上距離之中的最小距離; 如果最小距離是時(shí)間截?cái)嗑嚯x,則確定該中子或光子死亡; 如果最小距離是達(dá)到邊界距離,則更新該中子或光子的所在幾何體的編號(hào); 如果最小距離是平均自由程,則用其余三個(gè)距離減掉平均自由程,并返回到步驟c的開(kāi)始; 如果最小距離是碰撞距離,則判斷碰撞是中子碰撞還是光子碰撞。
3.根據(jù)權(quán)利要求1所述的方法,其中在步驟e中如下處理碰撞事件: 如果碰撞事件為電子碰撞事件,則計(jì)算電子在上一個(gè)最小距離中的能量損失,將產(chǎn)生的二次粒子的數(shù)目和狀態(tài)進(jìn)行記錄,并返回給CPU ; 如果碰撞事件為光子碰撞事件,則抽樣碰撞核素,處理光子反應(yīng),將產(chǎn)生的二次粒子的數(shù)目和狀態(tài)進(jìn)行記錄,并返回給CPU ; 如果碰撞事件為中子碰撞事件,則抽樣碰撞核素,處理中子反應(yīng),將產(chǎn)生的二次粒子的數(shù)目和狀態(tài)進(jìn)行記錄,并返回給CPU。
【文檔編號(hào)】G06F17/50GK103955567SQ201410146948
【公開(kāi)日】2014年7月30日 申請(qǐng)日期:2014年4月10日 優(yōu)先權(quán)日:2014年4月10日
【發(fā)明者】楊磊, 張勛超, 高笑菲, 齊記, 付芬, 張雅玲, 張智磊 申請(qǐng)人:中國(guó)科學(xué)院近代物理研究所