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

5.2 KiB
Raw Permalink Blame History

快速开始指南

项目概述

本项目实现了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. 编译程序

cd /home/yly/dev/hpc-lab-code/work/gemm
./build.sh

2. 快速测试

./quick_test.sh

这将运行一系列小规模测试,验证程序功能是否正常。

3. 运行完整实验

./run_experiments.sh

这将运行所有实验并收集数据到CSV文件。

4. 分析结果

python3 analyze_results.py

这将生成性能分析图表和摘要。

手动运行示例

串行版本

./gemm_serial 1024 1024 1024 0

并行版本

# 使用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

优化版本

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示例

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开发库

# Ubuntu/Debian
sudo apt-get install libopenmpi-dev

# CentOS/RHEL
sudo yum install openmpi-devel

Q2: 运行时提示找不到mpirun

A: 确保已安装MPI运行时

# Ubuntu/Debian
sudo apt-get install openmpi-bin

# CentOS/RHEL
sudo yum install openmpi

Q3: Python脚本运行失败

A: 安装必要的Python包

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,修改以下变量:

# 矩阵尺寸
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性能分析工具

# 使用MPI profiling
mpirun -np 4 -mca pml_ob1_verbose 30 ./gemm_parallel 1024 1024 1024

# 使用时间分析
time mpirun -np 4 ./gemm_parallel 1024 1024 1024

参考资料

联系与支持

如有问题,请:

  1. 检查本README的常见问题部分
  2. 查看实验报告模板中的详细说明
  3. 参考课程教材和讲义
  4. 联系助教或老师

版本历史

  • v1.0 (2026-01-21): 初始版本
    • 实现串行、并行、优化版本
    • 提供完整的测试和分析脚本
    • 包含实验报告模板

许可证

本项目仅用于教学目的。