.agents/skills/paddle-design-phi-kernel/SKILL.md
PHI kernel 在 KernelFactory 单例中以两级 flat_hash_map 存储:
api_name (string) → KernelKeyMap
├── KernelKey_1 → Kernel_1
├── KernelKey_2 → Kernel_2
└── ...
"add", "matmul")→ KernelKeyMapKernelKey → Kernel 对象(包含函数指针、参数元信息)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 实现VjpInterface / DecompVjpInterface → call_decomp_vjp() → details.h 实现| 场景 | 参考文档 |
|---|---|
| 注册新 kernel / 理解宏展开 | references/kernel-registration.md |
| 调试 kernel 选择 / 分派失败 | references/kernel-selection.md |
| 理解 YAML → 代码生成流程 | references/codegen-pipeline.md |
| 开发组合算子 / VJP | references/combination-mechanism.md |
paddle/phi/kernels/paddle/phi/core/kernel_registry.hpaddle/phi/core/kernel_factory.h, kernel_factory.ccpaddle/phi/ops/yaml/ops.yaml, backward.yamlpaddle/phi/api/generator/ — api_gen.py, backward_api_gen.py, tensor_operants_gen.pypaddle/fluid/primitive/decomp_rule/decomp_rule/composite.hpaddle/fluid/primitive/decomp_rule/decomp_vjp/details.h