目录

MPI/OpenMP 小程序作业集

并行计算课程(大三下)的小程序作业归档:教材 16+4 道 MPI/OpenMP 习题、MPI_Hello 编写调试、梯形积分、MPI_Reduce 归约求和与 NUMA 访存特性测试。

任务背景

课程为《并行计算系统》(2025 至 2026 学年第二学期),作业围绕 MPI 分布式内存编程与 OpenMP 共享内存编程展开,以下要求提炼自各次实验报告:

  • book16+4:通读教材《并行程序设计导论(第二版)》,完成第 3 章 16 个 MPI 程序(合并后 13 个源文件)与第 5 章 4 个 OpenMP 程序,在 Linux/WSL 下逐个编译运行,并整理成作业指南。
  • mpi_hello(第 10 次作业):编写课本程序 3.1,练习 mpicc 编译(-g 选项)、mpirun -np 运行,以及 GDB 单进程调试与 sleep+attach 多进程调试(了解 ptrace_scope 限制及对策)。
  • trapezoidal(第 11 次作业):MPI 梯形积分法计算 f(x)=x² 的定积分,实现 MPI_Send/Recv 与 MPI_Bcast 两个版本,32 进程下各运行 10 次,对比点对点分发与集合通信的性能。
  • reduce(第 12 次作业):基于 MPI_Reduce 的并行数组归约求和,验证 Reduce 结果等于串行和乘以进程数,并在不同数组长度与进程数下对比串行/并行耗时与加速比,认识加速比小于 1 的通信开销场景。
  • numa_lag(第 8 次作业):在双路 Xeon Gold 6226R 服务器上,用指针追逐法测量各缓存层级下本地/远程 NUMA 节点的访存延迟,用 STREAM Triad 测带宽,用 MPI Ping-Pong 评估跨 Socket UPI 互连性能;MPI 进程经 hwloc-bind 绑定到指定 NUMA 节点,内存经 mmap+mbind 按节点绑定。

内容结构

路径 说明
book16+4/ 教材第 3/5 章 17 个源程序(.c),串行与并行对照;小程序作业指南.md(1.5k 行)为每个程序整理的描述、完整代码与编译运行命令
mpi_hello/ MPI_Hello.c:程序 3.1,入口加 sleep(10) 以支持 attach 调试
trapezoidal/ trap_send_recv.c、trap_bcast.c 两版梯形积分;输入输出.txt 为运行记录与两种通信方式对比结论
reduce/ mpi_reduce.c 归约求和;运行与结果.txt 为不同数组长度/进程数下的实测记录
numa_lag/ Makefile 与 src/ 四个测试程序(NUMA 拓扑、访存延迟、带宽、Ping-Pong);scripts/ 为环境检查与一键运行脚本;results/ 为实机完整测试报告;generate_report.py、add_outline.py 为实验报告 docx 生成脚本
generate_docs.js Node.js 脚本,用 docx 包批量生成《MPI/OpenMP 编程实验要求》作业文档

运行方法

依赖:Linux/WSL、GCC、MPICH 或其他 MPI 实现(mpicc/mpiexec)、OpenMP(gcc -fopenmp);numa_lag 另需 hwloc;generate_docs.js 需 Node.js 与 docx 包。

# book16+4:MPI 程序
mpicc -g -Wall -std=c99 -o 3.1_mpi_hello book16+4/3.1_mpi_hello.c && mpiexec -n 4 ./3.1_mpi_hello
# book16+4:OpenMP 程序
gcc -g -Wall -fopenmp -o 5.1_omp_hello book16+4/5.1_omp_hello.c && ./5.1_omp_hello
# mpi_hello(可先 gdb ./MPI_Hello 单进程调试)
mpicc -g -o MPI_Hello mpi_hello/MPI_Hello.c && mpirun -np 32 ./MPI_Hello
# trapezoidal(运行后输入 a b n,如实测 0 100000 10000000000)
mpicc -o trap_bcast trapezoidal/trap_bcast.c && mpirun -np 32 ./trap_bcast
# reduce
mpicc -o mpi_reduce reduce/mpi_reduce.c && mpirun -np 4 ./mpi_reduce
# numa_lag
cd numa_lag && make && bash scripts/check_env.sh && bash scripts/run_all.sh
# 生成作业文档(输出路径为脚本内绝对路径,可自行修改)
npm i docx && node generate_docs.js

说明:numa_lag 与 trapezoidal 的报告生成脚本依赖未入库的 docx 解包目录(unpacked_template 等),仅作过程参考,不能独立运行。

来源声明

  • book16+4 的 20 个程序源自课程教材 Pacheco《并行程序设计导论(第二版)》第 3、5 章示例,由本人录入、编译并整理;教材源码打包 src.zip 与 ELF 编译产物未入库。
  • 《小程序作业指南.md》、generate_docs.js、numa_lag 的测试与报告生成脚本、trapezoidal 的 gen_report.py 均为自写。
  • results/ 及各 txt 运行记录产生自课程服务器(Ubuntu 22.04,双路 Xeon Gold 6226R,MPICH 4.0)的实机测试。
  • 实验报告 docx、报告模板与截图含个人信息,按入库原则未收录;仓库内无超过 20MB 的文件。
关于

并行计算课程 MPI/OpenMP 小程序作业:16+4 道习题、MPI_Hello、梯形积分、Reduce、NUMA 延迟测试

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

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