hpc-lab-code/work/OVERVIEW.md
2026-01-21 18:02:30 +08:00

305 lines
7.1 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混合并行矩阵乘法实现用于高性能计算课程实验。项目包含串行、并行和优化三个版本以及完整的测试、分析和文档系统。
## 📁 项目结构
```
gemm/
├── 📄 源代码文件
│ ├── gemm_serial.cpp # 串行版本 (2.2KB)
│ ├── gemm_parallel.cpp # MPI-OpenMP混合并行版本 (11KB)
│ └── gemm_optimized.cpp # 优化版本 (11KB)
├── 🔧 构建和测试
│ ├── build.sh # 编译脚本 (962B)
│ ├── quick_test.sh # 快速测试脚本 (1.5KB)
│ ├── run_experiments.sh # 完整实验脚本 (5.6KB)
│ └── xmake.lua # xmake配置 (714B)
├── 📊 数据分析
│ └── analyze_results.py # Python分析脚本 (9.8KB)
├── 📚 文档
│ ├── README.md # 项目说明 (7.2KB)
│ ├── QUICKSTART.md # 快速开始 (5.3KB)
│ ├── PROJECT_SUMMARY.md # 项目总结 (8.1KB)
│ ├── DELIVERY_CHECKLIST.md # 交付清单 (6.7KB)
│ └── 实验报告模板.md # 报告模板 (9.3KB)
└── 🔨 可执行文件
├── gemm_serial # 串行版本 (18KB)
├── gemm_parallel # 并行版本 (113KB)
└── gemm_optimized # 优化版本 (113KB)
```
## 🚀 快速开始
### 1. 编译程序
```bash
./build.sh
```
### 2. 快速测试
```bash
./quick_test.sh
```
### 3. 运行完整实验
```bash
./run_experiments.sh
```
### 4. 分析结果
```bash
python3 analyze_results.py
```
## 📊 实验内容
### 实验一MPI进程数扩展性
- **目的**研究纯MPI并行的扩展性
- **变量**MPI进程数1, 2, 4, 9, 16
- **固定**OpenMP线程数 = 1
- **测量**:运行时间、加速比、效率
### 实验二:混合并行扩展性
- **目的**研究MPI-OpenMP混合并行的性能
- **变量**MPI进程数 × OpenMP线程数
- **组合**:多种进程/线程组合
- **测量**:运行时间、加速比、效率
### 实验三MPI/OpenMP组合优化
- **目的**找到最优的MPI/OpenMP组合
- **固定**:总处理器数 = 16
- **变量**MPI/OpenMP组合1×16, 2×8, 4×4, 8×2, 16×1
- **测量**:效率对比
## 💡 技术特点
### 并行策略
-**MPI并行**:主从模型,带状分块
-**OpenMP并行**循环级并行collapse优化
-**混合并行**:两级并行,灵活配置
-**非阻塞通信**:重叠通信和计算
### 性能优化
-**分块算法**:提高缓存命中率
-**循环优化**:减少循环开销
-**通信优化**:减少通信次数
-**内存优化**:连续内存布局
### 代码质量
-**模块化设计**:清晰的函数划分
-**完整注释**:详细的代码说明
-**错误处理**:完善的错误检查
-**结果验证**:自动验证正确性
## 📈 性能指标
### 预期性能512×512×512
- 串行版本:~260 ms
- 并行版本4进程~54 ms加速比 4.8x
- 优化版本4进程~32 ms加速比 8.1x
### 扩展性
- 小规模512良好的线性加速比
- 中等规模1024-2048接近线性加速比
- 大规模4096受通信限制效率略降
## 📖 文档说明
### README.md
- 项目概述和说明
- 编译和运行指南
- 实验设计详解
- 数据处理说明
- 性能分析建议
- 故障排除
### QUICKSTART.md
- 快速开始指南
- 常见问题解答
- 性能优化建议
- 进阶使用说明
### PROJECT_SUMMARY.md
- 项目完成情况
- 技术亮点总结
- 实验设计说明
- 学习要点
- 进一步优化方向
### DELIVERY_CHECKLIST.md
- 文件清单
- 功能清单
- 测试清单
- 实验要求对照
- 使用说明
- 时间规划建议
### 实验报告模板.md
- 完整的报告框架
- 数据表格模板
- 分析指导
- 优化方案模板
## 🎓 学习目标
通过本项目,你将掌握:
1. **MPI编程**
- 点对点通信
- 非阻塞通信
- 数据分布策略
- 通信优化
2. **OpenMP编程**
- 并行循环
- 数据共享
- 线程控制
- 性能调优
3. **混合并行**
- 两级并行设计
- 负载均衡
- 性能优化
4. **性能分析**
- 加速比计算
- 效率分析
- 瓶颈识别
- 优化方法
## 🔍 关键代码片段
### MPI数据分发
```cpp
// 发送分块大小
MPI_Isend(&rowStride, 1, MPI_INT, sendto, 0, MPI_COMM_WORLD, &req);
sendRequests.push_back(req);
// 发送矩阵数据
for (int r = 0; r < rowStride; r++) {
MPI_Isend(leftMat + (rowStart + r) * n, n, MPI_FLOAT,
sendto, 1, MPI_COMM_WORLD, &req);
sendRequests.push_back(req);
}
```
### OpenMP并行计算
```cpp
#pragma omp parallel for collapse(2)
for (int row = 0; row < m; row++) {
for (int col = 0; col < k; col++) {
resultMat[row * k + col] = 0.0;
for (int i = 0; i < n; i++) {
resultMat[row * k + col] +=
leftMat[row * n + i] * rightMat[col * n + i];
}
}
}
```
### 分块优化
```cpp
const int BLOCK_SIZE = 64;
for (int row_block = 0; row_block < m; row_block += BLOCK_SIZE) {
for (int col_block = 0; col_block < k; col_block += BLOCK_SIZE) {
// 分块计算以提高缓存命中率
}
}
```
## 📊 数据分析示例
### Python分析脚本功能
- 读取CSV实验数据
- 生成性能曲线图
- 绘制效率热图
- 计算统计摘要
- 多种可视化
### 输出图表
- `exp1_mpi_scaling.png`MPI扩展性曲线
- `exp2_hybrid_scaling.png`:混合并行扩展性
- `exp3_mpi_openmp_combo.png`MPI/OpenMP组合对比
- `efficiency_heatmap.png`:效率热图
## 🛠️ 故障排除
### 编译问题
```bash
# 检查MPI
mpic++ --version
# 检查OpenMP
echo | clang++ -x c++ - -fopenmp -E - > /dev/null
```
### 运行问题
```bash
# 检查MPI进程数
mpirun -np 4 ./gemm_parallel 512 512 512
# 设置OpenMP线程数
export OMP_NUM_THREADS=4
```
### 性能问题
- 检查CPU频率
- 关闭其他程序
- 调整进程/线程数
- 使用优化版本
## 📝 实验报告撰写
### 步骤
1. 复制`实验报告模板.md`
2. 运行实验收集数据
3. 运行分析生成图表
4. 填入数据和分析
5. 撰写总结和心得
### 要点
- 完整的数据记录
- 深入的结果分析
- 清晰的图表展示
- 创新的优化方案
- 真实的学习心得
## 🎯 项目特色
1. **完整性**:从串行到并行的完整实现
2. **自动化**:一键编译、测试、实验、分析
3. **可扩展**:支持任意矩阵尺寸和进程配置
4. **文档化**:详细的文档和注释
5. **实用性**:可直接用于课程实验
## 📅 版本历史
- **v1.0** (2026-01-21)
- 初始版本发布
- 完成所有核心功能
- 提供完整文档
## 👥 贡献
本项目由高性能计算课程学生完成,用于教学和学习目的。
## 📄 许可
本项目仅用于教学目的。
## 🙏 致谢
感谢高性能计算课程提供的实验平台和指导。
---
**项目状态**:✅ 完成并可交付
**最后更新**2026年1月21日
**联系方式**:通过课程助教或老师