# 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) - 添加必要的头文件 (``) **输出格式**: - 表格化输出,便于复制到实验报告 - 包含运行时间 (秒和毫秒) - 计算 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. **灵活配置**: 易于修改测试参数 ## 总结 所有必要的文件已创建完成,项目结构清晰,文档齐全。学生可以: - 快速编译和运行实验 - 自动收集实验数据 - 生成专业的性能图表 - 参考详细的报告模板 祝实验顺利!