hpc-lab-code/lab4/使用指南.md
2026-01-21 18:02:30 +08:00

5.4 KiB
Raw Permalink Blame History

Lab4 CUDA 实验项目 - 使用指南

项目概述

本项目为 Lab4 CUDA 程序实验提供了完整的构建系统、数据收集和分析工具。

已创建的文件:

  • xmake.lua - 构建配置
  • lab4.sh - 完整实验数据收集脚本
  • test_quick.sh - 快速测试脚本
  • plot_results.py - Python 数据可视化脚本
  • README.md - 详细实验说明
  • QUICKSTART.md - 快速开始指南
  • 实验报告模板.md - 实验报告模板
  • SETUP_SUMMARY.md - 项目设置总结

快速开始

1. 编译程序

cd /home/yly/dev/hpc-lab-code/lab4
xmake

2. 快速测试(验证一切正常)

./test_quick.sh

3. 运行完整实验

./lab4.sh

注意: 完整实验可能需要几分钟时间,因为会测试多个矩阵规模和配置。

4. 生成图表(可选)

# 安装依赖
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 脚本(推荐)

./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 安装:

nvidia-smi
nvcc --version

Q2: 程序运行很慢

A: 这是正常的,特别是大矩阵测试。可以:

  • 使用 test_quick.sh 进行快速验证
  • 修改源文件中的测试规模
  • 耐心等待完整实验完成

Q3: 想修改测试参数

A: 编辑对应的 .cu 文件:

  • vectoradd.cu: 修改 testSizes 数组
  • MatrixMul_*.cu: 修改 sizes 数组
  • matrixmultiply_block_size_change.cu: 修改 block_sizesmatrix_sizes

Q4: Python 脚本报错

A: 安装依赖:

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 数据可视化
  • ✓ 详细的文档和模板
  • ✓ 快速测试工具

祝实验顺利!