目录

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。

调优与移植修改点(均已在代码中):

优化点 位置 内容
编译选项 Makefile:65 -openmp 改为 -qopenmp(Intel 2020 弃用旧写法)
循环 kernels/field_summary_kernel_c.c:69 OpenMP 规范违反:迭代变量 j/jv/kv 误入 reduction,移入 private
循环 kernels/ 两处 #pragma omps imd 拼写错误修正为 #pragma omp simd
通信/映射 submit.sh MPI×OMP 映射、OMP_PROC_BIND=spread 绑核、mpirun 启动

核心结论:最优映射为 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×。

内容结构

路径 说明
Makefile 上游构建脚本,支持 COMPILER=INTEL/GNU/CRAY 等多编译器
*.f90(根目录) 主程序与各阶段 driver(clover.f90、hydro.f90、update_halo.f90 等)
kernels/ 计算核(Fortran 与 C 双实现)及 ftocmacros.h
InputDecks/ 各规模测试输入档(clover_bm2.in ~ clover_bm8192.in、sod 系列等)
out/ 41 个 bm2_*.out 基准输出(5 种映射 × 1~8 节点,文本日志,约 29 MB)
clover.out / clover.in / compile.log 默认配置运行输出、当前输入档、编译日志
submit.sh SLURM 作业提交脚本(#SBATCH 资源、绑核、mpirun 启动)
_build_charts.py / _build_report.py / _fix_fonts.py 实验分析脚本(加速比图表与报告生成,matplotlib + python-docx)
README_upstream.md 上游 CloverLeaf 1.3 参考版原始 README

运行方法

编译(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 重新生成)。

来源声明

  • CloverLeaf 1.3 参考版(CloverLeaf_ref)为英国 AWE 发布的开源 GPL-3.0 mini-app, 系课程提供的框架代码,原始说明见 README_upstream.md;
  • 本仓库自研部分:4 处移植/规范修改(见上表)、submit.sh 作业脚本、 40 组基准测试(out/ 目录全部输出)与三个 Python 分析脚本;
  • 实验报告 docx 与图表 png 不入库;上游 CloverLeaf 参考库与 LULESH 相关目录不在本仓库范围。
关于

并行计算大作业:CloverLeaf(Fortran+MPI/OpenMP)CFD 程序的优化与 20+ 组基准测试

8.0 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号