本發(fā)明屬于計(jì)算機(jī)高性能計(jì)算數(shù)值模擬領(lǐng)域,尤其涉及一種面向輻照損傷akmc模擬的多級壓縮存儲方法。
背景技術(shù):
1、核能在發(fā)電方面有著非常重要的地位,反應(yīng)堆壓力容器是大多數(shù)核電站的關(guān)鍵部件,因此,用計(jì)算機(jī)對反應(yīng)堆壓力容器進(jìn)行輻照損傷模擬,有助于理解和預(yù)測材料在輻照損傷情況下的微觀性質(zhì)和宏觀變化。所以對材料輻照損傷進(jìn)行模擬也是數(shù)值堆軟件的重要內(nèi)容,研究材料輻照損傷問題的一個(gè)重要手段是采用多尺度模擬方法。其中,動力學(xué)蒙特卡洛(kinetic?monte?carlo,kmc)方法是多尺度模擬方法中最為重要的方法之一。和通用的蒙特卡洛思想類似,kmc方法的核心思想是隨機(jī)地抽取事件。如果我們可以確定體系當(dāng)前狀態(tài)下所有可能會發(fā)生的事件并知道他們發(fā)生的概率,那么我們就可以將這些事件發(fā)生的概率作為權(quán)重,來隨機(jī)地抽取事件執(zhí)行以改變體系的狀態(tài),以此推進(jìn)體系向前演化。
2、kmc方法目前已有不少研究,按照研究對象如何發(fā)生移動或者反應(yīng)來劃分。包括原子動力學(xué)蒙特卡洛(atomic?kinetic?monte?carlo,akmc),akmc方法以原子為基本對象,在原子晶格上執(zhí)行kmc。考慮原子和缺陷之間的躍遷導(dǎo)致的微結(jié)構(gòu)演化行為,同時(shí)將“原子運(yùn)動軌跡”粗化為“體系組態(tài)躍遷”。
3、一方面,現(xiàn)有的并行akmc模擬軟件基本上都是基于區(qū)域分解實(shí)現(xiàn)的,將模擬區(qū)域劃分為多個(gè)子區(qū)域,并將其分配到不同的計(jì)算單元上。即模擬區(qū)域中所有原子的類型都會被存儲在計(jì)算機(jī)中。多個(gè)研究團(tuán)隊(duì)一直在為提高大規(guī)模kmc模擬能力而不斷努力。但是傳統(tǒng)的存儲方式在有限的硬件條件下,會大大制約程序模擬的規(guī)模,使得千萬億原子的模擬在內(nèi)存方面仍有巨大的挑戰(zhàn)。
4、另一方面,現(xiàn)有的并行akmc模擬軟件通常采用同步子域(synchronous?sub-lattice,sl)算法,并且通信方式基本采用按需通信,就這要求在程序運(yùn)行之初,各個(gè)進(jìn)程通過消息傳遞接口(message?passing?interface,mpi)通信同步自己的ghost區(qū)。由于通信的數(shù)據(jù)量與模擬的原子規(guī)模有關(guān),這就會使通信的發(fā)送和接收緩沖區(qū)大小隨著模擬規(guī)模的擴(kuò)大而增加,從而導(dǎo)致內(nèi)存的峰值消耗高。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明所要解決的技術(shù)問題是針對現(xiàn)有技術(shù)的上述不足,提供了一種面向輻照損傷akmc模擬的多級壓縮存儲方法。通過不再存儲溶液原子的信息,該方法能有效的解決現(xiàn)有存儲模式消耗內(nèi)存量大和初始化時(shí)進(jìn)程間通信量大的問題。
2、一種用于輻照損傷akmc模擬的多級壓縮存儲方法包含以下步驟:
3、步驟一、本次akmc模擬所啟動的所有進(jìn)程根據(jù)本次模擬所設(shè)置的總?cè)苜|(zhì)數(shù)、總空位數(shù)以及進(jìn)程在笛卡爾通信域中的進(jìn)程號確定當(dāng)前進(jìn)程所劃分到的溶質(zhì)原子數(shù)和空位數(shù)。
4、步驟二、一級壓縮存儲,各個(gè)進(jìn)程根據(jù)劃分到的溶質(zhì)原子數(shù)和空位數(shù),生成相應(yīng)數(shù)量的局部id,并且將局部id作為鍵存儲在相應(yīng)的溶質(zhì)哈希表和空位哈希表中。
5、步驟三、二級壓縮存儲,在計(jì)算開始之前,各個(gè)進(jìn)程將自己的surface區(qū)中的非溶液原子信息通過mpi通信同步到鄰居進(jìn)程對應(yīng)的ghost區(qū)。
6、步驟四、經(jīng)過步驟一至步驟三,壓縮存儲方法對存儲的壓縮已經(jīng)執(zhí)行完畢了。但是在壓縮存儲完畢后,由于不再存儲溶液原子的信息,原子信息的獲取由查詢變?yōu)榱伺袛?。需要根?jù)局部坐標(biāo)計(jì)算出局部id,再使用局部id去各個(gè)哈希表中查詢,從而判斷該局部坐標(biāo)對應(yīng)的原子類型。
7、進(jìn)一步,步驟一中,所述各個(gè)進(jìn)程根據(jù)系統(tǒng)的總?cè)苜|(zhì)數(shù)、總空位數(shù)以及進(jìn)程在笛卡爾通信域中的進(jìn)程號確定當(dāng)前進(jìn)程所劃分到的溶質(zhì)原子數(shù)和空位數(shù)具體為:
8、1.1、各個(gè)進(jìn)程讀取配置文件以獲取當(dāng)前模擬環(huán)境中的總?cè)苜|(zhì)數(shù)和總空位數(shù)。
9、1.2、各個(gè)進(jìn)程做均勻劃分,即計(jì)算總?cè)苜|(zhì)數(shù)和總空位數(shù)除以進(jìn)程總數(shù)的值。
10、若除數(shù)有余數(shù),則根據(jù)進(jìn)程在笛卡爾通信域中的進(jìn)程號來均勻的分配余數(shù),即將前余數(shù)個(gè)進(jìn)程所分配到的溶質(zhì)數(shù)和空位數(shù)加一。
11、進(jìn)一步,步驟二中,所述各個(gè)進(jìn)程根據(jù)劃分到的溶質(zhì)原子數(shù)和空位數(shù),生成相應(yīng)數(shù)量的局部id,并且將局部id作為鍵存儲在相應(yīng)的溶質(zhì)哈希表和空位哈希表中具體為:
12、2.1、進(jìn)程根據(jù)劃分到的溶質(zhì)數(shù)和空位數(shù),生成相應(yīng)數(shù)量的局部id。
13、2.2、將空位原子的局部id存儲于空位哈希表中,溶質(zhì)原子的局部id存儲于相應(yīng)的溶質(zhì)哈希表中。
14、進(jìn)一步,步驟三中,所述在計(jì)算開始之前,各個(gè)進(jìn)程將自己的surface區(qū)的數(shù)據(jù)通過mpi通信同步到鄰居進(jìn)程對應(yīng)的ghost區(qū)具體為:
15、3.1、由于采用壓縮通信,設(shè)計(jì)了一個(gè)壓縮通信的結(jié)構(gòu)體,mpi通信時(shí)將傳輸壓縮通信的結(jié)構(gòu)體數(shù)組。而原先mpi通信時(shí),傳輸?shù)氖钦蛿?shù)組,每個(gè)數(shù)組元素代表原子類型。
16、壓縮通信的結(jié)構(gòu)體:下標(biāo),原子類型。其中,下標(biāo)表示該非溶液原子在原先的整型數(shù)組當(dāng)中的位置。原子類型表示該非溶液原子為哪一類的溶質(zhì)原子或空位原子。
17、3.2、使用壓縮存儲算法,傳輸surface區(qū)的數(shù)據(jù)給鄰居進(jìn)程。
18、進(jìn)一步,步驟3.2中所述壓縮存儲算法具體為:
19、3.2.1、遍歷第一維度的surface區(qū)所有數(shù)據(jù),將非溶液原子的下標(biāo)和原子類型加入到發(fā)送緩沖區(qū)中。
20、3.2.2、各個(gè)進(jìn)程將發(fā)送緩沖區(qū)中的數(shù)據(jù)傳輸給第一維度的鄰居進(jìn)程。
21、3.2.3、各個(gè)進(jìn)程接收從鄰居進(jìn)程發(fā)送過來的數(shù)據(jù)到接收緩沖區(qū)中。
22、3.2.4、遍歷接收緩沖區(qū)的數(shù)據(jù),根據(jù)下標(biāo)更新ghost區(qū)相應(yīng)的非溶液原子類型的數(shù)據(jù)。
23、3.2.5、ghost區(qū)的其余位置的數(shù)據(jù)(其下標(biāo)沒有出現(xiàn)在接收緩沖區(qū)的數(shù)據(jù)中)看作是溶液原子進(jìn)行更新同步。
24、3.2.6、重復(fù)3.2.1至3.2.5,直至所有維度的surface區(qū)數(shù)據(jù)都同步出去。
25、進(jìn)一步,步驟四中,所述根據(jù)原子的局部id判斷原子類型具體為:
26、4.1、獲取原子在當(dāng)前進(jìn)程中的局部坐標(biāo)。
27、4.2、根據(jù)局部坐標(biāo)可以計(jì)算出局部id。以二維的情況為例,假設(shè)局部坐標(biāo)為(x0,y0),當(dāng)前進(jìn)程所負(fù)責(zé)的子域的大小為x*y,則該局部坐標(biāo)對應(yīng)的局部id為x0*x+y0。
28、4.3、根據(jù)局部id去哈希表中查詢該原子的類型。
29、進(jìn)一步,步驟4.3中所述查詢流程具體為:
30、4.3.1、查詢該局部id是否位于空位哈希表中,若存在,則查詢結(jié)束,判斷該原子為空位原子。
31、4.3.2、該局部id不在空位哈希表中,則去查詢該局部id是否位于溶質(zhì)類型一的哈希表中,若存在,則查詢結(jié)束,判斷該原子為溶質(zhì)一原子;若不存在,則重復(fù)4.3.2,直至在某一個(gè)溶質(zhì)原子的哈希表中查詢到或查詢完所有的溶質(zhì)哈希表。
32、4.3.3、若所有的溶質(zhì)哈希表和空位哈希表中都沒有該局部id的鍵,則判斷該原子為溶液原子。
33、本發(fā)明有益效果:
34、本發(fā)明通過使用一種多層級的壓縮存儲方法改善了現(xiàn)有存儲策略由于沒有針對性的優(yōu)化,難以應(yīng)對超大規(guī)模模擬時(shí)內(nèi)存出現(xiàn)瓶頸的問題。本發(fā)明能大大減少系統(tǒng)內(nèi)存的消耗和初始化通信的通信量。