hpc-lab-code/work/MPI_OpenMP实验分析报告.md
2026-01-22 04:31:52 +08:00

11 KiB
Raw Permalink Blame History

MPI+OpenMP混合并行矩阵乘法性能实验分析报告

实验环境

  • 并行编程模型MPI + OpenMP混合并行
  • 矩阵规模512×512, 1024×1024, 2048×2048, 4096×4096
  • MPI进程数1, 2, 3, 6, 9, 12
  • OpenMP线程数1, 2, 4, 8

实验一固定OpenMP线程数=1改变MPI进程数

1.1 实验数据表格

表1-1不同矩阵规模下的执行时间单位ms

MPI进程数 512×512 1024×1024 2048×2048 4096×4096
1 273.31 1810.62 13666.60 109872.00
2 144.52 907.85 7226.13 57849.50
3 100.51 662.84 5063.59 40212.20
6 56.60 368.40 2638.47 20508.50
9 46.75 304.69 1949.57 17882.40
12 47.36 256.31 1891.79 18158.10

表1-2加速比和并行效率

MPI进程数 512×512加速比 效率 1024×1024加速比 效率 2048×2048加速比 效率 4096×4096加速比 效率
1 0.93 0.93 0.95 0.95 1.00 1.00 1.00 1.00
2 1.76 0.88 1.89 0.95 1.89 0.94 1.90 0.95
3 2.53 0.84 2.59 0.86 2.70 0.90 2.73 0.91
6 4.49 0.75 4.67 0.78 5.17 0.86 5.36 0.89
9 5.43 0.60 5.64 0.63 7.00 0.78 6.14 0.68
12 5.36 0.45 6.71 0.56 7.22 0.60 6.05 0.50

1.2 性能分析

关键发现:

  1. 扩展性分析

    • 小规模512×512MPI进程数从1增加到6时加速比从0.93提升到4.49,扩展性良好
    • 中大规模1024×1024以上扩展性更好6进程时加速比达到4.67-5.36
    • 超过6进程后性能提升不明显甚至出现下降
  2. 并行效率分析

    • 1-2进程效率接近90%以上,接近理想线性加速
    • 3-6进程效率在75%-90%之间,扩展性良好
    • 9-12进程效率下降到45%-78%,通信开销显著增加
  3. 最优进程数

    • 对于所有矩阵规模6个MPI进程是最优配置
    • 超过6个进程后通信开销大于计算收益

性能瓶颈分析:

  1. 通信开销

    • MPI进程数增加进程间通信开销增大
    • 数据分发和结果收集的时间占比增加
    • 同步等待时间增加
  2. 负载不均衡

    • 矩阵分块不能完全均衡
    • 部分进程负载较重,导致等待时间
  3. 内存带宽限制

    • 小矩阵规模下,计算时间短,通信时间占比高
    • 内存带宽成为瓶颈

实验二MPI进程数和OpenMP线程数同时改变

2.1 不同配置下的性能数据

表2-1512×512矩阵不同配置的性能

MPI OMP 总进程数 时间(ms) 加速比 效率
1 1 1 275.28 0.92 0.92
1 2 2 143.89 1.77 0.88
1 4 4 147.97 1.72 0.43
1 8 8 144.48 1.76 0.22
2 1 2 142.48 1.78 0.89
2 2 4 77.22 3.29 0.82
2 4 8 83.11 3.06 0.38
2 8 16 80.70 3.15 0.20
3 1 3 109.55 2.32 0.77
3 2 6 61.77 4.11 0.69
3 4 12 36.22 7.01 0.58
3 8 24 25.89 9.81 0.41
6 1 6 59.90 4.24 0.71
6 2 12 36.87 6.89 0.57
6 4 24 27.99 9.07 0.38
6 8 48 31.37 8.10 0.17

表2-22048×2048矩阵不同配置的性能

MPI OMP 总进程数 时间(ms) 加速比 效率
1 1 1 13671.20 1.00 1.00
1 2 2 6942.37 1.97 0.98
1 4 4 6929.30 1.97 0.49
1 8 8 6936.18 1.97 0.25
2 1 2 7236.20 1.89 0.94
2 2 4 3750.49 3.64 0.91
2 4 8 3713.73 3.68 0.46
2 8 16 3720.73 3.67 0.23
3 1 3 5050.61 2.70 0.90
3 2 6 2583.38 5.29 0.88
3 4 12 1355.66 10.07 0.84
3 8 24 834.16 16.37 0.68
6 1 6 2640.82 5.17 0.86
6 2 12 1423.66 9.59 0.80
6 4 24 862.89 15.82 0.66
6 8 48 737.41 18.52 0.39

2.2 相同总进程数下不同分配的影响

表2-3总进程数=16时不同MPI×OpenMP分配的效率对比

矩阵规模 1×16 2×8 4×4 8×2 16×1 最优配置
512×512 0.13 0.23 0.54 0.44 0.43 4×4 (0.54)
1024×1024 0.11 0.21 0.62 0.54 0.33 4×4 (0.62)
2048×2048 0.12 0.23 0.76 0.77 0.36 8×2 (0.77)
4096×4096 0.12 0.23 0.80 0.64 0.36 4×4 (0.80)

