System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种面向辐照损伤AKMC模拟的多级压缩存储方法技术_技高网

一种面向辐照损伤AKMC模拟的多级压缩存储方法技术

技术编号:42951291 阅读:8 留言:0更新日期:2024-10-11 16:07
本发明专利技术公开了一种面向辐照损伤AKMC模拟的多级压缩存储方法,该方法首先AKMC模拟所启动的所有进程,确定当前进程所划分到的溶质原子数和空位数。其次各个进程根据划分到的溶质原子数和空位数,生成相应数量的局部ID,并且将局部ID作为键存储在相应的溶质哈希表和空位哈希表中。然后各个进程将其surface区中的非溶液原子信息,通过MPI通信同步到邻居进程对应的ghost区。最后根据局部坐标计算出局部ID,再使用局部ID去各个哈希表中查询,从而判断该局部坐标对应的原子类型。本发明专利技术解决了难以应对超大规模模拟时内存出现瓶颈的问题,减少系统内存的消耗和初始化通信的通信量。

【技术实现步骤摘要】

本专利技术属于计算机高性能计算数值模拟领域,尤其涉及一种面向辐照损伤akmc模拟的多级压缩存储方法。


技术介绍

1、核能在发电方面有着非常重要的地位,反应堆压力容器是大多数核电站的关键部件,因此,用计算机对反应堆压力容器进行辐照损伤模拟,有助于理解和预测材料在辐照损伤情况下的微观性质和宏观变化。所以对材料辐照损伤进行模拟也是数值堆软件的重要内容,研究材料辐照损伤问题的一个重要手段是采用多尺度模拟方法。其中,动力学蒙特卡洛(kinetic monte carlo,kmc)方法是多尺度模拟方法中最为重要的方法之一。和通用的蒙特卡洛思想类似,kmc方法的核心思想是随机地抽取事件。如果我们可以确定体系当前状态下所有可能会发生的事件并知道他们发生的概率,那么我们就可以将这些事件发生的概率作为权重,来随机地抽取事件执行以改变体系的状态,以此推进体系向前演化。

2、kmc方法目前已有不少研究,按照研究对象如何发生移动或者反应来划分。包括原子动力学蒙特卡洛(atomic kinetic monte carlo,akmc),akmc方法以原子为基本对象,在原子晶格上执行kmc。考虑原子和缺陷之间的跃迁导致的微结构演化行为,同时将“原子运动轨迹”粗化为“体系组态跃迁”。

3、一方面,现有的并行akmc模拟软件基本上都是基于区域分解实现的,将模拟区域划分为多个子区域,并将其分配到不同的计算单元上。即模拟区域中所有原子的类型都会被存储在计算机中。多个研究团队一直在为提高大规模kmc模拟能力而不断努力。但是传统的存储方式在有限的硬件条件下,会大大制约程序模拟的规模,使得千万亿原子的模拟在内存方面仍有巨大的挑战。

4、另一方面,现有的并行akmc模拟软件通常采用同步子域(synchronous sub-lattice,sl)算法,并且通信方式基本采用按需通信,就这要求在程序运行之初,各个进程通过消息传递接口(message passing interface,mpi)通信同步自己的ghost区。由于通信的数据量与模拟的原子规模有关,这就会使通信的发送和接收缓冲区大小随着模拟规模的扩大而增加,从而导致内存的峰值消耗高。


技术实现思路

1、本专利技术所要解决的技术问题是针对现有技术的上述不足,提供了一种面向辐照损伤akmc模拟的多级压缩存储方法。通过不再存储溶液原子的信息,该方法能有效的解决现有存储模式消耗内存量大和初始化时进程间通信量大的问题。

2、一种用于辐照损伤akmc模拟的多级压缩存储方法包含以下步骤:

3、步骤一、本次akmc模拟所启动的所有进程根据本次模拟所设置的总溶质数、总空位数以及进程在笛卡尔通信域中的进程号确定当前进程所划分到的溶质原子数和空位数。

4、步骤二、一级压缩存储,各个进程根据划分到的溶质原子数和空位数,生成相应数量的局部id,并且将局部id作为键存储在相应的溶质哈希表和空位哈希表中。

5、步骤三、二级压缩存储,在计算开始之前,各个进程将自己的surface区中的非溶液原子信息通过mpi通信同步到邻居进程对应的ghost区。

6、步骤四、经过步骤一至步骤三,压缩存储方法对存储的压缩已经执行完毕了。但是在压缩存储完毕后,由于不再存储溶液原子的信息,原子信息的获取由查询变为了判断。需要根据局部坐标计算出局部id,再使用局部id去各个哈希表中查询,从而判断该局部坐标对应的原子类型。

7、进一步,步骤一中,所述各个进程根据系统的总溶质数、总空位数以及进程在笛卡尔通信域中的进程号确定当前进程所划分到的溶质原子数和空位数具体为:

