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