CN110275732B - 在ARMv8处理器上质点网格法的并行实现方法 - Google Patents
在ARMv8处理器上质点网格法的并行实现方法 Download PDFInfo
- Publication number
- CN110275732B CN110275732B CN201910482225.8A CN201910482225A CN110275732B CN 110275732 B CN110275732 B CN 110275732B CN 201910482225 A CN201910482225 A CN 201910482225A CN 110275732 B CN110275732 B CN 110275732B
- Authority
- CN
- China
- Prior art keywords
- particle
- data
- data information
- space
- particles
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 178
- 239000002245 particle Substances 0.000 title claims abstract description 106
- 238000004364 calculation method Methods 0.000 claims abstract description 33
- 238000007667 floating Methods 0.000 claims abstract description 10
- 238000004891 communication Methods 0.000 claims description 21
- 230000006870 function Effects 0.000 claims description 19
- 238000004422 calculation algorithm Methods 0.000 claims description 14
- 238000005315 distribution function Methods 0.000 claims description 4
- 230000002093 peripheral effect Effects 0.000 claims description 3
- 238000012217 deletion Methods 0.000 claims description 2
- 230000037430 deletion Effects 0.000 claims description 2
- 238000003780 insertion Methods 0.000 claims description 2
- 230000037431 insertion Effects 0.000 claims description 2
- 239000003550 marker Substances 0.000 claims description 2
- 229910052754 neon Inorganic materials 0.000 claims description 2
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 claims description 2
- 238000005457 optimization Methods 0.000 abstract description 11
- 230000005540 biological transmission Effects 0.000 abstract description 9
- 230000005672 electromagnetic field Effects 0.000 description 8
- 238000002474 experimental method Methods 0.000 description 7
- 230000001133 acceleration Effects 0.000 description 6
- 238000004088 simulation Methods 0.000 description 6
- 238000013461 design Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000001788 irregular Effects 0.000 description 3
- 238000000638 solvent extraction Methods 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 230000003044 adaptive effect Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000002054 transplantation Methods 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/004—Artificial life, i.e. computing arrangements simulating life
- G06N3/006—Artificial life, i.e. computing arrangements simulating life based on simulated virtual individual or collective life forms, e.g. social simulations or particle swarm optimisation [PSO]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Biophysics (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Biomedical Technology (AREA)
- Artificial Intelligence (AREA)
- Mathematical Physics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
一种在支持ARMv8指令集的处理器上质点网格法的并行实现方法,在完成进程空间与线程空间划分后,加载网格单元内粒子并初始化,完成计算更新粒子及场强数据信息后再将结果数据以文件形式输出,当计算时出现负载不均衡则进行动态负载均衡操作。本发明基于消息传递接口(MPI)与OpenMP并行实现框架,通过线程绑定规避进程内socket间传输数据,使用单指令多数据向量化,降低浮点数精度,采用动态负载均衡等优化方法,基于硬件平台的体系架构,充分利用计算资源,提高质点网格法的计算性能。
Description
技术领域
本发明涉及的是一种等离子体数值模拟领域的技术,具体是一种质点网格法(PIC)在支持ARMv8指令集的处理器上的并行实现方法。
背景技术
质点网格法(particle-in-cell,下文简称PIC)是一种经典的模拟通过成对的电磁力相互作用带电粒子运动的数值模拟方法,它结合粒子和电磁场,在每个时间步中,场和粒子之间双向交互,根据粒子属性信息计算得出电磁力场强大小,再根据粒子所在位置的场强大小更新粒子的属性信息。纯粹的粒子方法虽然在局部性和计算强度方面都是有优势的,但是O(N2)的复杂度并不适用于每个进程使用数百万粒子的等离子体模拟。
目前,PIC算法的并行实现是基于x86架构处理器或者GPU加速器的,但是x86架构CPU同构并行与GPU的异构并行计算时的功耗日益增长,而ARM架构多核CPU处理器在移动端具有功耗更低的特点。支持ARMv8指令集的处理器核数和内存通道更多,具有计算时功耗更低的潜力,故移植优化应用后有望得到更优的性能功耗比。由于潜在的细粒度数据冲突、不规则的数据访存、较低的计算强度和算法特性导致的负载不均衡,实现高并行性和高架构效率是并行PIC算法面临的一个重大挑战。
发明内容
本发明针对现有ARMv8处理器上没有高性能的PIC算法的问题,提出了一种在ARMv8处理器上实现并行PIC算法的方法,该方法首先利用消息传递接口(Message-PassingInterface,下文简称MPI)结合OpenMP并行框架,进行同构并行移植。通过线程绑定规避进程内跨socket和跨NUMA节点传输数据的高延迟,使用单指令多数据向量化,降低浮点数精度,采用动态负载均衡等优化方法。最终,基于ARM微架构的特征,充分发挥计算能力,提高PIC代码的性能。
本发明是通过以下技术方案实现的:
本发明在完成进程空间与线程空间划分后,加载网格单元内粒子并初始化,完成计算更新粒子及场强数据信息后再将结果数据以文件形式输出,当计算时出现负载不均衡则进行动态负载均衡操作。
所述的进程空间与线程空间划分是指:将PIC代码的域(Domain)分割成网格(Mesh),每个Mesh网格在一个MPI进程下计算执行;求解的计算空间划分至各MPI进程后,每个Mesh网格在热点计算部分使用OpenMP实现共享内存的多线程并行,依次划分计算部分至各OpenMP线程,每个线程均由多个单元(Cell)组成,每个单元包含多个粒子。
PIC代码按照此步骤划分成两级代码设计结构。每个Mesh网格可划分为数十万个Cell单元,同属一个Mesh网格的Cell单元将同属一个进程。当某Cell单元与周边的Cell单元共享内存空间(处于同一进程内),就可直接访存使用邻近Cell单元中的场强数据进行模板计算,更新所求Cell单元粒子及场强数据。当某Cell单元处于进程边界处的重影单元(ghost layer,处于不同进程之间),则需要来自其相邻进程的Cell单元的场强数据来更新该Cell单元的粒子及场强数据;这些Cell单元需要通过进程间的消息传递进行MPI通信同步进程间数据信息,其中一进程将粒子及场强数据信息发送至缓冲区,待同步该进程边界处Cell单元数据信息的另一相邻MPI进程接收缓冲区信息,进而接收进程能根据传递来的粒子及场强数据信息更新属于接收进程内边界处所求Cell单元的粒子及场强。
所述的进程空间与线程空间划分,优选采用三维均匀划分的方法:对于每一个MPI进程,将其计算空间沿x,y轴分割成xi*yi等分(xi,yi由输入文件读入),再将分割后的每个空间在计算热点部分沿y轴方向均匀分割成多个OpenMP线程。在同一进程内的线程共享该进程空间的粒子及场强数据信息,位于进程边界处的Cell单元需要和相邻进程通过MPI通信的方式传输粒子及场强数据信息即各进程同步更新重影单元位置的数据信息。
所述的单元内粒子初始化阶段是指:每个Cell单元在初始化阶段,根据输入文件生成原始粒子数据信息及单元场强数据信息,每个Cell单元中的标记粒子表示以位置、速度、重量为特征的小体积相空间。初始加载采用相空间中均匀加载并分配与分布函数值成比例的不同权重或按照分布函数加载并分配相同的权重的方式。
所述的粒子及场强数据信息更新是指:Cell单元中的粒子根据周边Cell单元的场强信息更新迭代粒子数据信息及单元场强数据信息,优选地,每个Cell单元中的粒子的数据结构为链表,即使粒子的插入删除操作的时间复杂度为O(1),但是当该部分的计算核心需要更新每个粒子的数据信息时,只能从头到尾进行遍历并更新,直到将该细胞单元中所有粒子数据信息更新完毕。
所述的粒子及场强数据信息更新,优选以循环展开的方式处理,通过打破循环内的数据顺序相关性以提高指令级别的并行性,对于循环展开后的代码,利用向量化的方法做细粒度并行。由于链表的数据结构导致不规则访存现象,采用数据预取的方式提高数据局部性且减少访存延迟。由于编译器在混合精度计算时自动向上兼容且降低精度后能减少内存和寄存器的开销,故将双精度浮点操作数改为单精度浮点操作数。优选调用ARM编译器的高性能数学库函数实现sqrt()求平方根操作以及rand()求随机数操作,链接时增加编译选项-larmpl_lp64_mp,-lgfortran,-lamath和-lm。
所述的向量化操作,即一条指令同时完成多数据操作,由向量寄存器存储多个粒子的同一类数据信息,进而可同时执行相同指令操作,具体为:通过ARMv8架构下的NEONintrinsic函数对该部分的操作进行单指令多数据的向量化操作。
所述的数据预取操作,优选将即将进行下一次访存操作的粒子信息提前预取到L1cache中,实现为软件数据预取,即采用内联prfm汇编指令实现。
所述的负载不均衡是指:各进程间的待计算的数据负载不均衡。尽管初始化阶段已将粒子均匀分配到了各个进程中,但是PIC算法很难提供和保持适当的负载平衡。只要整个模拟过程中的等离子体密度保持大致一致,分配给每个子域的粒子数将大致恒定,模拟将很好地执行。然而,在许多情况下,初始密度分布可能不均匀。即使最初是这样,随着模拟的进行,也不会保持这种状态。随之而来的负载不均衡会导致进程间阻塞,其他进程需等待负载最大的进程计算完毕才能进行同步操作,从而造成性能下降。在最坏的情况下,某些Mesh网格所处进程可能会积累更多的粒子,甚至可能使该进程的可用内存不足,导致整个代码崩溃。
所述的动态负载均衡是指:以行(列)划分通信域,当该行(列)进程数据负载量超出当前通信域的平均数据负载量则向通信域中相邻行(列)进程发送一定量的数据信息,减少该进程下一次迭代时需执行计算的数据,反之则接收其他相邻行(列)进程发送的数据信息。以此方法降低进程间的数据负载量不均衡程度,减少了进程间同步等待的时间。
由于PIC代码的算法特性,随着时间步增长粒子分布不均衡,进而导致计算时数据负载不均衡。针对该问题,根据运行时间估算出当前一段时间步中每个进程所有的粒子数量及单元数量(由于每个单元中的粒子数据结构为链表,因此准确地计算出粒子的数量只能遍历链表进行计数,将会增加额外开销),且在实践中发现根据时间估算负载量是有效的。将MPI进程根据行(列)划分通信域后,适应性地调节各进程间的数据分布,以负载不均衡因子的阈值作为判断条件,当负载不均衡因子小于阈值则基于每个进程与通信域内平均进程负载量的差值大小进行通信域间的数据传输操作,保证进程充分利用其被分配到的硬件资源,避免等待最多负载量进程的计算完成才能进行通信及下一步计算。
所述的以文件形式输出是指:当粒子及场强数据信息更新完成后,使用HDF5文件进行结果输出;优选为每间隔一定时间步将进行一次写文件操作。
所述的文件形式是指:原始版本的文件写入只能在规定时间步由主进程等待其他进程计算完毕后再写入HDF5文件,进行并行I/O优化后,每进程维护各自文件中的当前偏移量,使用支持MPI的并行HDF5接口完成写操作,即采用H5Pset_fapl_mpio函数设置文件可被并行I/O的属性,创建该新文件后,使用H5Pset_dxpl_mpio函数设置带有集合MPI-IO的数据传输属性列表,之后即可将数据元素写入数据集。
技术效果
与现有技术相比,本发明基于ARMv8处理器,提出两级并行的域分解框架,使用进程线程绑定的方法减少进程内跨socket访存,降低浮点操作数精度减少内存和寄存器开销,使用单指令多数据向量化,并行I/O和调用ARM编译器的高性能数学库函数优化方法,解决ARMv8多核处理器没有实现并行PIC算法的问题。
本发明设计适应性的动态负载均衡方法,基于当前各进程负载量情况通过计算空间行与列之间的待计算数据信息传输,均衡行与列之间的数据负载量,有效地改善了各进程间负载不均衡,减少各进程间同步数据等待时间。
本发明的实现结果通过应用VLPL-S中的3个输入算例进行测试,相比原始版本无优化方法的并行实现,获得了平均1.41x的加速比,并有较好的强可扩展性,强可扩展性实验最高可获得7.39x加速比。
附图说明
图1为本发明并行PIC算法计算过程基本流程图;
图2为对计算空间进行进程线程分割的示意图;
图3为负载均衡的算法实现图;
图4为在ARMv8处理器上,本发明的方法与不采用负载均衡方法的实现的性能对比图;
图5为在ARMv8处理器上,本发明采用的不同优化方法的性能效果图;
图6为在ARMv8处理器上,本发明的强可扩展性实验测试结果。
具体实施方式
如图1所示,本实施例涉及一种基于支持ARMv8指令集的多核处理器的质点网格法的并行实现方法,实验所用处理器各项软硬件参数如表1所示:
表1:双路服务器中的处理器参数
本实施例涉及的PIC算法为循环进行以下步骤1~步骤4,直至达到预设的时间步:
1)场强计算部分:更新网格中存储的电磁场强度;
2)场插值和力计算部分:计算带电粒子在电磁场中所受的洛伦兹力;
3)粒子推动部分:根据粒子动力学方程计算粒子位置并在网格中移动粒子;
4)统计各个网格中由粒子运动所产生的电流,更新的电流数据信息会作为已知数据再更新电磁场强度;
当计算的时间步达到输入所规定的时间步之后,将网格上的电磁场强度、电流及粒子密度等数据以文件形式输出至数据集中。
本实施例采用的PIC应用为三维PIC代码VLPL-S,并行算法的正确性采用与串行算法对比的方式保证。
本实施例采用如图2所示的MPI+OpenMP多个进程内多线程并行的计算域分割的方式充分利用硬件计算核心资源,其中计算域分割是指:根据输入算例设置的分割数沿x轴与y轴方向,均匀划分三维空间,每个进程分割后维护各自在x轴与y轴上的偏移量。在进程内,根据环境变量OMP_NUM_THREADS的值将y轴均匀分割,在临界区制导语句处的私有变量为每个OpenMP线程计算空间独有的数据信息,每个OpenMP线程并行执行临界区的计算操作,该数据信息包括:线程号pid,该线程于其所属进程计算空间内在x轴与y轴上的偏移量xstart,xend,ystart与yend。
如图3所示,分割后的重影单元需在三维计算空间相邻进程间同步粒子数据及单元场强数据。Xm表示进程左侧的重影单元,Xp表示进程右侧的重影单元,Ym表示进程下侧的重影单元,Yp表示进程上侧的重影单元。当该进程当前计算空间为边界重影单元Xm处空间,则该进程左侧空间的Xm重影单元将与左侧相邻进程的右侧空间的Xp重影单元通过MPI_Send函数与MPI_Recv函数通信进而更新重影单元的粒子数据及单元场强数据信息,其包括:粒子所受洛伦兹力,粒子权重,单元内电流,单元内电磁场场强以及单元内粒子密度。
在各进程计算空间中,根据每个进程保存的相对于全局空间的偏移量,在该进程空间Mesh中再均匀分割出多个Cell单元,并对每个Cell单元中的电磁场强度和粒子信息进行初始化。粒子在每个Cell单元中根据输入文件生成粒子数据信息,每个Cell单元中的粒子数据信息由一条单向链表存储。
步骤1、2、3中的主要操作皆为模板计算,这些部分为程序的热点函数,具体为:基于模板计算更新电磁场场强后,根据每个Cell单元的右侧、下侧及右侧单元下侧的单元场强数据信息计算Cell单元中每个粒子所受洛伦兹力,根据粒子动力学方程计算粒子位置并在网格中移动粒子,更新该Cell单元中粒子信息;然后使用更新后的粒子信息计算出该Cell单元中更新后的电流数据。
每个Cell单元中的粒子是由链表数据结构组成,虽然链表能使粒子以O(1)的时间复杂度插入或删除,但是这些粒子信息在内存中不是连续存储,因此存在不规则访存现象。在x86上一般使用预取的intrinsic函数__mm_prefetch将下一个迭代周期所需要的粒子信息(通常为链表中指向的下一个粒子)预取到cache中,在ARMv8架构下,可使用内联汇编prfm指令,选项为pldl1keep,表示将数据预取到L1cache中并保持,减少下一次迭代所需访存延迟。对于单指令多数据向量化,因为该处理器的向量寄存器位宽为128bit,故可在循环展开后将需执行相同计算操作的4个32bit的单精度浮点操作数存储于向量寄存器,进而可同时处理4个操作数。对于计算过程中出现的混合精度的计算,由于编译器会自动向上扩展精度,所以在保证结果正确的前提下将双精度浮点数强制转换成单精度浮点数,减少内存及寄存器开销。
每次循环计算后,每个进程边界处的重影单元需要进行同步操作,更新重影单元处的粒子数据及单元场强数据,以得到进程边界处单元进行模板计算时所需的相邻单元的数据信息。当时间步迭代次数增加,粒子可以在不同进程的网格间移动,即使初始状态各进程是均匀划分,之后仍可能导致各个进程出现负载不均衡,则计算量较少的进程会出现阻塞,需等待最大负载量进程计算结束再进行MPI通信的同步操作,对于计算过程中出现的负载不均衡现象,使用负载函数来衡量各进程间的负载量,并通过负载均衡操作进行优化。
所述的负载函数L=Nparticle+C·Ncell,其中:L为进程负载量,Nparticle为粒子数量,Ncell为网格内单元数量,C为调节参数。由于单元中粒子的数据结构为链表,采用遍历链表计数将带来大量的额外计算,故选择使用粒子推动部分的计算时间估算粒子数量,使用场强更新时间估算单元的数量。
所述的负载不均衡,采用负载不均衡因子判断当前时间步计算时各进程间负载不均衡的程度,设定阈值以决策是否需要进行动态负载均衡操作。
所述的负载不均衡因子其中:p为进程数,Li为进程号为i的进程负载量,负载不均衡因子为所有进程的负载量之和除以进程数与所有进程中最大负载量之积得到。当负载不均衡因子越小则说明进程间负载越不均衡,所以设定适当阈值,当小于该值则进行动态负载均衡操作,实验时调节该阈值为0.90。所有进程的负载量之和调用在全局通信域中选项为MPI_SUM的MPI_Allreduce函数求得,所有进程中最大负载量调用在全局通信域中选项为MPI_MAX的MPI_Allreduce函数求得。
如图3所示,所述的动态负载均衡操作是指:首先用MPI_Comm_split函数按照相同纵坐标划分出行通信域,相同横坐标划分出列通信域,使用在行通信域及列通信域中选项为MPI_SUM的MPI_Allreduce求出每行及每列的每时间步的平均负载量,当进行对某行某进程的行平均负载量和下侧行相邻进程的行平均负载量比较大小时,使用该进程下侧行相邻进程的Yp所在重影单元发送其所在行平均负载量,该进程Ym所在重影单元接收上述相邻行的平均负载量,实现为先将所需传输行平均负载量存入缓冲区,调用全局通信域中MPI_Bsend函数传输至下侧行相邻进程的Yp所在重影单元,再由该进程的Ym所在重影单元调用全局通信域中MPI_Recv函数接收缓冲区的行平均负载量数据信息表示为L_Ym,该进程本身所在行的平均负载量表示为L_Row。再根据L_Row与L_Ym之差决策采用何种操作,当L_Row>L_Ym则传输C’(L_Row-L_Ym)的粒子数据信息和场强信息至邻近行所在进程并删除待传输的Cell单元中的链表上所有粒子,其中C’为调节参数,实现为修改重影单元偏移量,使得重影单元整体向该行平移一定长度,在上述情况下该长度为C”(L_Row-L_Ym)/L_Row*Y,其中C”为调节参数,Y为该进程网格在y轴的计算长度。故本进程待处理的粒子数和细胞单元数将减少。反之则接收相邻行传输到重影单元的粒子数据和场强数据信息,并根据缓冲区传输来的粒子数据信息插入对应Cell单元的链表上。其他方向的动态负载均衡操作类似。
优选地,为了避免进程内双路处理器的socket间数据传输以及NUMA节点间数据传输使得性能下降,在运行程序时可使用OpenMPI中的rankfile(或者MPICH中的hostfile)规定每个进程需要绑定的计算核心号,例如每个NUMA节点16个计算核心,当需要四个进程运行应用,环境变量OMP_NUM_THREADS设为16,第一个进程绑定0-15号计算核心运行,第二个进程绑定16-31号计算核心运行之后进程绑定线程关系以此类推。
如图4所示,其他优化方法一致仅区别于是否采用动态负载均衡方法的VLPL-S应用中的性能对比图所示,动态负载均衡方法能带来最高10%的性能提升,且对计算时间步长更长的算例作用更加明显。
如图5所示,使用VLPL-S应用中的三个算例进行测试后本实施例中所使用的各优化方法带来的性能提升。从图5中显示的结果数据中,可以看出通过使用并行I/O的方法,该应用获得了最高1.18x的加速提升。通过使用软件预取指令,本实施例又获得了最高12%的性能提升。通过调用ARM编译器的高性能数学库,带来了最高19%的性能提升。
如图6所示,为在VLPL-S应用上的强可扩展性实验测试结果,即在本实施例中算例2在ARMv8多核处理器平台上的强可扩展性实验测试结果,通过该图可看出通过本发明提出的方法优化过的VLPL-S应用的加速比呈近似线性增长,表示其可扩展性较强,最高可获得7.39x加速比。
本方法在ARMv8多核处理器平台上,该实施例使用MPI与OpenMP进行两级的任务划分,并设计适应性的动态负载均衡算法以调整进程间数据负载避免进程阻塞等待,使用并行I/O优化写入文件操作,并使用软件数据预取,降低浮点数精度和调用高性能数学库函数等优化方法提高计算性能。该方法使用软件预取方法及进程内线程绑定的方法减少了数据访存延迟,提高数据局部性,以并行I/O的方法提高了数据的读写性能,实现动态负载均衡方法减少进程间阻塞等待时间。
通过在真实的输入数据集上测试,本实施例相比原始无优化方法的应用性能,可以获得平均1.41x的加速比,并有较好的强可扩展性,强可扩展性实验最高可获得7.39x加速比。
上述具体实施可由本领域技术人员在不背离本实施例原理和宗旨的前提下以不同的方式对其进行局部调整,本实施例的保护范围以权利要求书为准且不由上述具体实施所限,在其范围内的各个实现方案均受本实施例之约束。
Claims (7)
1.一种在ARMv8处理器上实现并行PIC算法的方法,其特征在于,在完成进程空间与线程空间划分后,加载网格单元内粒子并初始化,完成计算更新粒子及场强数据信息后再将结果数据以文件形式输出,当计算时出现负载不均衡则进行动态负载均衡操作;
所述的进程空间与线程空间划分是指:将PIC代码的域分割成网格,每个Mesh网格在一个MPI进程下计算执行;求解的计算空间划分至各MPI进程后,每个Mesh网格在热点计算部分使用OpenMP实现共享内存的多线程并行,依次划分计算部分至各OpenMP线程,每个线程均由多个单元组成,每个单元包含多个粒子;
所述的更新粒子及场强数据信息是指:Cell单元中的粒子根据周边Cell单元的场强信息更新迭代粒子数据信息及单元场强数据信息,每个Cell单元中的粒子的数据结构为链表,即使粒子的插入删除操作的时间复杂度为O(1),但是当该部分的计算核心需要更新每个粒子的数据信息时,只能从头到尾进行遍历并更新,直到将该细胞单元中所有粒子数据信息更新完毕;
所述的动态负载均衡是指:以行和/或列划分通信域,当该行和/或列进程数据负载量超出当前通信域的平均数据负载量则向通信域中相邻行和/或列进程发送一定量的数据信息,减少该进程下一次迭代时需执行计算的数据,反之则接收其他相邻行和/或列进程发送的数据信息。
2.根据权利要求1所述的方法,其特征是,所述的进程空间与线程空间划分,采用三维均匀划分的方法:对于每一个MPI进程,将其计算空间沿x,y轴分割成xi*yi等分,xi,yi由输入文件读入,再将分割后的每个空间在计算热点部分沿y轴方向均匀分割成多个OpenMP线程;在同一进程内的线程共享该进程空间的粒子及场强数据信息,位于进程边界处的Cell单元需要和相邻进程通过MPI通信的方式传输粒子及场强数据信息即各进程同步更新重影单元位置的数据信息。
3.根据权利要求1所述的方法,其特征是,所述的初始化是指:每个Cell单元在初始化阶段,根据输入文件生成原始粒子数据信息及单元场强数据信息,每个Cell单元中的标记粒子表示以位置、速度、重量为特征的小体积相空间;初始加载采用相空间中均匀加载并分配与分布函数值成比例的不同权重或按照分布函数加载并分配相同的权重的方式。
4.根据权利要求1所述的方法,其特征是,所述的更新粒子及场强数据信息,以循环展开的方式处理,通过打破循环内的数据顺序相关性以提高指令级别的并行性,对于循环展开后的代码,利用向量化的方法做细粒度并行,采用数据预取的方式提高数据局部性且减少访存延迟的同时将双精度浮点操作数改为单精度浮点操作数,调用ARM编译器的高性能数学库函数实现sqrt()求平方根操作以及rand()求随机数操作,链接时增加编译选项-larmpl_lp64_mp,-lgfortran,-lamath和-lm。
5.根据权利要求4所述的方法,其特征是,所述的向量化的方法,即一条指令同时完成多数据操作,由向量寄存器存储多个粒子的同一类数据信息,进而可同时执行相同指令操作,具体为:通过ARMv8架构下的NEON intrinsic函数对该部分的操作进行单指令多数据的向量化操作。
6.根据权利要求4所述的方法,其特征是,所述的数据预取的方式,将即将进行下一次访存操作的粒子信息提前预取到L1 cache中,实现为软件数据预取,即采用内联prfm汇编指令实现。
7.根据权利要求1所述的方法,其特征是,所述的以文件形式输出是指:当粒子及场强数据信息更新完成后,使用HDF5文件每间隔一定时间步将进行一次写文件操作,将结果输出。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2019104492741 | 2019-05-28 | ||
CN201910449274 | 2019-05-28 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110275732A CN110275732A (zh) | 2019-09-24 |
CN110275732B true CN110275732B (zh) | 2023-02-21 |
Family
ID=67961965
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910482225.8A Active CN110275732B (zh) | 2019-05-28 | 2019-06-04 | 在ARMv8处理器上质点网格法的并行实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110275732B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110929456B (zh) * | 2019-11-13 | 2021-07-06 | 西安交通大学 | 移动粒子法并行计算等效粒子负载均衡加速方法 |
CN111858243B (zh) * | 2020-07-15 | 2024-03-19 | 上海交通大学 | 基于指数增长的多硬件事件监控计数值估计方法 |
CN114995754B (zh) * | 2022-05-26 | 2022-12-16 | 中国科学院高能物理研究所 | 一种面向科学大数据hdf5单个文件的高性能读写方法 |
CN115718622B (zh) * | 2022-11-25 | 2023-10-13 | 苏州睿芯通量科技有限公司 | 一种arm架构下的数据处理方法、装置及电子设备 |
CN117573375B (zh) * | 2024-01-15 | 2024-04-02 | 上海交通大学四川研究院 | 一种面向自适应解耦方程的动态负载平衡并行计算方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101727512A (zh) * | 2008-10-17 | 2010-06-09 | 中国科学院过程工程研究所 | 一种基于变分多尺度方法的通用算法及并行计算系统 |
CN102053945A (zh) * | 2009-11-09 | 2011-05-11 | 中国科学院过程工程研究所 | 一种面向多尺度离散模拟的并行计算系统 |
CN103324780A (zh) * | 2012-12-20 | 2013-09-25 | 中国科学院近代物理研究所 | 颗粒流动仿真系统和方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101415616B1 (ko) * | 2010-11-18 | 2014-07-09 | 한국전자통신연구원 | 파티클 기반 시뮬레이션을 위한 병렬 컴퓨팅 방법 및 그 장치 |
-
2019
- 2019-06-04 CN CN201910482225.8A patent/CN110275732B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101727512A (zh) * | 2008-10-17 | 2010-06-09 | 中国科学院过程工程研究所 | 一种基于变分多尺度方法的通用算法及并行计算系统 |
CN102053945A (zh) * | 2009-11-09 | 2011-05-11 | 中国科学院过程工程研究所 | 一种面向多尺度离散模拟的并行计算系统 |
CN103324780A (zh) * | 2012-12-20 | 2013-09-25 | 中国科学院近代物理研究所 | 颗粒流动仿真系统和方法 |
Non-Patent Citations (4)
Title |
---|
A NVIDIA Kepler based acceleration of PIC method;Wen Min-hua et al.;《Computer Engineering and Science》;20131130;第35卷(第11期);全文 * |
基于GPU集群的PIC方法并行加速研究;于展鹏;《《中国优秀博硕士学位论文全文数据库(硕士) 信息科技辑》》;20150615;全文 * |
基于OpenMP的三维显式物质点法并行化研究;黄鹏等;《计算力学学报》;20100228;第27卷(第1期);全文 * |
激光等离子体相互作用模拟的并行和加速研究;武海鹏等;《计算机科学与探索》;20170217;第12卷(第4期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110275732A (zh) | 2019-09-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110275732B (zh) | 在ARMv8处理器上质点网格法的并行实现方法 | |
Hoshino et al. | CUDA vs OpenACC: Performance case studies with kernel benchmarks and a memory-bound CFD application | |
US7937567B1 (en) | Methods for scalably exploiting parallelism in a parallel processing system | |
Harish et al. | Large graph algorithms for massively multithreaded architectures | |
US8438370B1 (en) | Processing of loops with internal data dependencies using a parallel processor | |
CN111858066B (zh) | 气体动理论统一算法中的cpu+gpu异构并行优化方法 | |
Krotkiewski et al. | Efficient 3D stencil computations using CUDA | |
Katagiri et al. | Auto-tuning on NUMA and many-core environments with an FDM code | |
Demeshko et al. | Multi-GPU implementation of the NICAM atmospheric model | |
Wyrzykowski et al. | Parallelization of 2D MPDATA EULAG algorithm on hybrid architectures with GPU accelerators | |
Huang et al. | Implementing Strassen's algorithm with CUTLASS on NVIDIA Volta GPUs | |
Huo et al. | Porting irregular reductions on heterogeneous CPU-GPU configurations | |
Falch et al. | Register caching for stencil computations on GPUs | |
Clarke et al. | Fupermod: A framework for optimal data partitioning for parallel scientific applications on dedicated heterogeneous hpc platforms | |
US20160350088A1 (en) | Fusing a sequence of operations through subdividing | |
Li et al. | Multi-role sptrsv on sunway many-core architecture | |
Germaschewski et al. | The Plasma Simulation Code: A modern particle-in-cell code with load-balancing and GPU support | |
Lefebvre et al. | Optimizing 2D and 3D structured Euler CFD solvers on graphical processing units | |
Vasiljevic et al. | OpenCL library of stream memory components targeting FPGAs | |
Tang et al. | Optimizing and auto-tuning iterative stencil loops for GPUs with the in-plane method | |
Cai et al. | Openacc vs the native programming on sunway taihulight: A case study with gtc-p | |
Mangiardi et al. | A hybrid algorithm for parallel molecular dynamics simulations | |
US11609785B2 (en) | Matrix data broadcast architecture | |
Pearce | Exploring utilization options of heterogeneous architectures for multi-physics simulations | |
Baraglia et al. | A parallel code for time independent quantum reactive scattering on cpu-gpu platforms |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |