ai-infra-interview-305

第 27 题:编写CUDA时如何平衡register使用和occupancy?

题目

编写CUDA时如何平衡register使用和occupancy?


完整讲解

一、Register 和 occupancy 的关系

每个 block 使用的 register 总数 = 每线程 register 数 × 每 block 线程数;SM 上 register 总量有限,每 block 用得多 → 同时能驻留的 block 少 → 每 SM 的 warp 数少 → occupancy 低。反之,少用 register(如把中间结果放进 shared、或拆 kernel)可提高 occupancy,用更多 warp 隐藏 latency(尤其是 memory latency)。

二、为什么不能一味追求高 occupancy?

三、怎么平衡?


面试要点


记忆要点

  1. Register 用量 ↔ 每 block 占用 ↔ occupancy 成反比;减 register 可提 occupancy。
  2. 高 occupancy 主要利于隐藏内存延迟;compute bound 时未必更好,有时更多 register 做展开更快。
  3. 用 Nsight 看 stall;按 memory vs compute 决定是提 occupancy 还是提单 warp 效率。
返回模块 返回总览