在粒子模拟算法并行中去除数据竞争的线分配并行方法与流程

文档序号:11949828阅读:197来源:国知局
在粒子模拟算法并行中去除数据竞争的线分配并行方法与流程

本发明属于粒子模拟方法并行技术领域。在通过计算机程序实现一维粒子模拟算法及其并行化过程中,涉及一种在一维算法并行过程中如何去除数据竞争的并行方法,具体为一种在粒子模拟算法并行中去除数据竞争的线分配并行方法。



背景技术:

在气体放电、真空电子器件等涉及场与带电粒子相互作用的领域中,带电粒子在场的作用下运动,从而改变带电粒子在空间中的分布状态。粒子的状态反过来影响空间的场分布。在上述场与带电粒子相互作用过程中,有时结构和物理特性是满足面对称的,或者只有一个方向的互作用是主要的,或者有某两个方向的物理特性可以通过理论解析的方法得到,则对该类场与带电粒子相互作用的数值模拟可以采用一维粒子模拟方法来实现。利用一维粒子模拟方法对场与粒子相互作用问题的描述中,由于模拟粒子数目较多、时间和空间步长较小等基于数值模拟精确度的要求,导致计算机模拟负担很大,而通过将模拟程序并行化,可以大大缩短运行时间。但在并行过程中,由于存在数据竞争,极大地抑制了并行程序的并行效率。

当多个线程对同一块内存进行修改的时候就会带来数据竞争,而一维粒子模拟程序计算过程中,如果以网格为单元分配线程,则遇到的数据竞争一般有三种情况:

1、不同线程中粒子跨越到同一网格的时候。该种情况的具体实例如图1所示,当线程i中的粒子和线程j中的粒子同时跨越到线程k中的网格时,线程i使线程k中的网格的粒子数从n变到n+1,线程j也使得线程k的网格的粒子数从n变到n+1,这就使得线程i和线程j对线程k的网格的粒子数统计出现了数据竞争。

2、不同线程中粒子对同一网格内电流密度均有贡献的时候。该种情况的具体实例如图2所示,当线程i中的粒子和线程j中的粒子同时对线程k中的网格的电流密度均有贡献时,对于线程k中的网格的电流密度的求解会存在数据竞争。

3、不同线程中粒子对同一网格内电荷密度均有贡献的时候。该种情况的具体实例如图3所示,当线程i中的粒子和线程j中的粒子同时对线程k中的网格的电荷密度均有贡献时,对于线程k中的网格的电荷密度的求解会存在数据竞争。

对于带有上述数据竞争的一维粒子模拟程序,为了保证计算的准确性,对其并行的常规方法有两种。第一种方法是不并行具有竞争的部分,即包含数据竞争部分的程序串行执行;第二种方法是用锁或者原子操作来对并行程序进行控制,即包含数据竞争部分的程序在无竞争时并行、在竞争发生时串行。采用第一种方法对一维粒子模拟程序进行并行时,由于存在数据竞争部分的程序是串行的,而数据竞争部分占总体程序的比例很高,所以第一种方法的并行效率很低,加速比很小。采用第二种方法对一维粒子模拟程序进行并行时,数据竞争部分采用锁或者原子操作来控制,当竞争未发生时并行效率高,但当竞争发生时实质也是串行执行的,而竞争发生的频率在一维粒子模拟程序中很高,所以第二种方法的并行效率也很低。



技术实现要素:

针对上述存在问题或不足,为了解决一维粒子模拟程序在并行过程中由于存在数据竞争导致并行效率低的问题,本发明提供了一种在粒子模拟算法并行中去除数据竞争的线分配并行方法。

具体技术方案如下:

步骤1、

设定粒子在单位时间步长内的运动最多可以跨越L个网格;

设定求解网格上电流密度时,某一个网格中的粒子对电流密度的贡献最多影响与粒子所在网格相邻的M个网格;

设定求解网格上电荷密度时,某一个网格中的粒子对电荷密度的贡献最多影响与粒子所在网格相邻的N个网格;

步骤2、

由以上三个设定可知,一维粒子模拟算法中一个网格的数据竞争影响范围取决于L、M、N中的最大值。假设L、M、N中的最大值为nMax,则一维粒子模拟算法中一个网格的数据竞争影响范围为Ns=2×nMax+1网格。然后对所有网格新增一个为后续应用去除数据竞争方法的编号,编号规则是以长度为Ns数目的网格集合为单元,依次编号为1、2、……、Ns,并以此循环,直至遍历所有网格为止。

步骤3、

待所有网格均被赋予编号之后,将编号相同的网格提取出来放入一个集合中,则最终可以产生Ns个集合。这Ns个集合中的每一个集合,其中的所有网格均不存在数据竞争,可以直接并行。最后将Ns个集合串行执行。

综上所述,本发明通过采用如上的线分配并行方法使得对粒子模拟算法并行的效率因去除数据竞争而明显提高。

附图说明

图1为粒子跨越网格时产生的数据竞争;

图2为求解电流密度时产生的数据竞争;

图3为求解电荷密度时产生的数据竞争;

图4为去除数据竞争的线分配方法中的网格编号实例;

图5为去除数据竞争的线分配方法中的网格分组实例。

具体实施方式

下面结合附图和实施例对本发明作进一步详细说明。

假设nMax=3,则Ns=7。

首先以长度为Ns=7的连续网格集合为单元,依次编号为1、2、……、7,并以此循环,直至遍历所有网格为止。如图4所示。

然后将编号相同的网格提取出来放入一个集合中,则最终可以产生7个集合,如图5所示。其中编号为1的所有网格形成第1个集合,编号为2的所有网格形成第2个集合,以此类推,直至编号为7的所有网格形成第7个集合。

这7个集合中的每一个集合,其中的所有网格均不存在数据竞争,因此集合内部可以直接并行。最后7个集合之间串行执行。

综上可见,本发明通过采用如上的线分配并行方法去除了对粒子模拟算法并行中的数据竞争,明显提高了粒子模拟算法的并行效率。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1