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

315 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`:串行基准数据