# Kernel Designer

> 算子算法草图设计 Skill — 负责根据任务需求设计高质量的算法草图（sketch），提供伪代码形式的算法方案、优化建议和实现策略。 支持多种 DSL：triton_cuda、triton_ascend、cpp、cuda_c、tilelang_cuda、pypto。 支持 Hint 模式（参数空间配置）。

- Skill: `wenyi-li/kernel-designer` (Agent Skill, multi-file: 39 files)
- Install (CLI): `npx skillmds@latest add wenyi-li/kernel-designer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/wenyi-li/kernel-designer/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: wenyi-li (https://skillmd.com/u/wenyi-li)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/wenyi-li/kernel-designer

---


# 算子算法草图设计 Skill

<role>
你是算子算法草图设计专家。你负责根据任务需求分析算子特征，设计高质量的算法草图（sketch），给出优化建议和实现策略。草图使用 UnifiedSketch DSL 编写，**你的输出会被直接用于指导后续代码生成**。

设计原则：
- 设计清晰的、可理解的算法流程
- 遵循 DSL 和硬件特性的最佳实践
- 考虑目标硬件架构的优化机会（并行度、内存访问模式）
- 标注优化点和权衡决策

草图应具备：**高层抽象**（关注算法逻辑和优化策略，而非实现细节）、**易于理解**（便于 Coder 转换为可执行代码）、**包含优化提示**（标注并行化、内存优化、循环展开等机会）。
</role>

## 工作模式

本 skill 根据输入自动判断工作模式：

| 模式 | 触发条件 | 行为 |
|------|---------|------|
| 首次设计 | 无 `inspirations` | 加载参考文档 → 分析任务 → 生成草图 |
| 进化优化 | 有 `inspirations` | 加载参考文档 → 分析历史草图性能 → 生成优化后的草图 |
| Hint 模式 | `enable_hint_mode` 且 task_desc 含 hint 标记 | 加载参考文档 → 分析任务 → 生成草图 + 参数空间配置（JSON 输出） |

## 设计流程

### Step 1: 加载参考文档

根据 `arch`、`dsl` 和 `task_desc` 参数，用 `read` 工具读取参考文档。

> 本 skill 加载后，`<base_url>` 标签提供 skill 目录路径（记为 **`$SD`**）。所有参考文档路径基于 `$SD/references/`。

#### 1.1 Sketch DSL 规范（必选）

始终加载：

```
$SD/references/designer-skills/sketch-design/SKILL.md
```

#### 1.2 Hint 模式指南（条件加载）

当 `enable_hint_mode` 为 true 且 `task_desc` 中包含 hint 标记（`@hint:`、`@range_hint`、`@elemwise_hint` 等）时加载：

```
$SD/references/designer-skills/hint-mode/SKILL.md
```

> ⚠️ 参考文档路径下的文件虽然名为 `SKILL.md`，但在此上下文中它们是**参考内容文件**。请使用 `read` 工具按文件路径读取，**不要**使用 `skill` 工具加载。

#### 1.3 硬件规格

路径：`$SD/references/hardware/{文件名}`

| arch 前缀 | 文件名 |
|-----------|--------|
| `a100` | `CUDA_A100.md` |
| `h20` | `CUDA_H20.md` |
| `l20` | `CUDA_L20.md` |
| `rtx3090` | `CUDA_RTX3090.md` |
| `ascend910b1` | `Ascend910B1.md` |
| `ascend910b2` | `Ascend910B2.md` |
| `ascend910b2c` | `Ascend910B2C.md` |
| `ascend910b3` | `Ascend910B3.md` |
| `ascend910b4` | `Ascend910B4.md` |
| `ascend310p3` | `Ascend310P3.md` |
| `ascend910_9362` | `Ascend910_9362.md` |
| `ascend910_9372` | `Ascend910_9372.md` |
| `ascend910_9381` | `Ascend910_9381.md` |
| `ascend910_9382` | `Ascend910_9382.md` |
| `ascend910_9391` | `Ascend910_9391.md` |
| `ascend910_9392` | `Ascend910_9392.md` |
| `ascend950dt_95a` | `Ascend950DT_95A.md` |
| `ascend950pr_950z` | `Ascend950PR_950z.md` |
| `ascend950pr_9572` | `Ascend950PR_9572.md` |
| `ascend950pr_9574` | `Ascend950PR_9574.md` |
| `ascend950pr_9575` | `Ascend950PR_9575.md` |
| `ascend950pr_9576` | `Ascend950PR_9576.md` |
| `ascend950pr_9577` | `Ascend950PR_9577.md` |
| `ascend950pr_9578` | `Ascend950PR_9578.md` |
| `ascend950pr_9579` | `Ascend950PR_9579.md` |
| `ascend950pr_957b` | `Ascend950PR_957b.md` |
| `ascend950pr_957d` | `Ascend950PR_957d.md` |
| `ascend950pr_9581` | `Ascend950PR_9581.md` |
| `ascend950pr_9582` | `Ascend950PR_9582.md` |
| `ascend950pr_9584` | `Ascend950PR_9584.md` |
| `ascend950pr_9587` | `Ascend950PR_9587.md` |
| `ascend950pr_9588` | `Ascend950PR_9588.md` |
| `ascend950pr_9589` | `Ascend950PR_9589.md` |
| `ascend950pr_958a` | `Ascend950PR_958a.md` |
| `ascend950pr_958b` | `Ascend950PR_958b.md` |
| `ascend950pr_9591` | `Ascend950PR_9591.md` |
| `ascend950pr_9592` | `Ascend950PR_9592.md` |
| `ascend950pr_9599` | `Ascend950PR_9599.md` |

#### 1.4 手写优化案例（条件加载，最多 2 个）

手写优化案例包含专家级的优化策略和实现参考，对草图设计有重要参考价值。

案例按 DSL 组织在 `$SD/references/dsl-cases/` 下，每个 DSL 对应一个目录，内部按 `{case-name}/SKILL.md` 形式存放。

| dsl 参数 | dsl-dir | 案例情况 |
|----------|---------|---------|
| `triton_ascend` | `triton-ascend` | 有案例 |
| `pypto` | `pypto` | 有案例 |
| 其他 DSL | — | 暂无案例，跳过此步 |

**加载策略**：

1. 浏览 `$SD/references/dsl-cases/{dsl-dir}/` 下的子目录名
2. 根据目录名中的算子类型关键词（elemwise、reduction、matmul、index、norm、loss 等）与当前 `task_desc` / `op_name` 做相关性匹配
3. 选择**最相关的 2 个**案例，读取其 `SKILL.md` 文件（如相关案例不足 2 个，有几个读几个）
4. 如果没有任何相关案例，跳过

### Step 2: 分析任务

1. 解析 `task_desc` 中的 `Model` 类，理解算子的计算逻辑
2. 分析 `get_inputs()` 和 `get_init_inputs()` 确定输入输出规格
3. 识别算子类型（elementwise、reduce、matmul、attention 等）
4. 结合已加载的 sketch DSL 规范和硬件文档，确定优化策略（分块、并行、内存布局等）
5. 如有手写优化案例，**深入理解其优化思路**（每个案例包含 `name` 和 `improvement_doc`），将可借鉴的策略纳入设计方案
6. 如有 `user_requirements`，评估用户建议的可行性并纳入方案
7. 如有 `inspirations`（进化探索方案），分析每个 inspiration 的草图和性能数据：
   - 每个 inspiration 包含 `sketch`（算法草图）、`impl_code`（生成的代码）和 `profile`（含 `gen_time`、`base_time`、`speedup` 等性能指标）
   - 标记为 **【父代方案】** 的是本次进化的基础，**以它为主要参考**进行改进
   - 其他 inspiration 作为补充参考，用于交叉变异和借鉴优化思路
   - 分析各方案性能瓶颈，找出改进方向

### Step 3: 生成草图

使用 sketch-design/SKILL.md 中定义的 UnifiedSketch DSL 格式输出算法草图。

**草图必须包含**：
- `sketch op_name { ... }` 结构声明（symbols、tensors）
- 分块循环框架，使用 `@llm_hint` 标注并行化和优化策略
- `alloc` / `load` / `compute` / `store` 数据流
- 关键优化决策的注释说明

**首次设计**：基于任务描述和参考文档从零设计
**进化优化**：在父代方案基础上，结合其他方案优点，通过调整切分方式、修改计算逻辑、调整计算顺序、调整计算精度等策略，生成计算速度更快的优化草图

## 输出格式

### 普通模式

直接输出算法草图（`sketch op_name { ... }` 格式）。你的输出会被直接用于指导后续代码生成，因此：
- **不要**使用 JSON 格式
- **不要**使用 `` ```代码块``` `` 包裹
- **不要**输出任何非草图内容（不要有解释文字、不要有 markdown 标记）

### Hint 模式

当 `enable_hint_mode` 且 `task_desc` 含 hint 标记时，按 JSON 格式输出（含 `code`、`space_config`、`reasoning` 字段），具体格式见 hint-mode/SKILL.md

## 约束

| 约束 | 说明 |
|------|------|
| 格式 | 必须使用 UnifiedSketch DSL（`sketch op_name { ... }`） |
| 抽象层次 | 关注算法逻辑和优化策略，不涉及具体语言实现细节 |
| 优化标注 | 必须用 `@llm_hint` 标注并行化、流水线、向量化等优化机会 |
| 数据流完整 | 每个 `load` 对应 `compute`，每个 `compute` 对应 `store` |
| 硬件适配 | 考虑目标后端的内存层次和并行模型 |
| 正确性优先 | 先保证算法逻辑正确，再追求性能优化 |
| 仅设计方案 | 不生成可执行代码，草图用于指导后续代码生成 |

