# Paddle Phi Kernel

> Use when working with Paddle's PHI kernel system: registering new kernels, debugging kernel selection/dispatch, understanding code auto-generation from YAML, or implementing operator decomposition via the combination mechanism.

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

---


# PHI Kernel 体系总览

## Kernel 两级 map 结构

PHI kernel 在 `KernelFactory` 单例中以两级 `flat_hash_map` 存储：

```
api_name (string)  →  KernelKeyMap
                        ├── KernelKey_1  →  Kernel_1
                        ├── KernelKey_2  →  Kernel_2
                        └── ...
```

- 第一级：算子名称（如 `"add"`, `"matmul"`）→ `KernelKeyMap`
- 第二级：`KernelKey` → `Kernel` 对象（包含函数指针、参数元信息）

## KernelKey 哈希结构

`KernelKey` 由 Backend、DataLayout、DataType 三要素组成，哈希编码为 32-bit 整数：

```
bit:  31 ─────── 20 | 19 ─── 12 | 11 ── 8 | 7 ── 0
      Extended       DataType    Layout    Backend
```

- `Backend`(bit 0-7): CPU / GPU / GPUDNN / XPU / OneDNN 等
- `DataLayout`(bit 8-11): NCHW / NHWC / ANY 等
- `DataType`(bit 12-19): FLOAT32 / FLOAT16 / BFLOAT16 / INT64 等
- `Extended`(bit 20-31): 保留位，用于未来扩展

## 代码生成管线概览

PHI 体系通过 YAML 驱动代码生成，覆盖三个子系统：

| 子系统 | 生成器 | 产出物 |
|--------|--------|--------|
| C++ API 层 | `api_gen.py` | `paddle/phi/api/lib/api.cc` |
| 动态图函数层 | `eager_gen.py` | `dygraph_functions.cc`, `nodes.cc` |
| Python-C 映射层 | `python_c_gen.py` | `eager_op_function.cc` |

输入 YAML：`ops.yaml`, `backward.yaml`, `fused_ops.yaml`, `sparse_ops.yaml`, `op_compat.yaml`

## 组合算子机制

将 1061 个原生算子分解为约 200 个基础算子（primitive operators），降低分布式 / 编译器 / 新硬件适配成本。

- **前向分解**：`DecompInterface` → `call_decomp_rule()` → `composite.h` 实现
- **反向分解**（VJP）：`VjpInterface` / `DecompVjpInterface` → `call_decomp_vjp()` → `details.h` 实现
- **CustomVJP**：为 sigmoid、log_softmax 等数值敏感算子提供手写反向

## 什么场景看什么文件

| 场景 | 参考文档 |
|------|----------|
| 注册新 kernel / 理解宏展开 | [references/kernel-registration.md](references/kernel-registration.md) |
| 调试 kernel 选择 / 分派失败 | [references/kernel-selection.md](references/kernel-selection.md) |
| 理解 YAML → 代码生成流程 | [references/codegen-pipeline.md](references/codegen-pipeline.md) |
| 开发组合算子 / VJP | [references/combination-mechanism.md](references/combination-mechanism.md) |

## 社区源码链接（L3）

- PHI kernels 根目录: `paddle/phi/kernels/`
- Kernel 注册宏: `paddle/phi/core/kernel_registry.h`
- KernelFactory: `paddle/phi/core/kernel_factory.h`, `kernel_factory.cc`
- YAML 定义: `paddle/phi/ops/yaml/ops.yaml`, `backward.yaml`
- 代码生成脚本: `paddle/phi/api/generator/` — `api_gen.py`, `backward_api_gen.py`, `tensor_operants_gen.py`
- 组合算子前向: `paddle/fluid/primitive/decomp_rule/decomp_rule/composite.h`
- 组合算子反向: `paddle/fluid/primitive/decomp_rule/decomp_vjp/details.h`

