301 lines
7.8 KiB
Markdown
301 lines
7.8 KiB
Markdown
# 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. **灵活配置**: 易于修改测试参数
|
||
|
||
## 总结
|
||
|
||
所有必要的文件已创建完成,项目结构清晰,文档齐全。学生可以:
|
||
- 快速编译和运行实验
|
||
- 自动收集实验数据
|
||
- 生成专业的性能图表
|
||
- 参考详细的报告模板
|
||
|
||
祝实验顺利!
|