初始提交:CloverLeaf CFD 调优(并行计算,大三下)
并行计算课程(大三下)大作业:在 SLURM 集群上对 CloverLeaf(Fortran + C 混编,MPI + OpenMP 混合并行)CFD mini-app 做映射策略调优与 40 组基准测试。
实验环境为 c1ln2 集群:CentOS 7 + SLURM(normal4 队列),计算节点 Intel Xeon E5-2680 v4, 28 物理核/节点、2 个 NUMA 节点(每 NUMA 14 核),Intel Parallel Studio XE 2020u4 工具链。
实验目标:探索 CloverLeaf_ref 的强扩展性(1~8 节点),确定 bandwidth-bound CFD 代码在 28 核节点上的最优「进程数 × 线程数」映射。受三约束驱动(进程数须为 4 的幂、 进程×线程 ≤ 28、NUMA 边界为 14 核),设计 5 种映射:16p1t、1p16t、1p28t、4p4t、4p7t, 组成 4 组单变量对照实验。基准输入 InputDecks/clover_bm2.in(1920×960,固定 2955 步), 计时取日志末尾 Wall clock,基准 T0 = 1n1p1t = 907.59 s。
调优与移植修改点(均已在代码中):
-openmp
-qopenmp
#pragma omps imd
#pragma omp simd
核心结论:最优映射为 4p7t(4 MPI 进程 × 7 OMP 线程,每进程 7 核恰好落在单 NUMA 内), 8 节点加速比 129.10×;纯 MPI 16p1t 次优(102.49×);纯 OpenMP 1p28t 因跨 NUMA 访存 仅 7.49×,1p16t 88.47×;4p4t 因 MPI + OMP 双重开销叠加仅 8.06×。
编译(Linux,需 MPI Fortran/C 编译器;Intel 工具链为例):
module load intel/2020u4 # 或自行保证 mpiifort/mpiicc 在 PATH make COMPILER=INTEL MPI_COMPILER=mpiifort C_MPI_COMPILER=mpiicc
运行(单机):
cp -f InputDecks/clover_bm2.in clover.in export OMP_NUM_THREADS=7 mpirun -np 4 ./clover_leaf
集群上用 sbatch submit.sh 提交(按需修改节点数/进程数/线程数/输出名)。 分析脚本依赖 Python 3 + matplotlib + python-docx(python _build_charts.py)。 仓库不含二进制构建产物(*.o、*.mod、clover_leaf 可由 make 重新生成)。
sbatch submit.sh
python _build_charts.py
*.o
*.mod
clover_leaf
并行计算大作业:CloverLeaf(Fortran+MPI/OpenMP)CFD 程序的优化与 20+ 组基准测试
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
CloverLeaf CFD 调优
任务背景
实验环境为 c1ln2 集群:CentOS 7 + SLURM(normal4 队列),计算节点 Intel Xeon E5-2680 v4, 28 物理核/节点、2 个 NUMA 节点(每 NUMA 14 核),Intel Parallel Studio XE 2020u4 工具链。
实验目标:探索 CloverLeaf_ref 的强扩展性(1~8 节点),确定 bandwidth-bound CFD 代码在 28 核节点上的最优「进程数 × 线程数」映射。受三约束驱动(进程数须为 4 的幂、 进程×线程 ≤ 28、NUMA 边界为 14 核),设计 5 种映射:16p1t、1p16t、1p28t、4p4t、4p7t, 组成 4 组单变量对照实验。基准输入 InputDecks/clover_bm2.in(1920×960,固定 2955 步), 计时取日志末尾 Wall clock,基准 T0 = 1n1p1t = 907.59 s。
调优与移植修改点(均已在代码中):
-openmp改为-qopenmp(Intel 2020 弃用旧写法)#pragma omps imd拼写错误修正为#pragma omp simd核心结论:最优映射为 4p7t(4 MPI 进程 × 7 OMP 线程,每进程 7 核恰好落在单 NUMA 内), 8 节点加速比 129.10×;纯 MPI 16p1t 次优(102.49×);纯 OpenMP 1p28t 因跨 NUMA 访存 仅 7.49×,1p16t 88.47×;4p4t 因 MPI + OMP 双重开销叠加仅 8.06×。
内容结构
运行方法
编译(Linux,需 MPI Fortran/C 编译器;Intel 工具链为例):
运行(单机):
集群上用
sbatch submit.sh提交(按需修改节点数/进程数/线程数/输出名)。 分析脚本依赖 Python 3 + matplotlib + python-docx(python _build_charts.py)。 仓库不含二进制构建产物(*.o、*.mod、clover_leaf可由 make 重新生成)。来源声明