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

259 lines
5.2 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混合并行的矩阵乘法程序用于高性能计算课程实验。
## 文件结构
```
gemm/
├── gemm_serial.cpp # 串行版本
├── gemm_parallel.cpp # MPI-OpenMP混合并行版本
├── gemm_optimized.cpp # 优化版本
├── build.sh # 编译脚本
├── quick_test.sh # 快速测试脚本
├── run_experiments.sh # 完整实验脚本
├── analyze_results.py # 数据分析脚本
├── README.md # 本文件
└── 实验报告模板.md # 实验报告模板
```
## 快速开始
### 1. 编译程序
```bash
cd /home/yly/dev/hpc-lab-code/work/gemm
./build.sh
```
### 2. 快速测试
```bash
./quick_test.sh
```
这将运行一系列小规模测试,验证程序功能是否正常。
### 3. 运行完整实验
```bash
./run_experiments.sh
```
这将运行所有实验并收集数据到CSV文件。
### 4. 分析结果
```bash
python3 analyze_results.py
```
这将生成性能分析图表和摘要。
## 手动运行示例
### 串行版本
```bash
./gemm_serial 1024 1024 1024 0
```
### 并行版本
```bash
# 使用4个MPI进程
mpirun -np 4 ./gemm_parallel 1024 1024 1024
# 使用2个MPI进程每个进程4个OpenMP线程
export OMP_NUM_THREADS=4
mpirun -np 2 ./gemm_parallel 2048 2048 2048
```
### 优化版本
```bash
mpirun -np 4 ./gemm_optimized 2048 2048 2048
```
## 实验数据说明
### 输出文件
1. **serial_results.csv**:串行基准测试结果
- 格式M,N,K,Time_ms
2. **experiment_results.csv**:并行实验结果
- 格式Experiment,M,N,K,MPI_Processes,OpenMP_Threads,Time_ms,Speedup,Efficiency
3. **生成的图表**
- exp1_mpi_scaling.png实验一性能曲线
- exp2_hybrid_scaling.png实验二性能曲线
- exp3_mpi_openmp_combo.png实验三配置对比
- efficiency_heatmap.png效率热图
### 数据处理
使用Excel、Python或R处理CSV文件
**Python示例**
```python
import pandas as pd
import matplotlib.pyplot as plt
# 读取数据
df = pd.read_csv('experiment_results.csv')
# 筛选实验一的数据
exp1 = df[df['Experiment'] == 'Exp1']
# 绘制加速比曲线
for size in exp1['M'].unique():
data = exp1[exp1['M'] == size]
plt.plot(data['MPI_Processes'], data['Speedup'],
marker='o', label=f'{size}×{size}')
plt.xlabel('MPI进程数')
plt.ylabel('加速比')
plt.legend()
plt.savefig('my_speedup_plot.png')
```
## 实验报告撰写
1. 使用`实验报告模板.md`作为报告框架
2. 填入实验数据和分析结果
3. 插入生成的性能图表
4. 撰写结果分析和心得体会
## 常见问题
### Q1: 编译时提示找不到mpi.h
**A**: 确保已安装MPI开发库
```bash
# Ubuntu/Debian
sudo apt-get install libopenmpi-dev
# CentOS/RHEL
sudo yum install openmpi-devel
```
### Q2: 运行时提示找不到mpirun
**A**: 确保已安装MPI运行时
```bash
# Ubuntu/Debian
sudo apt-get install openmpi-bin
# CentOS/RHEL
sudo yum install openmpi
```
### Q3: Python脚本运行失败
**A**: 安装必要的Python包
```bash
pip3 install pandas matplotlib seaborn
```
### Q4: 性能不如预期
**A**: 检查以下几点:
1. CPU频率是否正常是否降频
2. 关闭其他占用资源的程序
3. 检查系统负载
4. 确认编译优化选项已启用(-O3
### Q5: 结果验证失败
**A**: 可能的原因:
1. 矩阵尺寸不能被进程数整除
2. MPI通信错误
3. 内存分配问题
检查程序输出中的错误信息。
## 性能优化建议
### 1. 选择合适的进程数
- 小矩阵(< 10241-4个进程
- 中等矩阵1024-20484-9个进程
- 大矩阵> 20489-16个进程
### 2. 选择合适的OpenMP线程数
- 单节点:使用物理核心数
- 多节点:每个节点的物理核心数
- 通常4-8个线程效果较好
### 3. 矩阵尺寸选择
- 确保矩阵尺寸能被进程数较好地整除
- 避免过小的矩阵(通信开销大)
- 考虑内存容量限制
## 进阶使用
### 自定义实验参数
编辑`run_experiments.sh`,修改以下变量:
```bash
# 矩阵尺寸
MATRIX_SIZES="512 1024 2048 4096"
# MPI进程数
MPI_PROCESSES="1 2 4 9 16"
# OpenMP线程数
OPENMP_THREADS="1 2 4 8"
```
### 添加新的优化版本
1. 复制`gemm_parallel.cpp`作为模板
2. 实现你的优化算法
3.`build.sh`中添加编译命令
4. 在测试脚本中添加测试用例
### 性能分析工具
使用MPI性能分析工具
```bash
# 使用MPI profiling
mpirun -np 4 -mca pml_ob1_verbose 30 ./gemm_parallel 1024 1024 1024
# 使用时间分析
time mpirun -np 4 ./gemm_parallel 1024 1024 1024
```
## 参考资料
- [MPI教程](https://mpitutorial.com/)
- [OpenMP官方文档](https://www.openmp.org/)
- [并行编程模式](https://patterns.eecs.berkeley.edu/)
- 本地MPI文档`man MPI_*`
## 联系与支持
如有问题,请:
1. 检查本README的常见问题部分
2. 查看实验报告模板中的详细说明
3. 参考课程教材和讲义
4. 联系助教或老师
## 版本历史
- v1.0 (2026-01-21): 初始版本
- 实现串行、并行、优化版本
- 提供完整的测试和分析脚本
- 包含实验报告模板
## 许可证
本项目仅用于教学目的。