9.3 KiB
9.3 KiB
MPI-OpenMP混合并行矩阵乘法实验报告
姓名:__________
学号:__________
日期:__________
1. 实验目的
- 掌握MPI、OpenMP程序设计的基本编写、编译与运行方法
- 了解集群环境下矩阵乘法的并行程序设计方法
- 掌握利用(强/弱)加速比、运行时间、效率等测度分析并行程序性能
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 编译与测试
编译命令
./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 结果分析
-
加速比分析:
- 随着MPI进程数增加,加速比______(上升/下降)
- 在______进程时达到最大加速比
- 大规模矩阵的加速比______(优于/差于)小规模矩阵
-
效率分析:
- 并行效率随进程数增加而______(上升/下降)
- 效率下降的主要原因是______
- ______矩阵尺寸的效率最高
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 结果分析
-
混合并行效果:
- 混合并行相比纯MPI______(更优/更差)
- 最优的OpenMP线程数是______
- 原因是______
-
扩展性分析:
- 总处理器数增加时,加速比______
- 效率随总处理器数______
- ______(大/小)规模矩阵的扩展性更好
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 结果分析
-
最优配置:
- 对于512×512矩阵,最优配置是______
- 对于1024×1024矩阵,最优配置是______
- 对于2048×2048矩阵,最优配置是______
- 对于4096×4096矩阵,最优配置是______
-
配置影响分析:
- MPI进程数较多时,效率______(高/低),原因是______
- OpenMP线程数较多时,效率______(高/低),原因是______
- ______配置的通信开销最小
- ______配置的负载均衡最好
5. 性能瓶颈分析与优化
5.1 性能瓶颈识别
通过实验分析,发现以下性能瓶颈:
-
通信瓶颈:
- MPI通信占用时间比例:______
- 主要通信操作:______
- 通信热点:______
-
计算瓶颈:
- 计算密集型操作:______
- 缓存命中率:______
- 内存带宽利用率:______
-
负载不均衡:
- 负载不均衡程度:______
- 原因:______
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 优化效果分析
-
分块优化:
- 效果:______
- 原因:______
-
通信优化:
- 效果:______
- 原因:______
-
计算优化:
- 效果:______
- 原因:______
6. 实验总结
6.1 实验结论
-
MPI并行效果:
- MPI并行能够有效加速矩阵乘法
- 最优MPI进程数与______相关
- 加速比受______限制
-
OpenMP并行效果:
- OpenMP适合______并行
- 最优线程数与______相关
- 与MPI结合可以______
-
混合并行优势:
- 混合并行能够______
- 适合______场景
- 需要仔细调优______
6.2 心得体会
- 通过本次实验,我掌握了______
- 在并行程序设计中,______很重要
- 性能优化需要考虑______
- 遇到的主要困难是______,解决方法是______
6.3 改进建议
- 程序可以进一步优化______
- 实验设计可以改进______
- 性能分析可以更深入______
7. 参考文献
- MPI论坛. MPI: A Message-Passing Interface Standard.
- OpenMP Architecture Review Board. OpenMP Specifications.
- Grama, A., et al. Introduction to Parallel Computing.
- 其他相关资料
附录
附录A:完整源代码
(在此处附上关键代码片段或完整代码)
附录B:实验原始数据
(在此处附上CSV格式的原始数据)
附录C:性能分析图表
(在此处附上所有生成的图表)