233 lines
5.4 KiB
Markdown
233 lines
5.4 KiB
Markdown
# 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 数据可视化
|
||
- ✓ 详细的文档和模板
|
||
- ✓ 快速测试工具
|
||
|
||
祝实验顺利!
|