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

301 lines
7.8 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.

# Lab4 CUDA 项目设置完成总结
## 已完成的工作
### 1. 创建 xmake 构建系统 ✓
**文件**: `xmake.lua`
**功能**:
- 配置 CUDA 工具链
- 编译 5 个 CUDA 程序
- 自动处理 OpenMP 依赖 (MatrixMul_cpu)
- 生成优化的 Release 版本
**编译目标**:
- `vectoradd` - 向量加法程序
- `MatrixMul_cpu` - CPU OpenMP 矩阵乘法
- `MatrixMul_kernel1` - CUDA 基础版本
- `MatrixMul_kernel2` - CUDA 共享内存优化
- `matrixmultiply_block_size_change` - BLOCK_SIZE 性能测试
### 2. 优化 CUDA 源代码输出格式 ✓
**修改的文件**:
- `MatrixMul_kernel1.cu` - 添加详细的性能数据输出 (时间、GFLOPS)
- `MatrixMul_kernel2.cu` - 添加详细的性能数据输出 (时间、GFLOPS)
- 添加必要的头文件 (`<iomanip>`)
**输出格式**:
- 表格化输出,便于复制到实验报告
- 包含运行时间 (秒和毫秒)
- 计算 GFLOPS 性能指标
### 3. 创建实验数据收集脚本 ✓
**文件**: `lab4.sh`
**功能**:
- 自动运行所有 CUDA 程序
- 收集 GPU 硬件信息
- 将结果保存到 `experiment_data/` 目录
- 生成结构化的实验数据文件
**输出文件**:
- `experiment_data/gpu_info.txt` - GPU 信息
- `experiment_data/vectoradd_results.txt` - 向量加法数据
- `experiment_data/matrixmul_comparison.txt` - CPU vs GPU 对比
- `experiment_data/blocksize_analysis.txt` - BLOCK_SIZE 分析
### 4. 创建 Python 数据可视化脚本 ✓
**文件**: `plot_results.py`
**功能**:
- 自动解析实验数据
- 生成高质量的实验图表
- 支持中文字体显示
**生成的图表**:
- `vectoradd_performance.png` - 向量加法性能图
- `cpu_vs_gpu_comparison.png` - CPU vs GPU 性能对比 (4个子图)
- `blocksize_analysis.png` - BLOCK_SIZE 性能分析 (2个子图)
**依赖**:
```bash
pip install matplotlib numpy
```
### 5. 创建详细的文档 ✓
**README.md** - 完整的实验说明
- 实验目的和要求
- 思考题详细提示
- 数据分析指导
- 性能计算公式
**QUICKSTART.md** - 快速开始指南
- 编译和运行步骤
- 常见问题解答
- 实验报告要点
**实验报告模板.md** - 报告模板
- 思考题详细解答
- 性能数据表格
- 图表分析框架
- 实验总结指导
## 项目结构
```
lab4/
├── xmake.lua # xmake 构建配置
├── lab4.sh # 实验数据收集脚本
├── plot_results.py # Python 绘图脚本
├── README.md # 详细实验说明
├── QUICKSTART.md # 快速开始指南
├── 实验报告模板.md # 实验报告模板
├── SETUP_SUMMARY.md # 本文件
├── vectoradd.cu # 向量加法程序
├── MatrixMul_cpu.cu # CPU OpenMP 矩阵乘法
├── MatrixMul_kernel1.cu # CUDA 基础版本
├── MatrixMul_kernel2.cu # CUDA 共享内存优化
├── matrixmultiply_block_size_change.cu # BLOCK_SIZE 测试
├── build/ # 编译输出目录
│ └── linux/x86_64/release/
│ ├── vectoradd
│ ├── MatrixMul_cpu
│ ├── MatrixMul_kernel1
│ ├── MatrixMul_kernel2
│ └── matrixmultiply_block_size_change
└── experiment_data/ # 实验数据目录
├── gpu_info.txt # GPU 信息
├── vectoradd_results.txt # 向量加法数据
├── matrixmul_comparison.txt # CPU vs GPU 对比
├── blocksize_analysis.txt # BLOCK_SIZE 分析
└── figures/ # 生成的图表
├── vectoradd_performance.png
├── cpu_vs_gpu_comparison.png
└── blocksize_analysis.png
```
## 使用流程
### 步骤 1: 编译程序
```bash
cd /home/yly/dev/hpc-lab-code/lab4
xmake
```
### 步骤 2: 运行实验
```bash
./lab4.sh
```
### 步骤 3: 生成图表 (可选)
```bash
pip install matplotlib numpy
./plot_results.py
```
### 步骤 4: 填写实验报告
参考 `实验报告模板.md`,使用收集的数据和图表
## 实验数据说明
### 实验 4.2: 向量加法
**数据文件**: `experiment_data/vectoradd_results.txt`
**包含内容**:
- 不同数据规模 (128, 256, 512, 1024, 2048)
- 执行时间 (毫秒)
- 验证结果正确性
**需要分析**:
- 数据规模 vs 执行时间的关系
- 时间复杂度分析
- GPU 并行效率
### 实验 4.3: 矩阵乘法优化
#### 思考题
详见 `实验报告模板.md` 中的详细解答
#### 实验一: CPU vs GPU 性能对比
**数据文件**: `experiment_data/matrixmul_comparison.txt`
**包含内容**:
1. CPU (OpenMP) 性能
- 不同线程数: 1, 8, 64, 256
- 不同矩阵规模: 256, 512, 1024, 2048
- 运行时间、GFLOPS、加速比
2. CUDA Kernel1 (基础版本)
- 矩阵规模: 512, 1024, 2048, 4096
- 运行时间、GFLOPS
3. CUDA Kernel2 (共享内存优化)
- 矩阵规模: 512, 1024, 2048, 4096
- 运行时间、GFLOPS
**需要分析**:
- CPU vs GPU 性能对比
- 不同 OpenMP 线程数的扩展性
- Kernel2 相对 Kernel1 的优化效果
- 加速比计算和绘图
#### 实验二: BLOCK_SIZE 性能影响
**数据文件**: `experiment_data/blocksize_analysis.txt`
**包含内容**:
- 不同 BLOCK_SIZE: 4, 8, 16, 32
- 不同矩阵规模: 256, 512, 1024, 2048
- 运行时间、GFLOPS
**需要分析**:
- BLOCK_SIZE 对性能的影响
- 最优 BLOCK_SIZE 的选择
- 不同矩阵规模下的最优配置
## 性能计算公式
### 加速比
```
加速比 = 基准时间 / 优化后时间
```
### FLOPS
```
矩阵乘法浮点运算数 = 2 × M × N × K
GFLOPS = 运算次数 / (时间秒 × 10^9)
```
### 效率
```
效率 = 加速比 / 处理器核心数
```
## 图表说明
### 自动生成的图表
1. **vectoradd_performance.png**
- X 轴: 数据规模 N
- Y 轴: 执行时间 (ms)
- 趋势线展示性能变化
2. **cpu_vs_gpu_comparison.png** (4 个子图)
- 子图 1: 运行时间对比 (柱状图)
- 子图 2: GFLOPS 对比 (柱状图)
- 子图 3: 加速比对比 (折线图)
- 子图 4: Kernel2 相对 Kernel1 的提升 (柱状图)
3. **blocksize_analysis.png** (2 个子图)
- 子图 1: 不同 BLOCK_SIZE 的运行时间
- 子图 2: 不同 BLOCK_SIZE 的 GFLOPS
## 实验报告要点
### 必须包含的内容
1. ✓ 思考题详细解答 (模板已提供)
2. ✓ 完整的性能数据表格
3. ✓ 性能对比图表 (自动生成)
4. ✓ 数据分析和结论
5. ✓ 优化建议和改进方向
### 可选的加分项
- 使用 nvprof/Nsight 进行性能分析
- 实现额外的优化 (如寄存器分块)
- 更深入的理论分析
- 使用其他 GPU 进行对比测试
## 常见问题
### Q1: 编译失败
**A**: 检查 CUDA 是否正确安装:
```bash
nvidia-smi
nvcc --version
```
### Q2: 运行时找不到 GPU
**A**: 检查 GPU 驱动和 CUDA 运行时
### Q3: Python 脚本报错
**A**: 安装依赖:
```bash
pip install matplotlib numpy
```
### Q4: 想修改测试参数
**A**: 编辑对应的 .cu 文件,修改测试规模或参数,然后重新编译
## 下一步建议
1. **运行实验**: `./lab4.sh`
2. **生成图表**: `./plot_results.py`
3. **查看数据**: 检查 `experiment_data/` 目录
4. **填写报告**: 使用 `实验报告模板.md`
5. **深入分析**: 可以使用 nvprof 进行更详细的性能分析
## 技术亮点
1. **自动化数据收集**: 一键运行所有实验
2. **结构化输出**: 数据格式便于分析
3. **可视化支持**: 自动生成高质量图表
4. **详细文档**: 完整的实验指导和模板
5. **灵活配置**: 易于修改测试参数
## 总结
所有必要的文件已创建完成,项目结构清晰,文档齐全。学生可以:
- 快速编译和运行实验
- 自动收集实验数据
- 生成专业的性能图表
- 参考详细的报告模板
祝实验顺利!