学习资料
2026 夏季 InfiniTensor 训练营 CUDA 编程 2:《性能模型与逐元素优化》

7 月 21 日,2026 夏季 InfiniTensor 训练营 CUDA 编程方向第二课《性能模型与逐元素优化》开讲。
前置课程《并行编程导论与 CUDA 入门》详细讲解了 CUDA 编程基础、线程层级结构与向量加法示例。但也发现了一个残酷的现实:数据传输耗时远超计算本身

本节课我们将深入剖析性能瓶颈的根源,掌握量化分析工具,并通过“向量化”这一核心优化手段,带你突破内存墙限制,实现性能的提升。

温故知新:从现象到本质

  • 上节回顾

  • 性能痛点:为何 GPU 满载时,H2D/D2H 传输耗时仍远大于 Kernel 计算?

  • 核心矛盾:CPU-GPU 通信带宽 vs GPU 内部算力,谁是真正的瓶颈?

内存墙与 Roofline 模型

理解“内存墙” (Memory Wall)

  • 摩尔定律的失衡:处理器性能增速 vs 内存带宽增速的巨大 Gap
  • 冯·诺依曼架构局限:存储与计算分离导致的频繁数据搬运
  • 通信:PCIe/NVLink 带宽增长滞后于算力增长

Roofline 模型详解

  1. 核心坐标:计算强度 (Operational Intensity, FLOPS/Byte) vs 性能 (FLOPS)

  2. 两大区域

    • 🔴 Memory Bound(访存密集型):受限于内存带宽 (β × I)
    • 🟢 Compute Bound(计算密集型):受限于峰值算力 (π)

  1. 关键拐点 (Ridge Point):达到硬件理论最高性能所需的最低计算强度 ($I_{max} = pi / eta$)

  2. 实战分析:以 A100 为例,量化分析 FP32 向量加法为何是典型的访存密集型任务

Nsight Compute (NCU)

  1. 工具定位:区别于 Nsight Systems,NCU 专注于 Kernel 级微观性能分析
  2. 核心功能
    • Summary 页:快速查看吞吐率与运行时间
    • Details 页:GPU Speed of Light Throughput 与 Roofline 图表自动生成
  3. 实测验证:通过 NCU 确认向量加法的内存利用率高达 70%,验证访存瓶颈假设

向量化访存 (Vectorization)

什么是向量化?

  • SIMD vs SIMT:单指令多数据流与单指令多线程的协同而非冲突
  • 核心思想:单次指令读写多个标量数据,提升内存带宽利用率

CUDA 内置向量类型实战

  • 数据类型float2float4 等内置向量化访存类型
  • 代码重构:使用模板函数 + __device__ 封装通用加法逻辑

  • 性能实测float4 相比 float 性能显著提升,内存利用率逼近 90%

避坑:向量化的边界

  1. 并非越大越好:为何 Vec8 反而比 Vec4 慢?(寄存器溢出 Register Spilling)

  1. float3 为何比 float 慢?
    • 内存对齐 (Memory Alignment):非 2 的幂次导致无法对齐内存事务边界

  • 内存合并 (Memory Coalescing):Warp 内连续访问 + 对齐 = 高效合并

进阶优化:半精度计算与 SIMD 指令

半精度(half

  1. 降低访存压力:FP16 (half) 数据类型原理与优势

  2. 半精度并行加法示例:

  • 头文件与类型转换 (__float2half, __half2float)
  • 舍入模式解析 (RD/RU/RN/RZ)

  1. 向量化计算:使用 __hadd2 实现真正的 SIMD 半精度加法

  2. Roofline 再分析:FP16 如何同时实现“右移”(提高计算强度)与“上移”(利用 Tensor Core 提升天花板)

❓️课后思考题

  1. 若必须使用 float3 结构,如何优化其内存访问性能?
  2. 除内置向量类型外,还有哪些方式可实现向量化访存?(提示:与思考题1相关)

加入训练营

📺完整课程内容,请观看直播或查看课程回放:

InfiniTensor 官网https://www.infinitensor.com

B站直播: InfiniTensor 官方直播间

视频号直播: InfiniTensor 视频号预约

答疑交流: 训练营官方社群⬇️

关注与交流