Skip to content

[EPIC] 3-compiler: kvlang 编译器 —— 前端算子表示 + 后端绑定 + 算子版本化(核心契约与 runtime 高版本优先) #273

Description

@miaobyte

背景

引擎 deepx-cpu-compute#1,main-runtime + CPU tensor myrwircaps)已能把后端算子按 deepx/<author>·<op>(如 deepx/miaobyte·argmaxdeepx/cblas·matmul)注册为 def rwir。但 kvlang 尚缺 前端算子表示 与把前端代码对接引擎 rwir 的 编译器

目标(用户原述):deepx 表示代码

v0:[]float64 = [1.0, 3.0, 2.0, 7.0, 4.0]
axis0:[]int64 = [0]
deepx·argmax(v0, axis0, false) -> vmax

编译为执行代码

v0:[]float64 = [1.0, 3.0, 2.0, 7.0, 4.0]
axis0:[]int64 = [0]
deepx/miaobyte·argmax(v0, axis0, false) -> vmax

编译器与 layout 的区别:编译器直接读 /lib,检查当前注册的所有后端算子实现后,再生成新函数。复合算子 rwfunc softmax → 融合版 rwfunc softmax.1(类 .so.1 版本后缀),runtime 调 softmax 时优先高版本。

三阶段定位

layout(o0,检查+布局+降级,不优化)→ 编译器(读 /lib 优化)→ runtime(纯解释)。spec 卷 00 早已用「扩展编译器」一词并与 layout(o0) 对置(00-导言/01-范围与一致性.kv:18),本工作即定义它。编译器不属语言核心 runtime,是计算引擎(deepx-cpu-compute/deepx-gpu-compute)的组成(延续 #189、执行模型.kv:7)。与 #202「layout 不是编译器」正交互补。

本 issue(kvlang 核心侧)范围 —— 只做契约,编译器本体在 deepx-cpu-compute

  • spec 卷 06-编译器语义(已起草,待评审/落库):01-编译器定位02-前端算子与后端算子03-算子版本化与高版本优先,并在 00-导言/01 范围登记卷 06。
  • 前端算子(抽象)表示/lib/<域>·<op>deepx·argmax),schema-only def rwir + abstract 标记;无 myrwircaps 兑现方。runtime 遇未编译的抽象算子调用 → 明确诊断「抽象算子未绑定后端,需先经编译器」(不静默 handoff / 不回退 NameError)。
  • runtime 高版本优先解析2-runtime):handle_call 构出 func_key=/lib/<pkg>·<name> 后、读 [0,0] 前,读基键版本标记,有则重定向到 /lib/<pkg>·<name>.<maxN>,无则用基键(向后兼容)。对 caller 透明,按基名缓存冻结。挂钩点 runtime/src/kvcpu.c handle_call(构 func_key 之后,约 kvcpu.c:340-348)。
  • 锚例tutorial/16-compiler/backend_bind.kvop_version.kv(三后端逐字节一致)。

关键设计裁决

  1. 版本记法用 .<N> 而非 ·<N>(用户裁定):· 是包/成员分隔符,rfind_sep 会把 softmax·1 误拆为 pkg=softmax,name=1. 不是分隔符(词法上并入标识符、handle_call 不据它拆 pkg/name),故 softmax.1 整体即 name,无歧义,且与既有 .src 后缀约定一致。版本键 /lib/<pkg>·<name>.<N>
  2. 后端选择策略:显式 author 保留 → 默认 author 表(authormap 式,matmul→cblas/argmax→miaobyte)→ 唯一可用 → 皆无则诊断。策略本体在计算引擎侧。
  3. 后端绑定 vs 版本化正交:绑定改调用点 opcode(前端→后端);版本化改被调实现选择(基→高版本)。

对照 PyTorch(勘察结论)

编译期读 /lib 静态绑定后端 ≈ TorchInductor lowering(非 c10::Dispatcher 运行期 device 派发);前端算子 ≈ TORCH_LIBRARY m.def,后端算子 ≈ TORCH_LIBRARY_IMPL(域,author,m);复合算子 ≈ CompositeImplicitAutograd+torch/_decomp;融合 ≈ Inductor Scheduler;版本择优 ≈ autotune 缓存最优(kvlang 把它显式化为静态版本号)。

关联

deepx-cpu-compute 侧实现见 array2d/deepx-cpu-compute#2(前端算子目录 + 编译器 pass)。#202 #189 #166 #1

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    EPIC大特性/父 issue,含多个子任务,持续迭代

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions