一种基于共享内存的电磁场模拟并行计算方法

文档序号:1875828 发布日期:2021-11-23 浏览:37次 >En<

阅读说明:本技术 一种基于共享内存的电磁场模拟并行计算方法 (Electromagnetic field simulation parallel computing method based on shared memory ) 是由 胡玉兰 刘大刚 刘腊群 王辉辉 陈凤贺 于 2021-07-22 设计创作,主要内容包括:该发明公开了一种基于共享内存的电磁场模拟并行计算方法,属于电磁场模拟领域,特别是基于共享内存的电磁场模拟并行计算方法。本发明采用多进程方式同时模拟电磁场数据,设置共享内存,将模拟空间划分为多个分界面,再划分每个进程需要模拟的分界面,每个进程对同一个共享内存进行数据读写,每次模拟都单独进行电场或磁场模拟,这样减少进程间的数据交换,加上共享内存,这样能答复提高电磁场的模拟速度和效率。(The invention discloses an electromagnetic field simulation parallel computing method based on a shared memory, belongs to the field of electromagnetic field simulation, and particularly relates to an electromagnetic field simulation parallel computing method based on a shared memory. The invention adopts a multi-process mode to simultaneously simulate electromagnetic field data, sets a shared memory, divides a simulation space into a plurality of interfaces, then divides the interface required to be simulated for each process, and carries out data reading and writing on the same shared memory by each process, and carries out electric field or magnetic field simulation independently for each simulation, thereby reducing data exchange among the processes.)

一种基于共享内存的电磁场模拟并行计算方法

技术领域

本发明属于电磁场模拟领域,特别是基于共享内存的电磁场模拟并行计算方法。

背景技术

在粒子模拟计算中,因为计算机需要求解巨量的麦克斯韦差分方程组、洛伦兹力方程、粒子运动方程以及电流密度和电荷密度等物理参量。并且在Courant稳定性条件的限制下,并行模拟计算过程中的单位时间长度必须小到一定程度,因此仿真模拟会耗费大量的机时

在粒子模拟软件中已有的并行计算技术也需要不断更新来提升并行效率。

并行计算的粗粒度并行是基于MPI的并行编程模型,此方法的移植性较好且较容易设计,但是由于在进程间消息传递过程中,进程间通信和同步耗费大量机时,其本身能达到的性能提升有限,主要原因有两方面,一方面来自于现有进程点对点通信中大量的发送与接收数据的操作,另一方面是进程负载不均导致进程同步等待浪费大量计算机算力。

Windows系统中,MPI的支撑软件主要包括了MPICH2和MSMPI。

原有粒子模拟方法使用的MPI依赖库是MPICH2。MPICH2仅支持MPI-2标准中的特性,不支持MPI-3标准的特性。MPI-2标准是通过消息发送的方式来完成,本质上各个进程的数据并不直接共享,进程不能通过简单的加载或者存储来完成对其他进程数据的访问。各个进程在消息传递或者进行远端内存访问时都会需要额外的内存复制,从而增加内存消耗并且降低并行计算性能。

发明内容

本发明所要解决的技术问题是,设计一种三维电磁粒子模拟并行效率优化方案,解决三维粒子模拟软件中并行效率过低的问题。

本发明解决所述技术问题采用的技术方案是,一种基于共享内存的电磁场模拟并行计算方法,该方法包括:

步骤1:将物理模型按空间平均划分为多个子区域,每个子区域由一个进程模拟,下面从简单的两个进程来考虑;对空间进行网格化,设要计算一行网格面的电磁场;

步骤2:然后创建共享内存窗口,在该共享内存中存放一个共享数组,一个时间步内每一个网格上各个方向上的电磁场分量存入共享数组且仅与数组中的一个索引对应,所有进程都依次对该数组进行读或者写;

步骤3:确定分界面,该分界面将待计算的这一行网格面平均划分,并初始化共享内存;

第1时刻内:进程0计算分界面及分界面一边的所有网格面的电场,进程1计算分界面另一边所有网格面的电场;将各网格面的电场数据根据索引存入共享数组中的对应位置;

第1+1/2时刻内:进程0计算分界面及分界面一边的所有网格面的磁场,进程1计算分界面另一边所有网格面的磁场;将各网格面的磁场数据根据索引存入共享数组中的对应位置;

在该完整时间步内,需要的电磁场数据在共享内存里可以被进程随时调用,完成电磁场的更新后,进程会进行一次同步;

第2时刻内:根据共享内存中各网格面的磁场数据,进程0计算分界面及分界面一边的所有网格面的电场,进程1计算分界面另一边所有网格面的电场;将各网格面的电场数据根据索引存入共享数组中的对应位置;

第2+1/2时刻内:根据共享内存中各网格面的电场数据,进程0计算分界面及分界面一边的所有网格面的磁场,进程1计算分界面另一边所有网格面的磁场;将各网格面的磁场数据根据索引存入共享数组中的对应位置;

在该完整时间步内,需要的电磁场数据在共享内存里可以被进程随时调用,完成电磁场的更新后,进程会进行一次同步;

采用上述相同方法计算后续时间步内各网格面的电磁场数据。

进一步的,所述步骤3中采用如下公式计算电场:

其中,t表示时间,表示第n时间步内(i+1/2,j,k)位置上x方向上的电场分量,表示第n+1/2时间步内(i+1/2,j+1/2,k)位置上z方向上的磁场强度,表示第n+1/2时间步内(i+1/2,j,k)位置上x方向上的电流密度;

采用下式计算磁场:

其中,表示第n+3/2时间步内(i+1/2,j+1/2,k)位置上z方向上的磁场分量,表示第n+1时间步内(i+1/2,j+1,k)位置上x方向上的电场强度。

进一步的,当系统内不存在粒子或不存在相对论粒子时,可以通过上述递推方法对电磁场进行更新;当系统内存在相对论粒子时,需要采用下面的递推方法更新电磁场;

其中,Dn表示第n时间步内的电场,为哈密顿算符,α1、α2、α3表示下一时刻、当前时刻以及上一时刻磁场值的权重因子,Hn+1/2表示第n+1/2时间步内的磁场强度,Jn+1/2表示第n+1/2时间步内的电流密度。

本发明方法,由于数据在共享内存中被各进程直接调用,比起原有计算里进程间通过消息传递数据的方式,可以显著提高并行计算的效率,缩短模拟时间。

用网格数分别为(200,200,40)以及(200,200,25)下的波导进行测试,测试进程数分别设置为2,4,6。在这两种网格划分下,优化方法的提升率最高能在4进程下达到40%。

附图说明

图1为YEE元胞模型;

图2为网格面场分量;

图3为模拟空间示意图;

图4为模拟空间分区示意图;

图5中(a)为优化前的电磁场更新并行时序;(b)为优化后的电磁场更新并行时序;

图6为(a)为优化前隐式递推的并行时序;(b)为优化后隐式递推的并行时序。

具体实施方式

下面结合附图,对本发明进行详细描述。

首先采用YEE网格(图1)离散化模拟空间,以z坐标方向,提出了网格面的思想:Z方向相等的(X,Y)平面为一个网格面。在图2中标示了网格面A的电场分量,即水平向右方向为Ez方向。

两个进程下,一个进程模拟一个子区域,由图3所示,其中A~F为网格面,模拟空间按分界面(即D面)分为2个子区域,进程0模拟左边子区域,进程1模拟右边的子区域。

然后创建共享内存窗口,在该共享内存中存放一个共享数组,一个时间步内每一个网格上各个方向上的分量存入数组且仅与数组中的一个索引对应,所有进程都可以对该数组进行读或者写。

