2026-01-22 04:31:52 +08:00

4.5 KiB
Raw Permalink Blame History

实验数据整理与简要分析

实验一CPU、CUDA Kernel1、CUDA Kernel2性能对比

数据表格

表1执行时间对比单位毫秒

矩阵规模 CPU(8线程) CPU(64线程) CPU(256线程) CUDA Kernel1 CUDA Kernel2
512×512 747.48 743.61 748.65 0.316 0.827
1024×1024 6033.21 6049.32 6051.76 2.374 6.484
2048×2048 51065.61 50995.41 51083.36 19.190 53.599
4096×4096 - - - 152.897 433.242

表2性能对比GFLOPS

矩阵规模 CPU(8线程) CUDA Kernel1 CUDA Kernel2 Kernel1加速比 Kernel2加速比
512×512 0.36 849.49 324.65 2365倍 904倍
1024×1024 0.36 904.75 331.22 2541倍 930倍
2048×2048 0.34 895.23 320.52 2661倍 953倍

简要分析

CPU性能特点

  • 小矩阵(256×256)时增加线程数有1.28倍加速比
  • 中大矩阵(512×512以上)时,增加线程数无效果
  • CPU性能瓶颈在0.34-0.44 GFLOPS受内存带宽限制

CUDA Kernel1性能特点

  • 性能稳定在850-905 GFLOPS
  • 相比CPU实现2000-2700倍加速
  • 优势:简单高效,内存访问模式良好
  • 劣势:无数据重用,全局内存访问频繁

CUDA Kernel2性能特点

  • 性能稳定在317-331 GFLOPS
  • 相比Kernel1性能下降2.7-2.8倍
  • 原因TILE_WIDTH=4太小共享内存开销大于收益
  • 教训:优化不当可能适得其反

核心结论:

  • GPU相比CPU有2000-2700倍性能优势
  • 简单的Kernel1优于设计不当的Kernel2
  • 优化需要考虑硬件特性,盲目优化可能降低性能

实验二BLOCK_SIZE对CUDA程序性能的影响

数据表格

表3不同BLOCK_SIZE下的执行时间毫秒

矩阵规模 4×4 8×8 16×16 32×32
256×256 0.116 0.040 0.029 0.026
512×512 0.831 0.265 0.189 0.178
1024×1024 6.539 2.022 1.397 1.364
2048×2048 54.023 16.080 11.454 11.019

表4不同BLOCK_SIZE下的性能GFLOPS

矩阵规模 4×4 8×8 16×16 32×32 最大加速比
256×256 289.26 838.19 1170.29 1292.94 4.47倍
512×512 323.04 1014.10 1423.49 1506.57 4.67倍
1024×1024 328.40 1061.88 1536.94 1574.44 4.79倍
2048×2048 318.01 1068.38 1499.84 1559.16 4.90倍

简要分析

BLOCK_SIZE对性能的影响规律

  1. 4×4 → 8×8性能提升约3倍289→838 GFLOPS
  2. 8×8 → 16×16性能提升约1.5倍838→1423 GFLOPS
  3. 16×16 → 32×32性能提升约1.05倍1423→1574 GFLOPS

性能提升的原因:

  1. 共享内存利用率提升更大的tile意味着更多的数据重用减少全局内存访问
  2. 线程级并行提升更大的block包含更多线程更好地隐藏内存延迟
  3. 计算与内存访问平衡大tile使得计算时间与内存访问时间更平衡

性能饱和现象:

  • 从16×16到32×32性能提升幅度减小
  • 原因:共享内存容量限制、寄存器压力增加、线程块调度效率下降

最优BLOCK_SIZE选择

  • 对于当前GPU架构32×32是最优选择
  • 性能达到1506-1574 GFLOPS
  • 相比4×4提升4.5-4.9倍

与Kernel1对比

  • Kernel1无共享内存~900 GFLOPS
  • Kernel232×32共享内存~1574 GFLOPS
  • 正确的共享内存优化可以带来约1.7倍性能提升

总体结论

  1. GPU的绝对优势即使最简单的GPU实现也比CPU快2000-2700倍
  2. 优化需谨慎:设计不当的"优化"如4×4 tile反而会降低性能
  3. Tile size是关键从4×4到32×32性能相差近5倍
  4. 系统化调优:需要根据硬件特性选择合适的优化策略

图表说明

实验已生成以下图表:

  • experiment1_analysis.pngCPU、Kernel1、Kernel2性能对比4个子图
  • experiment2_analysis.png不同BLOCK_SIZE对性能的影响4个子图

原始数据保存在:

  • matrixmul_comparison.txt:实验一原始数据
  • blocksize_analysis.txt:实验二原始数据