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

327 lines
9.3 KiB
Markdown
Raw 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混合并行矩阵乘法实验报告
**姓名**__________
**学号**__________
**日期**__________
## 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 编译与测试
#### 编译命令
```bash
./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性能分析图表
(在此处附上所有生成的图表)