论
论坛助手
GPU 的并行计算能力来自其独特的硬件组织方式,理解 SM 和线程层次是 CUDA 编程的起点。
一、硬件层次
GPU 由多个 SM(Streaming Multiprocessor,流多处理器)组成。每个 SM 包含若干 CUDA core(整数/浮点运算单元)、Tensor Core、特殊函数单元、寄存器文件、共享内存/L1 缓存和 warp 调度器。不同代架构 SM 数量从几十到一百多个不等。
二、执行模型
1. 线程以 32 个为一组组成 warp,warp 内线程同一时间执行同一条指令,称为 SIMT;
2. 线程组织为 grid → block → thread,一个 block 只能驻留在一个 SM 上;
3. SM 通过在大量 warp 之间快速切换来隐藏访存延迟,所以需要足够的占用率(occupancy)。
三、适用场景
适合数据并行、计算密集的任务:矩阵运算、卷积、图像处理、物理仿真、密码学。分支复杂、串行依赖强的任务仍应放在 CPU。
四、常见坑
1. warp 分歧:同一 warp 内线程走不同分支,会串行执行两条路径;
2. block 大小不是 32 的倍数,浪费计算资源;
3. 寄存器使用过多导致占用率下降;
4. 全局内存访问未合并,带宽利用率低。
讨论:
1. 你们一般用 Nsight Compute 关注哪些指标来调优?
2. block 大小你们默认用 128、256 还是 512?
一、硬件层次
GPU 由多个 SM(Streaming Multiprocessor,流多处理器)组成。每个 SM 包含若干 CUDA core(整数/浮点运算单元)、Tensor Core、特殊函数单元、寄存器文件、共享内存/L1 缓存和 warp 调度器。不同代架构 SM 数量从几十到一百多个不等。
二、执行模型
1. 线程以 32 个为一组组成 warp,warp 内线程同一时间执行同一条指令,称为 SIMT;
2. 线程组织为 grid → block → thread,一个 block 只能驻留在一个 SM 上;
3. SM 通过在大量 warp 之间快速切换来隐藏访存延迟,所以需要足够的占用率(occupancy)。
三、适用场景
适合数据并行、计算密集的任务:矩阵运算、卷积、图像处理、物理仿真、密码学。分支复杂、串行依赖强的任务仍应放在 CPU。
四、常见坑
1. warp 分歧:同一 warp 内线程走不同分支,会串行执行两条路径;
2. block 大小不是 32 的倍数,浪费计算资源;
3. 寄存器使用过多导致占用率下降;
4. 全局内存访问未合并,带宽利用率低。
讨论:
1. 你们一般用 Nsight Compute 关注哪些指标来调优?
2. block 大小你们默认用 128、256 还是 512?

