浏览次数:5673 发布时间:2019-07-04-10:07:30
本次比赛的题目改编自photoNs-2.0,它是国家天文台开发的一款宇宙N体数值模拟的软件,用于解决空间大尺度结构的形成演化,进而帮助研究包括宇宙物质分布、星系形成以及暗物质和暗能量等最本质问题的本质,在神威超算平台上的移植和应用具有重要的意义。
在一个模拟的粒子动力学系统中,每个粒子在物理力(如引力)的影响下与所有其他粒子相互作用。对于每个粒子,需要进行O(N)个操作,计算总复杂度为O(N² ),其中N为系统中粒子总数。我们称之为N体问题。
本软件使用的算法为PM和FMM相结合的方式。我们采用PM算法用于远程引力计算,FMM算法用于短程引力计算。
粒子网格算法PM(Particle Meshmethod)的主要思想是在盒子上创建网格,每个网格单元有一个网格点,求解网格点处的势,然后通过计算势的梯度得到每个网格单元处的力。
在快速多极子方法FMM中,我们将粒子组织成K-D 树,树的叶子是一个粒子包。树的每个节点存储2个多极矩M和L,将粒子间的力转化为多极矩之间的相互作用。其中计算引力的运算符有6个:P2M、M2M、M2L、L2L、L2P和P2P。其中M2L和P2P是计算的热点部分。
PM+FMM算法示意图
photoNs2-cpc目录下共提供5个文件夹及1个文件,decomp_fft, inc,obj, run,src及Makefile。其中decomp_fft内包含fft库及头文件,inc内包含编译所需头文件,obj内包含编译后目标文件,run内包含输入文件及运行脚本,src内包含源码文件,源码文件及各文件功能如下:
photoNs.c:主函数
domains.c:进程调度
snapshot.c:格式输入与输出
initial.c:参数读入与初始化
utility.c:申请空间等辅助函数
conv.f90:调用2dcomp库接口
partmesh.c:网格划分
toptree.c:顶层树建立
operator.c:算符任务划分以及部分算符计算函数
fmm.c:单进程k-d树建立任务划分与算符计算
kernels.c:P2P算符计算函数
remotes_task.c:与其他进程进行引力的计算
源码:/home/export/online1/cpc/photoNs2-cpc.tar.gz
参赛队拷贝到自己目录后解压缩:tar -xvzf photoNs2-cpc.tar.gz
目前采用Makefile编译,参赛者在photoNs2-cpc目录下运行make即可编译。编译完成后在photoNs2-cpc/run目录下生成可执行文件photoNs-lcdm
目前提供3个运行脚本:photoNs2-cpc/run/sub512.sh,photoNs2-cpc/run/sub64.sh及photoNs2-cpc/run/sub8.sh。其中sub512.sh采用512进程运行模拟,输入文件为lcdm512.run;sub64.sh采用64进程模拟,输入文件为lcdm64.run,sub8.sh采用8进程进行模拟,输入文件为lcdm8.run。提交示例如下:
./sub8.sh 或sh sub8.sh。
目前运行脚本中采用后台提交书写,参赛者可自行调整。
1. 输入文件lcdm512.run,lcdm64.run,lcdm8.run内相关参数不可修改。
2. 在photoNs.c中,除driver函数以外,其他代码段不可以更改。赛题成绩的运行时间为total_time的计时,计时位置不可更改。
3. 数据输出的部分不可更改。
4. 结果验证过程:结果验证程序将另行发布。
参赛者在原始代码基础上,可针对程序段实现:主核优化,众核加速,通信优化等,在规定迭代步数及运行规模性,着重提高代码并行计算效率和发挥申威CPU计算潜力,参赛者若修改源码中已明确不能修改部分或做其他不合理的改动将导致成绩无效。
为每支参赛队提供q_sw_cpc_1或q_sw_cpc_2的国产队列,配置256个节点供比赛期间测试。
评分细则:目前有三个算例,粒子规模及分值如下: