王一超 林新华, 蔡林金 Tang William Ethier Stephane 王 蓓 施忠伟,4 松岗聪
1(上海交通大学高性能计算中心 上海 200240) 2(东京工业大学 日本东京 1528550) 3(普林斯顿大学等离子体物理实验室 美国新泽西州普林斯顿 08540) 4 (英伟达公司 新加坡 138522) (wangyichao@sjtu.edu.cn)
国家超级计算无锡中心的神威“太湖之光”超级计算机在2016年6月发布的世界Top500超算榜单中排名第一,其理论峰值性能达到125.4PFLOPS,Linpack实测效率74.15%,约为93PFLOPS[1].值得一提的是,“太湖之光”搭载的处理器芯片是完全由中国自主研发的神威异构众核处理器SW26010.该芯片的架构面向高性能计算,通过统一指令系统、统一执行模型和支持一致性的主存共享,实现异构核心的深度融合[2].
在软件层面,“太湖之光”的操作系统和编译环境等也全部由中国自主研发.该系统实现的并行编程模型神威OpenACC,兼容OpenACC 2.0标准,还添加了部分定制功能.基于指导语句的并行编程模型可以帮助用户在应用移植过程中,避免硬件架构不同带来的差异,提供高可移植性.本文将研究在神威众核处理器上利用OpenACC对于实际应用进行移植及优化.
由美国普林斯顿大学开发的高性能计算应用GTC-P(the Princeton gyrokinetic toroidal code)利用 PIC(particle-in-cell)算法求解Vlasov-Poisson方程,模拟粒子在托卡马克装置内的运动,具有重要的物理意义.又由于其极佳的可扩展性,GTC-P已在Top500排名前10的6台超级计算机上进行了性能测试[3],并入选了美国NERSC国家超算中心的基准测试集[4],是最具代表意义的PIC应用.
综上所述,本文使用OpenACC在“太湖之光”超级计算机上成功移植了GTC-P应用.针对神威OpenACC编译器尚无法解决的性能瓶颈,本文提出了3种基于中间代码二次开发的优化方法.实验证明优化方法有效,同时我们还对神威OpenACC结合MPI的多节点版本进行了强可扩展性的评估.
简而言之,本文有以下2点贡献:
1) 首次在“太湖之光”上利用OpenACC成功并行移植了基于PIC算法的实际应用GTC-P.
2) 提出了3种基于中间代码的手动优化方法:①消除原子操作;②避免低效的全局访存操作;③手动添加SIMD intrinsics指令.实验证明优化方法对于PIC算法在“太湖之光”上的性能提升效果显著.
本文的相关工作主要有3类:
1) “太湖之光”上的应用移植.清华大学付昊桓等人[5]利用OpenACC在“太湖之光”上成功移植了大气模型CAM应用.实验结果显示,利用OpenACC移植后的应用,相比1个主核,在64个从核上整体实现了2倍的加速比.但该文尚未提出在“太湖之光”上针对OpenACC移植后的性能优化方法.
2) GTC-P的移植与调优.普林斯顿大学Wang等人[6]对GTC-P应用在Mira,Sequoia,Hopper等超级计算机上的移植与调优做了介绍,并评估了可扩展性.在异构系统上的移植方面,美国劳伦斯伯克利国家实验室Ibrahim等人[7]介绍了利用CUDA在基于GPU的Titan超级计算机上移植GTC-P的方法.但这些工作都是在基于CPU,GPU,MIC加速卡构建的超算系统上完成的,与神威众核的架构存在差异.
3) 利用OpenACC移植应用. Calore等人[8]和Hariri等人[9]分别利用OpenACC对基于Lattice Boltzmann和particle-in-cell算法的科学应用进行了并行移植,并介绍了常用的优化手段,移植平台为GPU和CPU.东京工业大学Hoshino等人[10]对于利用OpenACC在GPU上进行并行移植存在的性能瓶颈问题做了深入的研究,并指出缺乏对于GPU shared memory的控制是导致性能不佳的原因.但本文中所提及的神威OpenACC实现上与OpenACC标准存在差异.
本文的研究背景介绍将从神威众核处理器架构、神威OpenACC以及GTC-P应用展开.
神威众核处理器旨在用少量具备指令级并行能力的管理核心,集成众多面向计算开发的精简运算核心高效处理线程级并行,从而大幅提高芯片性能[2].
“太湖之光”超级计算机上所使用的神威SW26010芯片架构如图1所示,1块芯片由4个核组组成,每个核组内64个从核按照8×8的mesh拓扑结构,由片上内部网络互联.
Fig. 1 The architecture of Sunway many-core processor图1 神威众核处理器架构图
此外,主从核均支持256b向量化指令,以及乘加融合(fused multiply add, FMA)指令.每个从核支持一条浮点数DP(double precision)流水线,主核支持双浮点数流水线.由此可得,主从核双精度理论峰值性能的计算为
1×1.45×8×2=23.2GFLOPS;
64×1.45×4×2=742.4GFLOPS.
不难发现,SW26010上逾98%的理论性能均源自于从核,所以应用必须在从核上得到并行化移植才能充分发挥“太湖之光”超级计算机的性能.
存储架构方面,主核拥有2级缓存:第1级缓存指令数据分离,即指令和数据各自拥有32 KB缓存;第2级则为指令数据共享的256 KB缓存.而每个从核拥有16 KB的一级指令缓存.从核数据存储的设计是一种类CELL处理器的用户控制的草稿本方式存储,即SPM(scratch pad memory),每个从核的SPM容量为64 KB.这种存储方式不仅省去了缓存实现上的控制开销,还避免了众多运算核心间一致性处理带来的设计复杂性和性能降级[2].但也为应用开发中从核的数据管理带来了新挑战,即需要人为对于应用在SPM上的访存进行设计与规划.
SW26010片上集成了4个内存控制器,每个核组拥有8 GB内存.但在具体实现上,内存管理器仍是基于DDR3的,芯片的实测访存带宽为136.51 GBps.
基于上述设计,相比NVIDIA GPU K20X或者Intel Xeon Phi 7110P在Stream (Triad)测试中实测180 GBps左右的访存带宽,SW26010的带宽差了近25%.由此,在SW26010上移植应用,性能更容易受限于访存带宽.充分利用SPM局存访问,缓解主存访问压力,就成了应用移植和优化的关键之一.
神威OpenACC是“太湖之光”上基于定制OpenACC 2.0标准实现的并行编程模型,面向从核的并行化移植.其指导语句的设计与OpenACC 2.0标准存在一定区别,具体情况如表1所示:
Table 1 Sunway OpenACC vs OpenACC 2.0 Standard表1 神威OpenACC与OpenACC 2.0标准的对比
这样的设计主要出于3方面的考虑:
1) 由于神威架构与GPU和MIC等主流异构加速器存在区别,导致如tile,cache等语句在实现上与标准OpenACC的实现产生了差异.
3) 自主研发的神威OpenACC编译器,与PGI,Cray等成熟的商业编译器相比,还存在不完善之处.尤其在数据管理方面,需要指导语句给予编译器更多的提示,这反映在了定制的annotate语句中.
此外,神威OpenACC编译器是基于ROSE开源框架开发的代码转译器,主要负责中间代码生成.其后端仍使用的是“太湖之光”的本地编译器.该编译器向用户开放中间代码,允许用户基于编译生成的中间代码进行二次开发.第4节的性能优化中,本文就会用到该功能.
GTC-P是由美国普林斯顿大学等离子体物理实验室开发的应用于磁约束聚变领域中全局性大规模并行模拟的高性能计算程序.该应用在近10年来一直都是研究托卡马克装置内等离子体湍流运动等重要非线性物理问题的主要工具.
粒子在1束激光中的运动可以通过六维的Vlasov-Maxwell方程来模拟[11].而对于托卡马克这种带有零阶稳态平衡导向场的等离子体系统,回旋动理学的简化降维又是非常有效的.在这种情况下,磁场中的带电粒子的回旋运动将近似于一个带电环.而PIC算法则是现如今最为普及的求解该系统方程的数值计算方法.
基于回旋动理学的PIC方法的每个时间步主要分为5个计算步骤,对应到代码中的主要函数.1)charge.使用4点陀螺平均法求解粒子到网格上的电荷沉积.2)poisson.在网格上求解回旋动理学的Poisson方程.3)field.计算网格上的电场.4)push.用矢量场和其他衍生物助推粒子.5)smooth.使电荷密度和潜在矢量平滑.其中,charge和push的计算强度均小于2.结合SW26010的峰值性能和访存带宽可知,计算强度低于20的应用在神威平台上的性能就会受限于访存性能,因此这2个函数的访存实现将会成为移植过程中的主要难点.
在使用神威OpenACC进行从核并行化移植之前,本文首先将GTC-P在x86平台上实现的串行代码移植到SW26010的1个主核上.并记录了各部分函数的执行时间,分析了程序热点,结果如图2所示.
Fig. 2 Profiling the hotspots of GTC-P code图2 GTC-P代码热点分析
可见,主核上的热点测试结果与2.3节的分析相印证,即访存密集型的函数charge和push是程序的主要热点.本文将对于GTC-P应用中的这2个函数进行从核并行化移植与优化,移植工作分为3个步骤:数据管理、循环并行化、原子操作.
如2.1节中提到的,在神威众核架构中,存在着访存带宽性能有限的潜在瓶颈.所以从应用性能角度出发,将计算涉及的数据提前拷贝至访问延迟低的SPM局存中,是从核并行化移植的关键步骤.OpenACC 2.0标准中的data指导语句提供了如copy,present,cache等多种数据管理模式,在神威OpenACC中为提升DMA带宽添加了swap,pack等定制语句.本文采用了将所有在计算中涉及的数据优先传输至SPM的实现策略,具体实现方法为:
1) 按循环索引划分传输.若数组的索引变量与循环的索引变量紧耦合时,神威OpenACC编译器会自行将数组划分为64份,然后利用DMA的方式分别将64份数据传输至各从核的SPM中.具体使用如图3所示,其中 annotate(dimension(array(size))) 指导语句是为了指明数组长度,方便编译器划分数据.
2) 完整传输.当访问的数组与循环索引无关联时,由于SW26010缺少共享的局部存储,编译器将无法判断如何划分数据,从而默认不会把该数组传输至SPM中.在此情况下,可以通过annotate(entire(array))指导语句提示编译器将数组的完整副本分别传输至64个从核的SPM上.
4) 使用缓存.OpenACC 2.0中的cache指导语句在SW26010上实际对应的是SPM.又因为SPM没有实现硬件层的缓存管理机制,所以神威OpenACC的cache指导语句背后是一个软件实现缓存机制.
① #pragmaaccparallelloop② copyin(z0,z1,z2,z4,z5)annotate(dimension(z0(mi),z1(mi),z2(mi),z4(mi),z5(mi)))③ copyin(delt,mtheta,igrid,qtinv)annotate(dimension(delt(90+1),mtheta(90+1),igrid(90+1),qtinv(90+1)),entire(delt,mtheta,igrid,qtinv))④ copyout(wpion,wtion0,wtion1,jtion0,jtion1)annotate(dimension(wpion(4*mi),wtion0(4*mi),wtion1(4*mi),jtion0(4*mi),jtion1(4*mi)))⑤ cache(pgyro,tgyro)⑥ for(m=0;m Fig. 3 charge function implementation based on 4 data management strategies of tile 基于以上4种数据管理方法的函数charge实现如图3所示.其中,copyin语句中的z0,z1,z2等数组编译后会基于循环索引m均等划分,分别传输至64个从核的SPM中.而delt,mtheta,igrid,qtiny这4个数组则将被完整地传输至64个从核的SPM中,等同于在每个从核的SPM中保存了一份这4个数组的副本,方便从核随时进行访问.copyout指导语句中的数组传输方法与z0等相同,按照循环索引进行划分.值得一提的是cache指导语句中的pgyro和tgyro,这2个数组的访存是不规则的,无法根据循环索引进行均等划分;并且由于数组所占的空间大于500 KB,远大于SPM的64 KB空间,所以也无法完整传输. 在循环并行化方面,神威OpenACC与OpenACC 2.0标准保持一致,使用parallel和loop语句使代码在64个从核上并行执行. 需要注意的是,gang,worker,vector是OpenACC 2.0标准中的3层循环设计,由于神威众核架构在物理上并没有分层需求,所以神威OpenACC的实现是默认把gang设置为64,worker设为1,而vector也没有对SIMD功能做支持. 为保证数据竞争情况下的结果正确性,神威OpenACC与OpenACC 2.0一样,都支持了原子操作.atomic指导语句可以保证数据在同一时间只会被某一个进程读写.在GTC-P的函数charge中,数组densityi_part由于不规则访问会产生数据竞争.为保证结果的正确性,需要添加atomic指导语句. 针对charge中的原子操作,本文利用“太湖之光”上提供的性能分析工具[12]测得执行一次原子操作的开销约为750个周期.同时,由于数据竞争问题的存在,导致原子操作的数组无法通过copy指导语句传输至64个从核的SPM中,使得计算部分必须进行主存访问,增加了额外的访存开销. Table 2 Performance Comparison of Implementation on 表2为利用本节所提方法移植GTC-P后,主核与从核版本之间的执行时间对比,从核版本比主核版本慢了将近92倍.造成性能瓶颈的原因有以下2点: 1) 神威众核处理器上的原子操作由锁机制实现,实际的运行开销大. 2) 从核之间缺乏共享局部存储,为配合原子操作,无法将数据预存入各从核的SPM中. 以上原因与神威众核的硬件架构相关,目前仅依靠神威OpenACC指导语句是无法解决该性能瓶颈的. 针对3.3节提出的性能瓶颈原因,本文提出不依赖于神威OpenACC编译器直接编译得到的可执行程序,而是基于中间代码的二次开发来优化性能. 为了解决多从核之间的数据读写竞争问题,同时又避免原子操作,我们先对函数charge中相关的代码段进行分析,如图4所示: ① #pragmaaccatomic② densityi_part[ij1]+=d1;③ #pragmaaccatomic④ densityi_part[ij1+1]+=d2;⑤ #pragmaaccatomic⑥ densityi_part[ij1+mzeta+1]+=d3; Fig. 4 charge function atomic operation code 这部分的数组操作为累加,在从核并行时并不涉及共享同步机制,因此本文采用的优化策略是在每个从核的SPM中保存一个数组副本,在代码段执行完之后对数组副本进行1次统一的归约求和计算. 由于需要分别对64个从核SPM中的数组副本进行维护,这部分优化需要利用神威OpenACC编译器在中间代码中提供的acc_myid接口才能实现.通过用线程号维护densityi_part[acc_myid][]来实现数组副本的管理,代码转换如图5所示: ① densityi_part[acc_myid][ij1]=d1;② densityi_part[acc_myid][ij1+1]=d2;③ densityi_part[acc_myid][ij1+mzeta]=d3;④ densityi_part[acc_myid][ij1+mzeta+1]=d4; Fig. 5 Array copies maintained by thread id on CPEs 因为数组densityi_part大于500 KB无法完整存放到SPM中,为了在不规则访问的情况下尽可能避免主存访问,本文在该代码段前添加copyin语句,并结合变量索引进行DMA数据传输,即在每次对于数组副本densityi_part进行累加前,先将涉及到的数据传输到SPM中.优化后的性能如表3所示: Table 3 Results after Eliminating Atomic Operations表3 消除原子操作的优化效果 s 在消除了原子操作和主存访问带来的额外开销之后,函数charge实现了约180倍的加速,性能接近于主核版本,但仍慢了将近13,需要进一步优化. 如2.1节所述,在神威众核架构下,64个从核同时发起DMA访问时,访存带宽可以达到30 GBps.然而神威OpenACC中的copycopyincopyout指导语句默认却是按照单次循环涉及的数组元素进行传输的,若不进行优化,则无法提高DMA传输带宽. 指导语句tile是OpenACC 2.0标准中的语句,在CPU和GPU上的实现是为了通过循环合并达到更好的数据局部性.神威OpenACC实现的tile指导语句则是通过设定循环合并的层数来控制每次DMA传输的数据块大小,从而达到提升传输带宽的目的.根据“pragma acc data copy(z0) tile(250)”的指导语句编译出的中间代码示例如图6所示.其中acc_sync_pe_m2l_nostride_copy为实际的DMA数据传输接口,而acc_cp_4_size则为传输数据的尺寸参数,则此次传输的数据块为250×8 B,即一次DMA传输约为2 KB的数据. ① for(acc_blockindex_m0_1=acc_myid*250;acc_blockindex_m0_1<=_ldm_mi-1;acc_blockindex_m0_1+=250*acc_corenum)② {acc_loop_ub_tmp_var0=_ldm_mi-1-acc_blockindex_m0_1;③ acc_loop_ub_m=min(249,acc_loop_ub_tmp_var0);④ acc_cp_4_size=(acc_loop_ub_m+1)*8;⑤ _swacc_ret=acc_sync_pe_m2l_nostride_copy(_ldm_z0,&z0[acc_blockindex_m0_1],acc_cp_4_size). ︙} Fig. 6 Intermediate code generated by tile directive 根据上述原理,本文针对charge和push中的tile尺寸设定做了测试实验,结果如图7所示.伴随tile尺寸增大、执行时间变小,性能得到优化,但受限于实际可用的SPM大约为58 KB,在这2个函数中可用的tile尺寸最大分别为251和336. 与消除原子操作的版本相比,在提升DMA传输带宽后,函数charge和push分别实现了2.7及4倍的加速比. Fig. 7 Test for tile size in Sunway OpenACC图7 神威OpenACC的tile尺寸测试 “太湖之光”上提供的性能分析工具中的penv2_slave_gld_count接口可以收集中间代码里的gldgst指令数目,帮助用户发现冗余指令.该工具提供了一系列的函数调用接口,可以帮助用户收集硬件相关的统计数据,包括总指令数、loadstore指令数、TLB miss数等[12],使用代码如下所示: penv2_slave_gld_init(); ⋮ ⋮ penv2_slave_gld_count(&ic1); ⋮ penv2_slave_gld_count(&ic2). 在函数push中发现的冗余gldgst指令,主要分2种情况: 1) 直接访问保存在主存上的指针.对于这类情况的优化方法是:在SPM上重新声明一个局存指针,然后在代码段初始部分将指针地址赋值给局存指针,使其后的指针操作都是直接访SPM,而非通过gld指令的全局离散访主存. 2) “太湖之光”编译环境中默认链接的数学库需要进行离散访主存操作,而函数push需要使用sin,cos,exp这3个数学库计算.本文调用了加载在SPM上的优化从核数学库[13].该数学库完全在SPM上实现,所以不会产生gldgst指令,但会占用更多的SPM空间,需要提前规划好SPM的使用.最新版本中双精度的函数cos和sin 各需要4 KB空间,而函数exp 占用9 KB空间. 在对函数push进行消除低效的访存操作后,对比上一步的优化结果,进一步取得了6.7倍的加速比. 正如2.1节中的理论峰值性能公式所示,256b的SIMD向量化(相当于4个双精度数)操作对于性能起了重要作用.若所有计算都仅使用64b的双精度标量计算,实际上即是损失了75%的计算性能.神威OpenACC中尚未提供针对SIMD的支持,且自动SIMD向量化一直以来是编译器的实现难点.所以本文采用在中间代码中手动添加SIMD intrinsics指令的方法,不依赖编译器,手动向量化计算部分的代码. 本文针对函数charge中的部分计算进行了向量化优化,实现示例如图8所示: ①for(_ldm_i=0;_ldm_i<=acc_loop_ub_i;_ldm_i+=1){② vtmp=simd_set_doublev4(0,0,0,0);③ for(_ldm_j=0;_ldm_j<=63;_ldm_j+=4){④simd_load(vd,&ldm_swap_mydensityi_local0[_ldm_i][_ldm_j]);⑤ vtmp=simd_vaddd(vd,vtmp);⑥ _ldm_denloc_sum+=_ldm_swap_mydensityi_local0[_ldm_i][_ldm_j];⑦}⑧simd_store(vtmp,&tmp[0]);⑨_ldm_densityi[_ldm_i]=tmp[0]+tmp[1]+tmp[2]+tmp[3];⑩} Fig. 8 SIMD optimization code in charge function 通过在中间代码中添加SIMD intrinsics指令、对比执行周期数,该部分代码实现了5.6倍的加速比,结果证明该优化方法效果明显.但由于该代码段在全局中所占的时间尚不足1%,所以对于整体的GTC-P性能并未产生影响. 本节在“太湖之光”上针对第4节提出的优化方法进行了实验验证.其中,手动添加SIMD intrinsics指令的方法对整体性能影响不大,所以未加入本实验. 本文将运行在1个主核上的串行版本GTC-P作为测试基准,分别与消除原子操作、提升DMA传输带宽、消除冗余gldgst指令这3个优化方法在单核组的从核上进行了性能对比,结果如图9所示.该测试的问题规模为A,即回环中有3 235 896个粒子. Fig. 9 Performance comparison of GTC-P step by step图9 GTC-P性能对比 除了4.1节中提及的消除原子操作优化效果显著外,本节的实验结果还验证了2点: 1) 通过tile指导语句优化DMA传输效率,对于神威众核上访存密集型的应用,是有效且必要的.该优化对比消除原子操作的版本,在函数charge和push上分别实现了2.7及4倍的加速比,并使得GTC-P在从核上的整体性能要高于主核上的. 在单核组实验中,函数charge和push在从核上的最终版本对比主核版本分别实现了约1.6倍和8.6倍的加速比,对于整个GTC-P应用而言,实现了2.5倍的加速比. 本文在利用OpenACC实现的单核组版本基础上,结合MPI[6]在“太湖之光”上测试了OpenACC+MPI版本,分析了强可扩展性.问题规模较之前的性能对比,使用的输入规模为B(1 235 644 416个粒子),步长仍为100.其中,图10(a)为输入规模A的结果,图10(b)为规模B的结果. 图10中的横轴代表MPI的线程数,1个MPI线程控制1块SW26010芯片上的1个核组,即4个MPI线程控制整块芯片(即单节点).实验的线程数从4一直扩展到了128,即从1个节点扩展到了32个节点. 伴随并行计算节点数的上升,函数push的强可扩展性表现要优于函数charge的,执行时间基本呈理想的线性递减趋势.而GTC-P应用的整体强可扩展性则未与理想的线性趋势相吻合.主要原因是由于GTC-P的整体执行时间由函数charge主导(占80%左右),而charge函数则受限于不规则访存导致的性能瓶颈,尚需进一步优化. 本文利用OpenACC在“太湖之光”上并行移植了GTC-P应用.在实现了完全基于指导语句的移植版本后,我们发现神威OpenACC编译器尚无法解决由于原子操作开销大以及离散访存操作代价高所导致的性能瓶颈.本文提出,不依赖于编译器,而是基于中间代码进行二次开发,通过消除原子操作和冗余gldgst指令、在中间代码里手动添加SIMD intrinsics指令的优化方法,提升应用性能.实验结果证明所提出的优化方法有效. 此外,本文还通过与OpenACC 2.0标准进行对比,提出了利用OpenACC移植应用到“太湖之光”上需要注意的地方,总结为以下3点: 1) 在data指导语句使用过程中,需要注意数组索引与循环索引的关联性,尽可能使数组可以按索引划分并传输至从核的SPM中.若无法划分且所占空间小于64 KB,则建议可利用annotate(entire(array))指导语句将数组完整传输至SPM. 3) tile指导语句对于应用在“太湖之光”上的优化效果显著,GTC-P应用中部分函数通过该指导语句优化实现了3~4倍的加速比. 我们下一步将探索适应神威众核架构,尤其是针对64 KB SPM局存设计的新算法,并利用底层编程方法对GTC-P进行深度优化. 致谢感谢国家并行计算机工程技术研究中心的刘鑫、尤洪涛、何香老师在本研究中提供的大力支持! [1]Dongarra J. Report on the Sunway TaihuLight system[EBOL]. [2016-06-24]. http:www.netlib.orgutkpeopleJackDongarraPAPERSsunway-report-2016.pdf [2]Zheng Fang, Zhang Kun, Wu Guiming, et al. Architecture techniques of many-core processor for energy-efficient in high performance computing[J]. Chinese Journal of Computers, 2014, 37(10): 2176-2186 (in Chinese)(郑方, 张昆, 邬贵明, 等. 面向高性能计算的众核处理器结构级高能效技术[J]. 计算机学报,2014,37(10): 2176-2186) [3]Tang William, Wang Bei, Ethier S. Scientific discovery in fusion plasma turbulence simulations at extreme scale[J]. Computing in Science & Engineering, 2014, 16(5): 44-52 [4]Ethier S, Chang Choon-Seock, Ku Seung-Hoe, et al. NERSC’s impact on advances of global gyrokinetic PIC codes for fusion energy research[J]. Computing in Science & Engineering, 2015, 17(3): 10-21 [5]Fu Haohuan, Liao Junfeng, Yang Jinzhe, et al. The Sunway TaihuLight supercomputer: System and applications[J]. Science China Information Sciences, 2016, 59(7): 072001 [6]Wang Bei, Ethier S, Tang William, et al. Kinetic turbulence simulations at extreme scale on leadership-class systems[C]Proc of the Int Conf on High Performance Computing, Networking, Storage and Analysis. New York: ACM, 2013: 82:1-82:12 [7]Ibrahim K, Madduri K, Williams S, et al. Analysis and optimization of gyrokinetic toroidal simulations on homogenous and heterogenous platforms[J]. International Journal of High Performance Computing Applications, 2013, 27(4): 454-473 [8]Calore E, Kraus J, Schifano S, et al. Accelerating lattice boltzmann applications with OpenACC[C]Proc of the European Conf on Parallel Processing. Berlin: Springer, 2015: 613-624 [9]Hariri F, Tran T, Jocksch A, et al. A portable platform for accelerated PIC codes and its application to GPUs using OpenACC[J]. Computer Physics Communications, 2016, 207: 69-82 [10]Hoshino T, Maruyama N, Matsuoka S, et al. CUDA vs OpenACC: Performance case studies with kernel benchmarks and a memory-bound CFD application[C]Proc of the 13th Int Symp on Cluster, Cloud, and Grid Computing. Piscataway, NJ: IEEE, 2013: 136-143 [11]Madduri K, Ibrahim K, Williams S, et al. Gyrokinetic toroidal simulations on leading multi-and manycore HPC systems[C]Proc of Int Conf for High Performance Computing, Networking, Storage and Analysis. New York: ACM, 2011: 23:1-23:12 [12]He Xiang, Zhou Mingzhong, Liu Xin. Design and implementation of multi-level heterogeneous parallel algorithm of 3D acoustic wave equation forwarded[J]. Computer Applications and Software, 2014, 31(1): 264-267 (in Chinese)(何香, 周明忠, 刘鑫. 三维声波方程正演多级异构并行算法设计与实现[J]. 计算机应用与软件,2014,31(1): 264-267) [13]Xu Jinchen, Guo Shaozhong, Huang Yongzhong, et al. Access optimization technique for mathematical library of slave processors on heterogeneous many-core architectures[J]. Computer Science, 2014, 41(6): 12-17 (in Chinese)(许瑾晨, 郭绍忠, 黄永忠, 等. 面向异构众核从核的数学函数库访存优化方法[J]. 计算机科学, 2014, 41(6): 12-17)WangYichao, born in 1990. Master. Member of CCF. His main research interests include high performance computing and GPU computing. LinXinhua, born in 1979. PhD. Member of CCF. His main research interests include computer architecture and high performance computing. CaiLinjin, born in 1994. Master candidate. His main research interests include high performance computing (caijinjin4@sjtu.edu.cn). TangWilliam, born in 1944. Professor, APS fellow. His main research interests include plasma physics and scientific computing (tang@pppl.gov). EthierStephane, born in 1966. PhD. His main research interests include computa-tional physics and plasma physics (ethier@pppl.gov). WangBei, born in 1980. PhD. Her main research interests include plasma physics and high performance computing (beiwang@princeton.edu). SeeSimon, born in 1965. PhD. Member of CCF. His main research interests include high performance computing and GPU architecture (ssee@nvidia.com). SatoshiMatsuoka, born in 1963. Professor and ACM fellow. His main research interests include high performance computing and computer architecture.
图3 tile基于4种数据管理策略的函数charge实现3.2 循环并行化
3.3 原子操作
4 性能优化
4.1 消除原子操作
图4 函数charge原子操作代码段
图5 数组根据从核进程号维护副本4.2 提升DMA传输带宽
图6 tile指导语句生成的中间代码4.3 避免低效的访存操作
4.4 手动添加SIMD intrinsics
图8 函数charge向量化优化代码5 实验验证
5.1 性能对比分析
5.2 强可扩展性分析
6 总 结