hpc-lab-code/work/实验报告模板.md
2026-01-21 18:02:30 +08:00

9.3 KiB
Raw Blame History

MPI-OpenMP混合并行矩阵乘法实验报告

姓名__________
学号__________
日期__________

1. 实验目的

  1. 掌握MPI、OpenMP程序设计的基本编写、编译与运行方法
  2. 了解集群环境下矩阵乘法的并行程序设计方法
  3. 掌握利用(强/弱)加速比、运行时间、效率等测度分析并行程序性能

2. 实验环境

2.1 硬件环境

  • CPU型号__________
  • 核心数__________
  • 内存大小__________

2.2 软件环境

  • 操作系统__________
  • MPI版本__________
  • 编译器版本__________
  • OpenMP版本__________

3. 实验原理

3.1 矩阵乘法串行算法

矩阵乘法C = A × B其中A为m×n矩阵B为n×k矩阵C为m×k矩阵。

串行算法复杂度O(m×n×k)

3.2 并行算法设计

3.2.1 MPI并行策略

  • 采用主从Master-Slave模型
  • 使用带状分块方式分配矩阵
  • Rank 0负责数据分发和结果收集

3.2.2 OpenMP并行策略

  • 在每个MPI进程内部使用OpenMP并行化本地矩阵乘法
  • 使用#pragma omp parallel for并行化外层循环
  • 支持collapse子句增加并行度

3.2.3 混合并行策略

  • MPI用于节点间并行
  • OpenMP用于节点内并行
  • 通过调整MPI进程数和OpenMP线程数优化性能

4. 实验步骤与结果

4.1 编译与测试

编译命令

./build.sh

快速测试结果

测试项 配置 运行时间(ms) 验证结果
串行版本 512×512×512 ______ PASSED
MPI并行(1进程) 512×512×512 ______ PASSED
MPI并行(4进程) 512×512×512 ______ PASSED
混合并行(2×2) 512×512×512 ______ PASSED
优化版本(4进程) 512×512×512 ______ PASSED

4.2 实验一MPI进程数扩展性

实验条件OpenMP线程数固定为1

4.2.1 运行时间数据

矩阵尺寸 1进程 2进程 4进程 9进程 16进程
512×512×512 ______ ______ ______ ______ ______
1024×1024×1024 ______ ______ ______ ______ ______
2048×2048×2048 ______ ______ ______ ______ ______
4096×4096×4096 ______ ______ ______ ______ ______

4.2.2 加速比数据

矩阵尺寸 1进程 2进程 4进程 9进程 16进程
512×512×512 1.00 ______ ______ ______ ______
1024×1024×1024 1.00 ______ ______ ______ ______
2048×2048×2048 1.00 ______ ______ ______ ______
4096×4096×4096 1.00 ______ ______ ______ ______

4.2.3 效率数据

矩阵尺寸 1进程 2进程 4进程 9进程 16进程
512×512×512 100% ______ ______ ______ ______
1024×1024×1024 100% ______ ______ ______ ______
2048×2048×2048 100% ______ ______ ______ ______
4096×4096×4096 100% ______ ______ ______ ______

4.2.4 性能曲线图

(在此处插入 exp1_mpi_scaling.png

4.2.5 结果分析

  1. 加速比分析

    • 随着MPI进程数增加加速比______上升/下降)
    • 在______进程时达到最大加速比
    • 大规模矩阵的加速比______优于/差于)小规模矩阵
  2. 效率分析

    • 并行效率随进程数增加而______上升/下降)
    • 效率下降的主要原因是______
    • ______矩阵尺寸的效率最高

4.3 实验二MPI-OpenMP混合并行扩展性

4.3.1 运行时间数据(部分示例)

OpenMP线程数 = 1

矩阵尺寸 总处理器=1 总处理器=2 总处理器=4 总处理器=8 总处理器=16
512×512×512 ______ ______ ______ ______ ______
1024×1024×1024 ______ ______ ______ ______ ______
2048×2048×2048 ______ ______ ______ ______ ______
4096×4096×4096 ______ ______ ______ ______ ______

OpenMP线程数 = 4

矩阵尺寸 总处理器=1 总处理器=2 总处理器=4 总处理器=8 总处理器=16
512×512×512 ______ ______ ______ ______ ______
1024×1024×1024 ______ ______ ______ ______ ______
2048×2048×2048 ______ ______ ______ ______ ______
4096×4096×4096 ______ ______ ______ ______ ______

4.3.2 最大加速比对比

