Skip to main content

gpu-opt-tier1-block-tiling

为 GPU kernel(Triton/CUDA/HIP)选择 block 或 tile 尺寸、warp 数、pipeline stage, 以及面向 L2 的 block 分组策略。 适用于 autotune matmul 类 kernel、调 occupancy,或让 tile 几何与 M/N/K 规模及 NVIDIA/AMD 线程模型对齐。

Datos de origen

Repositorio
sss-hust/awesome-kernel-skills-cn
Última actividad en el origen
14 de abril de 2026 a las 13:11
Idioma detectado de SKILL.md
chino
Estrellas
0
Forks
0

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
gpu-opt-tier1-block-tiling
description
为 GPU kernel(Triton/CUDA/HIP)选择 block 或 tile 尺寸、warp 数、pipeline stage, 以及面向 L2 的 block 分组策略。 适用于 autotune matmul 类 kernel、调 occupancy,或让 tile 几何与 M/N/K 规模及 NVIDIA/AMD 线程模型对齐。
# Tier 1:Block、Tile 与 Warp 配置 这个技能对应 [AutoKernel](https://github.com/RightNow-AI/autokernel) 手册中的 Tier 1: 先把 launch geometry 配对,再去做更细的内存微优化。 ## `BLOCK_SIZE_M / N / K` - **资格约束**:对于 tensor/MMA 路径,NVIDIA 上 `BLOCK_K` 通常要求 `>=16`,AMD CDNA 的 MFMA 常要求 `>=32` - **方形还是矩形**:更宽的 `BLOCK_N` 有利于复用 B,更高的 `BLOCK_M` 有利于复用 A,但都要和寄存器或 SMEM 压力权衡 - **小 M 或小 N**:优先用更小的 tile,例如 `64x64` 或 `64x128`,确保 block 数足够填满 GPU - **很大的 K**:更大的 `BLOCK_K` 能摊薄加载开销,但可能损害 occupancy - **瘦长矩阵**:优先照顾更长的维度,避免 warp 空转 ## `num_warps` 与 `num_stages` - **`num_warps`**:更多 warp 能隐藏延迟,但也会增加寄存器占用,甚至降低 occupancy。常见搜索空间是 `2, 4, 8` - **AMD 注意点**:wavefront 是 64,所以 `num_warps=4` 就是每个 block 256 线程 - **`num_stages`**:NVIDIA 上的软件流水通常希望 `>=2`;而 HIP/ROCm 上 `num_stages` 必须 `>=1` - **联动关系**:`num_stages` 高、tile 又大时,常常会触发寄存器溢出 ## Occupancy 调优 - 如果 DRAM/L2 指标偏低,而 warp 常因内存停顿,先试更多 warp 或更小的 tile - 如果 occupancy 已经很高但计算单元仍然吃不饱,就该转向更大的 tile,或者进入后续 tier 的指令级优化 ## `GROUP_SIZE_M`(面向 L2 的分块) - 在沿 N 方向推进之前,先处理连续的 `GROUP_SIZE_M` 个 block 行,这样 B tile 更容易留在 L2 中 - 常见搜索空间是 `4, 8, 16`,其中 `8` 往往是比较稳妥的默认值 ## 常见 autotune 搜索空间 | 平台 | `BLOCK_M×N×K`(示例) | `num_warps` | `num_stages` | 说明 | |--------|-------------------------|-----------|------------|--------| | NVIDIA | 每个维度常见 `64–256`,K 常为 `32–64` | `2, 4, 8` | `2–5` | WGMMA kernel 还需要结合架构上限 | | AMD | `64–256`,K 常为 `32` | `2, 4, 8` | `1–3` | 支持时可以加入 `waves_per_eu`(`2–8`) | ## AMD:wavefront-64 - 一个 warp 是 64 线程,而不是 32 - 在与线程映射敏感的维度上,对齐到 64 的倍数通常更自然 - 再配合 `waves_per_eu`:compute-bound 可从 `2–4` 起步,memory-bound 可从 `4–8` 起步 ## 面向 Triton 的默认起点 - NVIDIA 的 GEMM 类 kernel 常从 `128x256x64`、`128x128x32`、`64x128x32` 起步,并设置 `GROUP_SIZE_M=8` - AMD CDNA 常从 `128x128x32` 或 `256x128x32` 起步;如果 occupancy 偏差,还应至少补一个 `64x64x32` 配置 - 总线程数要符合硬件上限;在 AMD 上,按 64 的倍数组织能减少尾部发散 ## 可整除性、padding 与 grid 覆盖 - 如果 `M/N/K` 不能被 tile 尺寸整除,就要加 mask 或做边缘 epilogue 处理 - 优先选择和 MMA 指令形状对齐的因子,例如 16 或 32 ## 与其他技能的关系 - 这个技能和 `gemm-kernel-optimization` 搭配使用,前者给决策逻辑,后者给具体配置组合 - 如果 Tier 1 已经到平台期,就转到 `tier2-memory-access` ## Agent 指令 1. 先读取 `M/N/K`,选择适合问题规模的 tile 尺度 2. 围绕 `BLOCK_*`、`num_warps`、`num_stages` 建一个紧凑的配置网格 3. 对 GEMM 类 kernel,始终扫描 `GROUP_SIZE_M` 4. 在固定最佳配置前,确认 occupancy 和寄存器或 SMEM 没超预算 5. 如果后面仍是带宽主导,就升级到 Tier 2
Ver en GitHub