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 线程模型对齐。

Informations de source

Dépôt
sss-hust/awesome-kernel-skills-cn
Dernière activité de la source
14 avril 2026 à 13:11
Langue détectée de SKILL.md
chinois
Étoiles
0
Forks
0

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
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
Voir sur GitHub