8、1.1、各个进程读取配置文件以获取当前模拟环境中的总溶质数和总空位数。

9、1.2、各个进程做均匀划分,即计算总溶质数和总空位数除以进程总数的值。

10、若除数有余数,则根据进程在笛卡尔通信域中的进程号来均匀的分配余数,即将前余数个进程所分配到的溶质数和空位数加一。

11、进一步,步骤二中,所述各个进程根据划分到的溶质原子数和空位数,生成相应数量的局部id,并且将局部id作为键存储在相应的溶质哈希表和空位哈希表中具体为:

12、2.1、进程根据划分到的溶质数和空位数,生成相应数量的局部id。

13、2.2、将空位原子的局部id存储于空位哈希表中,溶质原子的局部id存储于相应的溶质哈希表中。

14、进一步,步骤三中,所述在计算开始之前,各个进程将自己的surface区的数据通过mpi通信同步到邻居进程对应的ghost区具体为:

15、3.1、由于采用压缩通信,设计了一个压缩通信的结构体,mpi通信时将传输压缩通信的结构体数组。而原先mpi通信时,传输的是整型数组,每个数组元素代表原子类型。

16、压缩通信的结构体:下标,原子类型。其中,下标表示该非溶液原子在原先的整型数组当中的位置。原子类型表示该非溶液原子为哪一类的溶质原子或空位原子。

17、3.2、使用压缩存储算法,传输surface区的数据给邻居进程。

18、进一步,步骤3.2中所述压缩存储算法具体为:

19、3.2.1、遍历第一维度的surface区所有数据,将非溶液原子的下标和原子类型加入到发送缓冲区中。

20、3.2.2、各个进程将发送缓冲区中的数据传输给第一维度的邻居进程。

21、3.2.3、各个进程接收从邻居进程发送过来的数据到接收缓冲区中。

22、3.2.4、遍历接收缓冲区的数据,根据下标更新ghost区相应的非溶液原子类型的数据。

23、3.2.5、ghost区的其余位置的数据(其下标没有出现在接收缓冲区的数据中)看作是溶液原子进行更新同步。

24、3.2.6、重复3.2.1至3.2.5,直至所有维度的surface区数据都同步出去。

25、进一步,步骤四中,所述根据原子的局部id判断原子类型具体为:

26、4.1、获取原子在当前进程中的局部坐标。

27、4.2、根据局部坐标可以计算出局部id。以二维的情况为例,假设局部坐标为(x0,y0),当前进程所负责的子域的大小为x*y,则该局部坐标对应的局部id为x0*x+y0。

28、4.3、根据局部id去哈希表中查询该原子的类型。

29、进一步,步骤4.3中所述查询流程具体为:

30、4.3.1、查询该局部id是否位于空位哈希表中,若存在,则查询结束,判断该原子为空位原子。

31、4.3.2、该局部id不在空位哈希表中,则去查询该局部id是否位于溶质类型一的哈希表中,若存在,则查询结束,判断该原子为溶质一原子;若不存在,则重复4.3.2,直至在某一个溶质原子的哈希表中查询到或查询完所有的溶质哈希表。

32、4.3.3、若所有的溶质哈希表和空位哈希表中都没有该局部id的键,则判断该原子为溶液原本文档来自技高网...

【技术保护点】

1.一种面向辐照损伤AKMC模拟的多级压缩存储方法,其特征在于,包含以下步骤:

2.根据权利要求1所述的面向辐照损伤AKMC模拟的多级压缩存储方法,其特征在于,所述步骤一具体过程为:

3.根据权利要求2所述的面向辐照损伤AKMC模拟的多级压缩存储方法,其特征在于,在步骤二中,将空位原子的局部ID存储于空位哈希表中,溶质原子的局部ID存储于溶质哈希表中。

4.根据权利要求3所述的面向辐照损伤AKMC模拟的多级压缩存储方法,其特征在于,所述步骤三具体过程为:

5.根据权利要求4所述的面向辐照损伤AKMC模拟的多级压缩存储方法,其特征在于,所述压缩存储算法具体为:

6.根据权利要求1至5任一所述的面向辐照损伤AKMC模拟的多级压缩存储方法,其特征在于,所述使用局部ID去各个哈希表中查询,判断该局部ID对应的原子类型具体过程为:

【技术特征摘要】

1.一种面向辐照损伤akmc模拟的多级压缩存储方法,其特征在于,包含以下步骤:

2.根据权利要求1所述的面向辐照损伤akmc模拟的多级压缩存储方法,其特征在于,所述步骤一具体过程为:

3.根据权利要求2所述的面向辐照损伤akmc模拟的多级压缩存储方法,其特征在于,在步骤二中,将空位原子的局部id存储于空位哈希表中,溶质原子的局部id存储于溶质哈希表中。

4....

【专利技术属性】
技术研发人员:潘志杰曾艳王珏殷昱煜李顺德聂宁明张纪林任永坚
申请(专利权)人:杭州电子科技大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1