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

195 lines
6.2 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混合并行矩阵乘法实验总结
## 实验一固定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. 最优配置策略
**推荐配置:**
- **小矩阵(<1024**2×2或4×2配置
- **中矩阵1024-2048**4×4配置
- **大矩阵>2048**4×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.png`MPI进程数对性能的影响
2. `experiment2_analysis.png`MPI×OpenMP配置分析
3. `experiment3_analysis.png`:优化前后对比
原始数据:
1. `experiment_results.csv`:完整实验数据
2. `serial_results.csv`:串行基准数据