leaves v2.4.0
主题:BackendAuto 第二轮 — opt-in profiling 探测。
Highlights
tree.ProfileBackend:对实际 workload warm-up + 计时 Native / BornCPU / BornGPU,返回各后端实测 ns/op 与最快推荐。给 BackendAuto 2.0 启发式阈值补上数据驱动选项。- 不破坏 2.0 决策表:
SelectBackendExplained(batch 64/256、稀疏 0.15)行为零变更;profiling 是 opt-in。 - 可解释:结果带 Rule 码(
profile_native|born_cpu|born_gpu|none_ok|invalid)+ 含各后端 ns/op 的 Reason —— 遵守docs/backend-auto.md「任何自动选择必须能被 Rule 码解释」 原则。
Usage
// 用真实批量样本测一遍,拿测量证据替代启发式
res := tree.ProfileBackend(caps, sampleVals, nrows, ncols, 20) // iters 建议 ≥10
fmt.Println(res.Reason)
// "profiling: native fastest at 410 ns/op (native=410 born_cpu=9120 born_gpu=0)"
opts.Backend = res.Pick // 用最快后端
// 也可直接读 res.Native.NsPerOp / res.BornCPU.NsPerOp / res.BornGPU.NsPerOpDesign notes
- 为何 opt-in 而非接入 Auto:profiling 需要代表性批量样本(调用方才知道真实输入),且首调用有计时延迟。强行接入
BackendAuto会引入「样本从哪来」+「首调用延迟」两个难题。故保持 2.0 决策表为默认,profiling 作为需要测量证据时的显式工具。 - 公平性:各后端 nEstimators=0(全量树)、同输入、同 warm-up(2 轮)。
- 安全:Native 始终参与计时(golden 不变);cat-small 森林或无 WebGPU 的后端
Ok=false自动排除。
Verification
TestProfileBackendPicks:Pick 与实测最快一致(断言一致性,非机器相关具体值)。TestProfileBackendInvalid:非法输入 →profile_invalid回落 Native。TestProfileBackendNoBornOnUnsupported:cat-small 森林 → Born 排除、Native 选中。- tree 全量、docs gate、build、6-linter 门禁全绿。
Compatibility
- Breaking:无。新增
ProfileBackend函数 +ProfileResult/BackendTiming类型;既有SelectBackend/SelectBackendExplained不变。
Recommended API
- 默认推理选型:
BackendAuto(2.0 决策表,无需样本) - 数据驱动选型:
ProfileBackend(传样本,拿测量) - 详见
docs/backend-auto.md§第二轮