多个进程拿出自己的一部分空间,或者是只由一个进程拿出一部分空间,将这部分空间置于一个共享窗口中,对于这个窗口,通信域中的进程都可以对他进行访问,意味着进程间通过该共享窗口可以在进程间传递消息。

在共享内存窗口中存放一个数组,该数组的大小为size,进程号为nmyrank,窗口中含有大小为size的数组段的数量为num。通过这个共享数组,现在所有进程共同维护一个电磁场数组,所有进程都可以对该数组进行读或者写,一个时间步内每一个网格上各个方向上的分量仅与数组中的一个索引对应。

从FDTD(中心差分)算法的基本原理出发,对一个网格上不同时间迭代步上得出电场,磁场的计算的差分公式。电磁场在空间中的传播基于MAXWELL方程组:

满足以下耦合关系:

其中,为哈密顿算符,t表示时间,E为电场强度,H为磁场强度,D为电位移,B为磁感应强度,ρ为空间电荷密度,J为电流密度矢量,是介质的电容量,是相对电容量,ε0为真空介电常数,其值为8.554×10-12F/m,是磁导率,是相对磁导率,μ0为真空磁导率,其值为4π×10-7H/m。

在三维直角坐标系下,利用中心差分原理推导出以下的差分公式:

公式中,Δt为时间步长,Δx、Δy、Δz为空间中x向、y向、z向上的网格步长,变量下标为场分量在YEE元胞(如图1)中的网格索引,上标为场分量对应的时间步。从YEE元胞图中可以看出电场、磁场分量在网格中的位置与索引。在YEE网格中磁场Hx,Hy,Hz处于面心位置,电场Ex,Ey,Ez在半网格点位置。

根据差分公式可以看出电磁场在递推更新时的空间关系:一个电场分量的更新需要其周围四个磁场分量和同一位置的电流密度分量;而一个磁场分量的更新需要其周围的四个电场分量。同样可以理解为过去时刻和现在时刻的场求解将来时刻的场(过去时刻和现在时刻的场均为已知),即由n时刻的电场和n+1/2时刻的磁场计算n+1时刻的电场,由n+1/2时刻的磁场和n+1时刻的电场计算n+3/2时刻的磁场。

于是发现在处理共享内存中的数据时,多个进程会重复处理一些网格面,所以我们需要重新对初始化范围做一个明显的模拟区域范围限制(图4)。具体如下:从模拟区域最左端到分界面,进程0对这些子区域的电磁场分量进行初始化;从分界面右端E网格面到最右端,进程1对相关子区域的电磁场分量进行初始化。

当进程0计算至N+1时间步C面网格的电场时,需要D面网格N+1/2时间步的磁场,而进程在计算完电磁场之后才进行同步,考虑这样一种情况:进程0计算到C面网格时,进程1已经完成对D面网格电磁场的更新,所以在差分公式进行计算时使用的D面网格N+3/2时间步的数据,会导致C面网格电磁场更新出现错误的结果,同理C面网格若在D面网格计算前先完成更新也会影响到D面网格电磁场更新的对错。

为了避免上述数据计算时序混乱导致的错误,在电磁场更新并行算法优化方案中,同一完整时间步内需要将电场和磁场分开进行求解,具体求解过程如下:

第1时刻内:进程0计算分界面及分界面一边的所有网格面的电场,进程1计算分界面另一边所有网格面的电场;将各网格面的电场数据存入共享内存中的对应存储区域;

第1+1/2时刻内:进程0计算分界面及分界面一边的所有网格面的磁场,进程1计算分界面另一边所有网格面的磁场;将各网格面的磁场数据存入共享内存中的对应存储区域;

在该完整时间步内,需要的电磁场数据在共享内存里可以被进程随时调用,完成电磁场的更新后,进程会进行一次同步。

第2时刻内:根据共享内存中各网格面的磁场数据,进程0计算分界面及分界面一边的所有网格面的电场,进程1计算分界面另一边所有网格面的电场;将各网格面的电场数据存入共享内存中的对应存储区域;

