7.8 KiB
7.8 KiB
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个子图)
依赖:
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: 编译程序
cd /home/yly/dev/hpc-lab-code/lab4
xmake
步骤 2: 运行实验
./lab4.sh
步骤 3: 生成图表 (可选)
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
包含内容:
-
CPU (OpenMP) 性能
- 不同线程数: 1, 8, 64, 256
- 不同矩阵规模: 256, 512, 1024, 2048
- 运行时间、GFLOPS、加速比
-
CUDA Kernel1 (基础版本)
- 矩阵规模: 512, 1024, 2048, 4096
- 运行时间、GFLOPS
-
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)
效率
效率 = 加速比 / 处理器核心数
图表说明
自动生成的图表
-
vectoradd_performance.png
- X 轴: 数据规模 N
- Y 轴: 执行时间 (ms)
- 趋势线展示性能变化
-
cpu_vs_gpu_comparison.png (4 个子图)
- 子图 1: 运行时间对比 (柱状图)
- 子图 2: GFLOPS 对比 (柱状图)
- 子图 3: 加速比对比 (折线图)
- 子图 4: Kernel2 相对 Kernel1 的提升 (柱状图)
-
blocksize_analysis.png (2 个子图)
- 子图 1: 不同 BLOCK_SIZE 的运行时间
- 子图 2: 不同 BLOCK_SIZE 的 GFLOPS
实验报告要点
必须包含的内容
- ✓ 思考题详细解答 (模板已提供)
- ✓ 完整的性能数据表格
- ✓ 性能对比图表 (自动生成)
- ✓ 数据分析和结论
- ✓ 优化建议和改进方向
可选的加分项
- 使用 nvprof/Nsight 进行性能分析
- 实现额外的优化 (如寄存器分块)
- 更深入的理论分析
- 使用其他 GPU 进行对比测试
常见问题
Q1: 编译失败
A: 检查 CUDA 是否正确安装:
nvidia-smi
nvcc --version
Q2: 运行时找不到 GPU
A: 检查 GPU 驱动和 CUDA 运行时
Q3: Python 脚本报错
A: 安装依赖:
pip install matplotlib numpy
Q4: 想修改测试参数
A: 编辑对应的 .cu 文件,修改测试规模或参数,然后重新编译
下一步建议
- 运行实验:
./lab4.sh - 生成图表:
./plot_results.py - 查看数据: 检查
experiment_data/目录 - 填写报告: 使用
实验报告模板.md - 深入分析: 可以使用 nvprof 进行更详细的性能分析
技术亮点
- 自动化数据收集: 一键运行所有实验
- 结构化输出: 数据格式便于分析
- 可视化支持: 自动生成高质量图表
- 详细文档: 完整的实验指导和模板
- 灵活配置: 易于修改测试参数
总结
所有必要的文件已创建完成,项目结构清晰,文档齐全。学生可以:
- 快速编译和运行实验
- 自动收集实验数据
- 生成专业的性能图表
- 参考详细的报告模板
祝实验顺利!