hpc-lab-code/lab4/SETUP_SUMMARY.md
2026-01-21 18:02:30 +08:00

7.8 KiB
Raw Permalink Blame History

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

包含内容:

  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 是否正确安装:

nvidia-smi
nvcc --version

Q2: 运行时找不到 GPU

A: 检查 GPU 驱动和 CUDA 运行时

Q3: Python 脚本报错

A: 安装依赖:

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. 灵活配置: 易于修改测试参数

总结

所有必要的文件已创建完成,项目结构清晰,文档齐全。学生可以:

  • 快速编译和运行实验
  • 自动收集实验数据
  • 生成专业的性能图表
  • 参考详细的报告模板

祝实验顺利!