第2+1/2时刻内:根据共享内存中各网格面的电场数据,进程0计算分界面及分界面一边的所有网格面的磁场,进程1计算分界面另一边所有网格面的磁场;将各网格面的磁场数据存入共享内存中的对应存储区域;

在该完整时间步内,需要的电磁场数据在共享内存里可以被进程随时调用,完成电磁场的更新后,进程会进行一次同步。

采用上述相同方法计算后续时间步内各网格面的电磁场数据。

相较于未优化的电磁场更新(图5(a)),每个时间步的电磁场更新之前两个进程同步,进程0将网格面C的Bx和By发送给进程1,同时进程1将网格面D的Bx和By、Jx和Jy发送给进程0;然后进程0和进程1各自完成子区域内的电磁场更新。该未优化方法的通信量和计算量明显高于新的优化方法(图5(b))。故使用共享内存后的方法,计算流程中少了进程间数据交换,进程对分界面上数据也不再重复求解,降低了计算量,提高了电磁场模拟计算效率。

进一步的,当系统内不存在粒子或不存在相对论粒子时,可以通过上述递推方法对电磁场进行更新;当系统内存在相对论粒子时,需要采用下面的递推方法更新电磁场;

在该递推方法中,更新n+1时刻的电场会与n-1/2,n+1/2,n+3/2时刻的磁场相关。加权求解公式如下:

公式中,Dn表示第n时间步内的电场,α1、α2、α3表示下一时刻、当前时刻以及上一时刻磁场值的权重因子,Hn+1/2表示第n+1/2时间步内的磁场强度,Jn+1/2表示第n+1/2时间步内的电流密度。α1、α2、α3满足以下关系:

其中τi为第i次迭代的低松弛因子(i=0,1,2,3……),令Hn+3/2,0=Hn+1/2

可以得到:

Dn+1,i表示第i次迭代时n+1时刻的电场,Hn+3/2,i-1表示第i-1次迭代时n+3/2时刻的磁场强度。显然,每个时间步,C只需要计算一次,即在第一次迭代时计算。因此,在每个时间步内,第二次及其之后的迭代有相同的计算式,可以采用同样的算法。

依据上述模拟区域的划分,在该递推方法中,迭代次数可以被设置,一般来说次数越多,滤波效果越好。但是次数越多,计算时间越长,所以为了取中和,考虑取四次迭代。

每此迭代过程都包括以下步骤:进程0和进程1分别计算上述中子区域中的电场;在子区域的电场计算完成后两个进程再依次计算各个子区域的磁场,最后进程同步数据以保证计算结果的正确性。进行四次松弛迭代后完成电磁场的更新。

未优化的该隐式方法(图6(a))中,在第一次迭代之前,进程0和进程1同步,进程0将网格面C的Bx和By发送给进程1,进程1将网格面D的Bx和By、Jx和Jy发送给进程0,然后两个进程完成第一次迭代;第二次及其以后的迭代开始之前,进程0和进程1同样需要同步,进程0将网格面C的Bx和By发送给进程1,进程1将网格面D的Bx和By发送给进程0,然后两个进程完成迭代计算。同样未优化的方法中存在多余的通信量和计算量。依据上述方法,在共享内存里,没有数据传递的损耗,并行计算效率得以提升。

直角坐标系下隐式递推并行时序图优化前后对比:优化后减少了进程间场数据的交换。优化前后的电磁场更新并行计算时序如下图6。

测试直角坐标系下网格数分别为(200,200,40)以及(200,200,25)下的波导,测试进程数分别设置为2,4,6。并行测试结果如表1,表2,从表中可知,在这两种网格划分下,并行优化方案提升率最高能在4进程下达到40%。

表1网格数分别为(200,200,40)的波导并行测试

表2网格数分别为(200,200,25)的波导并行测试

11页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种太赫兹倍频器的快速设计方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类