OpenMP线程数 最大加速比 对应总处理器数
1 ______ ______
2 ______ ______
4 ______ ______
8 ______ ______

4.3.3 性能曲线图

(在此处插入 exp2_hybrid_scaling.png

4.3.4 结果分析

  1. 混合并行效果

    • 混合并行相比纯MPI______更优/更差)
    • 最优的OpenMP线程数是______
    • 原因是______
  2. 扩展性分析

    • 总处理器数增加时加速比______
    • 效率随总处理器数______
    • ______大/小)规模矩阵的扩展性更好

4.4 实验三MPI/OpenMP组合优化

实验条件总处理器数固定为16

4.4.1 效率数据

矩阵尺寸 1×16 2×8 4×4 8×2 16×1
512×512×512 ______ ______ ______ ______ ______
1024×1024×1024 ______ ______ ______ ______ ______
2048×2048×2048 ______ ______ ______ ______ ______
4096×4096×4096 ______ ______ ______ ______ ______

M×N表示M个MPI进程每个进程N个OpenMP线程

4.4.2 性能曲线图

(在此处插入 exp3_mpi_openmp_combo.png

4.4.3 结果分析

  1. 最优配置

    • 对于512×512矩阵最优配置是______
    • 对于1024×1024矩阵最优配置是______
    • 对于2048×2048矩阵最优配置是______
    • 对于4096×4096矩阵最优配置是______
  2. 配置影响分析

    • MPI进程数较多时效率______高/低原因是______
    • OpenMP线程数较多时效率______高/低原因是______
    • ______配置的通信开销最小
    • ______配置的负载均衡最好

5. 性能瓶颈分析与优化

5.1 性能瓶颈识别

通过实验分析,发现以下性能瓶颈:

  1. 通信瓶颈

    • MPI通信占用时间比例______
    • 主要通信操作______
    • 通信热点______
  2. 计算瓶颈

    • 计算密集型操作______
    • 缓存命中率______
    • 内存带宽利用率______
  3. 负载不均衡

    • 负载不均衡程度______
    • 原因______

5.2 优化方案

5.2.1 优化方案一:改进分块策略

问题描述:带状分块导致负载不均衡

优化方法

  • 采用二维块循环分块
  • 优化分块大小以适应缓存
  • 考虑NUMA架构

预期效果效率提升______%

5.2.2 优化方案二:通信优化

问题描述:通信开销过大

优化方法

  • 使用非阻塞通信重叠计算和通信
  • 减少通信次数,增加每次通信的数据量
  • 优化通信模式

预期效果通信时间减少______%

5.2.3 优化方案三:计算优化

问题描述:计算效率不高

优化方法

  • 使用分块矩阵乘法提高缓存利用率
  • 使用SIMD指令向量化
  • 循环展开和优化

预期效果计算时间减少______%

5.3 优化实现与效果对比

5.3.1 优化前后性能对比

配置 优化前时间(ms) 优化后时间(ms) 加速比
4 MPI进程, 512×512 ______ ______ ______
9 MPI进程, 1024×1024 ______ ______ ______
16 MPI进程, 2048×2048 ______ ______ ______

5.3.2 优化效果分析

  1. 分块优化

    • 效果______
    • 原因______
  2. 通信优化

    • 效果______
    • 原因______
  3. 计算优化

    • 效果______
    • 原因______

6. 实验总结

6.1 实验结论

  1. MPI并行效果

    • MPI并行能够有效加速矩阵乘法
    • 最优MPI进程数与______相关
    • 加速比受______限制
  2. OpenMP并行效果

    • OpenMP适合______并行
    • 最优线程数与______相关
    • 与MPI结合可以______
  3. 混合并行优势

    • 混合并行能够______
    • 适合______场景
    • 需要仔细调优______

6.2 心得体会

  1. 通过本次实验我掌握了______
  2. 在并行程序设计中______很重要
  3. 性能优化需要考虑______
  4. 遇到的主要困难是______解决方法是______

6.3 改进建议

  1. 程序可以进一步优化______
  2. 实验设计可以改进______
  3. 性能分析可以更深入______

7. 参考文献

  1. MPI论坛. MPI: A Message-Passing Interface Standard.
  2. OpenMP Architecture Review Board. OpenMP Specifications.
  3. Grama, A., et al. Introduction to Parallel Computing.
  4. 其他相关资料

附录

附录A完整源代码

(在此处附上关键代码片段或完整代码)

附录B实验原始数据

在此处附上CSV格式的原始数据

附录C性能分析图表

(在此处附上所有生成的图表)