hpc-lab-code/lab4/使用指南.md
2026-01-21 18:02:30 +08:00

233 lines
5.4 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.

# Lab4 CUDA 实验项目 - 使用指南
## 项目概述
本项目为 Lab4 CUDA 程序实验提供了完整的构建系统、数据收集和分析工具。
**已创建的文件**:
-`xmake.lua` - 构建配置
-`lab4.sh` - 完整实验数据收集脚本
-`test_quick.sh` - 快速测试脚本
-`plot_results.py` - Python 数据可视化脚本
-`README.md` - 详细实验说明
-`QUICKSTART.md` - 快速开始指南
-`实验报告模板.md` - 实验报告模板
-`SETUP_SUMMARY.md` - 项目设置总结
## 快速开始
### 1. 编译程序
```bash
cd /home/yly/dev/hpc-lab-code/lab4
xmake
```
### 2. 快速测试(验证一切正常)
```bash
./test_quick.sh
```
### 3. 运行完整实验
```bash
./lab4.sh
```
**注意**: 完整实验可能需要几分钟时间,因为会测试多个矩阵规模和配置。
### 4. 生成图表(可选)
```bash
# 安装依赖
pip install matplotlib numpy
# 生成图表
./plot_results.py
```
## 实验内容
### 实验 4.2: 向量加法
**程序**: `vectoradd.cu`
**测试内容**:
- 不同数据规模: 128, 256, 512, 1024, 2048
- 测量执行时间
- 验证结果正确性
**数据输出**: `experiment_data/vectoradd_results.txt`
### 实验 4.3: 矩阵乘法优化
#### 思考题
详见 `实验报告模板.md`,包含:
1. Kernel1 的数据划分策略
2. Kernel2 的优化策略和线程同步的必要性
3. Kernel2 的进一步优化空间
#### 实验一: CPU vs GPU 性能对比
**程序**:
- `MatrixMul_cpu.cu` - CPU OpenMP 实现
- `MatrixMul_kernel1.cu` - CUDA 基础版本
- `MatrixMul_kernel2.cu` - CUDA 共享内存优化
**测试内容**:
- CPU: 不同线程数 (1, 8, 64, 256)
- GPU: 不同矩阵规模 (512, 1024, 2048, 4096)
- 性能指标: 时间、GFLOPS、加速比
**数据输出**: `experiment_data/matrixmul_comparison.txt`
#### 实验二: BLOCK_SIZE 性能影响
**程序**: `matrixmultiply_block_size_change.cu`
**测试内容**:
- 不同 BLOCK_SIZE: 4, 8, 16, 32
- 不同矩阵规模: 256, 512, 1024, 2048
- 性能指标: 时间、GFLOPS
**数据输出**: `experiment_data/blocksize_analysis.txt`
## 实验报告
### 报告模板
使用 `实验报告模板.md` 作为起点,其中包含:
- 思考题详细解答
- 性能数据表格
- 图表分析框架
- 实验总结指导
### 需要提交的内容
1. 思考题答案
2. 性能数据表格
3. 性能对比图表
4. 数据分析和结论
5. 优化建议
### 图表生成
**方法一**: 使用 Python 脚本(推荐)
```bash
./plot_results.py
```
生成的图表位于 `experiment_data/figures/`
**方法二**: 手动绘制
- 将数据复制到 Excel
- 使用 Excel 或其他工具绘制图表
## 性能分析
### 关键指标
**加速比**:
```
加速比 = 基准时间 / 优化后时间
```
**GFLOPS**:
```
矩阵乘法: 2 × M × N × K 次浮点运算
GFLOPS = 运算次数 / (时间秒 × 10^9)
```
**效率**:
```
效率 = 加速比 / 处理器核心数
```
### 分析要点
1. **CPU vs GPU**:
- GPU 在大规模矩阵上的优势
- 内存带宽的影响
- 并行度的差异
2. **Kernel1 vs Kernel2**:
- 共享内存的优化效果
- 全局内存访问次数的减少
- 性能提升的原因
3. **BLOCK_SIZE 影响**:
- 最优 BLOCK_SIZE 的选择
- 占用率 (Occupancy) 的平衡
- 不同矩阵规模的最优配置
## 常见问题
### Q1: 编译失败
**A**: 检查 CUDA 安装:
```bash
nvidia-smi
nvcc --version
```
### Q2: 程序运行很慢
**A**: 这是正常的,特别是大矩阵测试。可以:
- 使用 `test_quick.sh` 进行快速验证
- 修改源文件中的测试规模
- 耐心等待完整实验完成
### Q3: 想修改测试参数
**A**: 编辑对应的 .cu 文件:
- `vectoradd.cu`: 修改 `testSizes` 数组
- `MatrixMul_*.cu`: 修改 `sizes` 数组
- `matrixmultiply_block_size_change.cu`: 修改 `block_sizes``matrix_sizes`
### Q4: Python 脚本报错
**A**: 安装依赖:
```bash
pip install matplotlib numpy
```
## 项目结构
```
lab4/
├── *.cu # CUDA 源代码
├── xmake.lua # 构建配置
├── lab4.sh # 完整实验脚本
├── test_quick.sh # 快速测试脚本
├── plot_results.py # Python 绘图脚本
├── README.md # 详细说明
├── QUICKSTART.md # 快速开始
├── 实验报告模板.md # 报告模板
├── SETUP_SUMMARY.md # 设置总结
├── 使用指南.md # 本文件
├── build/ # 编译输出
│ └── linux/x86_64/release/
│ └── [可执行文件]
└── experiment_data/ # 实验数据
├── gpu_info.txt
├── vectoradd_results.txt
├── matrixmul_comparison.txt
├── blocksize_analysis.txt
└── figures/ # 生成的图表
```
## 下一步
1. ✓ 编译程序: `xmake`
2. ✓ 快速测试: `./test_quick.sh`
3. ⏭ 运行完整实验: `./lab4.sh`
4. ⏭ 生成图表: `./plot_results.py`
5. ⏭ 填写实验报告
6. ⏭ 提交报告
## 技术支持
如有问题,请检查:
1. `README.md` - 详细的实验说明
2. `QUICKSTART.md` - 常见问题解答
3. `实验报告模板.md` - 思考题解答
## 总结
本项目提供了:
- ✓ 完整的构建系统
- ✓ 自动化数据收集
- ✓ Python 数据可视化
- ✓ 详细的文档和模板
- ✓ 快速测试工具
祝实验顺利!