hpc-lab-code/work/实验总结.md
2026-01-22 04:31:52 +08:00

6.2 KiB
Raw Blame History

MPI+OpenMP混合并行矩阵乘法实验总结

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

数据表格

表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

表2加速比和效率

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

简要分析

扩展性特点:

  • 1-6进程扩展性良好加速比接近线性
  • 6-9进程性能提升有限通信开销增加
  • 9-12进程性能下降通信开销过大

最优配置:

  • 6个MPI进程是最优选择
  • 效率在75%-89%之间
  • 超过6个进程后效率下降到45%-78%

性能瓶颈:

  1. 通信开销随进程数增加而增大
  2. 负载不均衡导致等待时间
  3. 小矩阵下内存带宽限制

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

数据表格

表3总进程数=16时不同配置的效率对比

配置 512×512效率 1024×1024效率 2048×2048效率 4096×4096效率
1×16 0.13 0.11 0.12 0.12
2×8 0.23 0.21 0.23 0.23
4×4 0.54 0.62 0.76 0.80
8×2 0.44 0.54 0.77 0.64
16×1 0.43 0.33 0.36 0.36

表4不同矩阵规模下的最优配置

矩阵规模 最优配置 最优效率 最短时间(ms)
512×512 4×4 0.54 29.53
1024×1024 4×4 0.62 173.31
2048×2048 8×2 0.77 1107.96
4096×4096 4×4 0.80 8629.08

简要分析

配置规律:

  1. MPI进程数过少1×16

    • 节点间通信少,但节点内并行效率低
    • 效率仅0.11-0.13
  2. MPI进程数过多16×1

    • 节点间通信开销大
    • 效率0.33-0.43
  3. 平衡配置4×4或8×2

    • 节点间通信和节点内并行达到较好平衡
    • 效率0.54-0.80

关键发现:

  • 4×4配置在小中矩阵下最优
  • 8×2配置在2048×2048矩阵下最优
  • 大矩阵下效率较高,但未达到超线性加速
  • MPI和OpenMP需要合理平衡

矩阵规模影响:

  • 小矩阵通信开销占比高需要减少MPI进程
  • 大矩阵:计算时间长,可以承受更多通信开销

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

数据表格

表5优化前后性能对比2048×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

表6优化前后性能对比4096×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

优化方案

主要优化技术:

  1. 循环分块使用64×64分块提高缓存命中率
  2. 循环展开:减少循环控制开销
  3. 内存访问优化:提高数据局部性

简要分析

性能提升:

  • 小矩阵平均提升1.09-1.62倍
  • 中矩阵平均提升1.13-1.59倍
  • 大矩阵平均提升1.12-2.07倍
  • 超大矩阵平均提升1.13-2.30倍

效率提升:

  • 优化后并行效率普遍提升
  • 4×4配置在大矩阵下效率达到107%
  • 16×1配置提升最明显2.07倍)

优化效果原因:

  1. 缓存利用率提升,减少缓存失效
  2. 指令级并行提高,更好的流水线利用
  3. 内存访问优化,提高带宽利用率

总体结论

1. 最优配置策略

推荐配置:

  • 小矩阵(<10242×2或4×2配置
  • 中矩阵1024-20484×4配置
  • 大矩阵(>20484×4或8×2配置

避免配置:

  • 1×N配置MPI进程太少
  • N×1配置OpenMP线程太少
  • 过多的总进程数(>48

2. 性能瓶颈分析

主要瓶颈:

  1. 通信开销MPI进程数增加导致通信开销增大
  2. 内存带宽:小矩阵下内存带宽成为瓶颈
  3. 负载不均衡:矩阵分块不均导致等待时间

优化方向:

  1. 减少通信频率和通信量
  2. 提高缓存利用率
  3. 优化负载均衡

3. 实验价值

本实验系统地研究了MPI+OpenMP混合并行的性能特性

  • 理解了MPI和OpenMP的权衡关系
  • 找到了最优的配置策略4×4
  • 验证了优化方法的有效性1.1-2.3倍提升)
  • 为大规模并行计算提供了参考

图表说明

实验生成的图表:

  1. experiment1_analysis.pngMPI进程数对性能的影响
  2. experiment2_analysis.pngMPI×OpenMP配置分析
  3. experiment3_analysis.png:优化前后对比

原始数据:

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