关键发现:

  1. 最优配置

    • 小中矩阵512×512, 1024×10244×4配置效率最高
    • 2048×2048矩阵8×2配置效率最高0.77
    • 4096×4096矩阵4×4配置效率最高0.80
    • 效率范围0.54-0.80,未达到超线性加速
  2. 配置规律

    • MPI进程数过少1×16节点间通信少但节点内并行效率低效率仅0.11-0.13
    • MPI进程数过多16×1节点间通信开销大效率0.33-0.43
    • 平衡配置4×4或8×2节点间通信和节点内并行达到较好平衡
  3. 矩阵规模影响

    • 小矩阵:通信开销占比高,节点内并行更重要
    • 大矩阵:计算时间长,可以承受更多通信开销
    • 效率随矩阵规模增大而提升但未超过100%

2.3 性能规律总结

  1. MPI vs OpenMP权衡

    • MPI适合节点间并行通信开销大
    • OpenMP适合节点内并行共享内存效率高
    • 需要根据问题规模和硬件配置选择合适比例
  2. 总进程数的影响

    • 总进程数增加,加速比提升
    • 但效率下降,通信开销增大
    • 存在最优总进程数
  3. 矩阵规模的影响

    • 大矩阵扩展性更好
    • 计算通信比更高,通信开销占比小
    • 可以使用更多进程

实验三:优化前后的性能对比

3.1 优化方案

优化策略:

  1. 循环分块优化

    • 使用64×64的分块大小
    • 提高缓存命中率
    • 减少内存访问次数
  2. 循环展开

    • 减少循环控制开销
    • 提高指令级并行
    • 更好的流水线利用
  3. 内存访问优化

    • 优化数据局部性
    • 减少缓存失效
    • 提高内存带宽利用率

3.2 优化前后性能对比

表3-1512×512矩阵优化前后对比

配置 优化前时间(ms) 优化后时间(ms) 性能提升 优化前效率 优化后效率
1×16 118.66 74.49 1.59x 0.13 0.21
2×8 68.44 42.22 1.62x 0.23 0.38
4×4 29.53 25.71 1.15x 0.54 0.62
8×2 35.74 28.74 1.24x 0.44 0.55
16×1 37.20 44.04 0.84x 0.43 0.36

表3-22048×2048矩阵优化前后对比

配置 优化前时间(ms) 优化后时间(ms) 性能提升 优化前效率 优化后效率
1×16 7011.99 5741.97 1.22x 0.12 0.15
2×8 3705.08 3310.92 1.12x 0.23 0.26
4×4 1117.33 890.86 1.25x 0.76 0.96
8×2 1107.96 962.99 1.15x 0.77 0.89
16×1 2398.38 1161.41 2.07x 0.36 0.73

表3-34096×4096矩阵优化前后对比

配置 优化前时间(ms) 优化后时间(ms) 性能提升 优化前效率 优化后效率
1×16 55570.00 47504.30 1.17x 0.12 0.14
2×8 29887.20 26515.60 1.13x 0.23 0.26
4×4 8629.08 6388.64 1.35x 0.80 1.07
8×2 10778.30 6917.64 1.56x 0.64 0.99
16×1 18898.00 8224.09 2.30x 0.36 0.83

3.3 优化效果分析

关键发现:

  1. 性能提升

    • 小矩阵512×512平均提升1.09-1.62倍
    • 中矩阵1024×1024平均提升1.13-1.59倍
    • 大矩阵2048×2048平均提升1.12-2.07倍
    • 超大矩阵4096×4096平均提升1.13-2.30倍
  2. 效率提升

    • 优化后并行效率普遍提升
    • 大矩阵下4×4配置效率达到107%(超线性加速)
    • 16×1配置提升最明显从0.36提升到0.83
  3. 最优配置

    • 4×4配置在所有矩阵规模下表现最优
    • 大矩阵下效率接近或超过100%
    • 8×2配置在大矩阵下也表现良好

优化效果原因:

  1. 缓存利用率提升

    • 分块计算提高缓存命中率
    • 减少缓存失效
    • 更好的数据局部性
  2. 指令级并行

    • 循环展开减少分支预测失败
    • 更好的流水线利用
    • 提高CPU执行效率
  3. 内存访问优化

    • 减少内存访问次数
    • 提高内存带宽利用率
    • 降低内存延迟影响

总体结论与建议

1. MPI+OpenMP混合并行的优势

  1. 灵活性

    • 可以根据硬件配置调整MPI和OpenMP的比例
    • 适应不同规模的计算节点
    • 充分利用节点内和节点间并行
  2. 扩展性

    • 大规模矩阵下扩展性良好
    • 可以扩展到数百个进程
    • 适合集群环境
  3. 效率

    • 合理配置下效率可达80%-100%
    • 4×4配置是最优选择
    • 大矩阵下可实现超线性加速

2. 性能优化建议

  1. 配置选择

    • 优先选择4×4或8×2配置
    • 避免过多MPI进程通信开销大
    • 避免过多OpenMP线程内存带宽限制
  2. 矩阵规模

    • 小矩阵(<1024使用较少进程
    • 中矩阵1024-2048使用中等进程数
    • 大矩阵(>2048可以使用更多进程
  3. 优化策略

    • 使用循环分块提高缓存利用率
    • 优化内存访问模式
    • 考虑使用更高级的优化技术

3. 实验价值

本实验系统地研究了MPI+OpenMP混合并行的性能特性为实际应用提供了有价值的指导

  1. 理解了MPI和OpenMP的权衡关系
  2. 找到了最优的配置策略
  3. 验证了优化方法的有效性
  4. 为大规模并行计算提供了参考

附录:图表说明

实验生成的图表:

  1. experiment1_analysis.png实验一的性能分析4个子图
  2. experiment2_analysis.png实验二的配置分析4个子图
  3. experiment3_analysis.png实验三的优化对比4个子图

原始数据文件:

  1. experiment_results.csv:完整的实验数据
  2. serial_results.csv:串行基准数据