Skip to content

2-runtime/prime_sieve bench:解释执行每操作 KV 往返 → 计算密集慢 Python ~138,500×(关联 #116 寻址开销) #194

Description

@miaobyte

结论先行

同一份试除法(trial division,嵌套 while,求 ≤200 的质数)在三种实现上的耗时:

实现 用时 相对 Rust
Rust (rustc -O) 24.2 µs
Python 3 240.8 µs ~9.9×
kvlang(shm 后端) 33.37 s ~1,378,000×

kvlang 比 Python 慢约 138,500×,比 Rust 慢约 138 万×。这不是 bug,是当前解释执行模型的架构本质,记录在此以便量化性能定位、并与 #116 的寻址开销一并跟踪。

度量方法

  • kvlang 版:tutorial/06-algo/prime_sieve.kv,用其内置 time·now/time·sub/duration·as_nanos 计时 prime_sieve(200) 计算+打印段(不含 stdlib boot)。后端 KVSPACE=shm://…(比 redis 快,redis 版更慢)。二进制取 /usr/bin/kvlang(当前安装态)。
  • Python:time.perf_counter_ns()prime_sieve(200)
  • Rust:std::time::Instantrustc -O
  • 三版逻辑逐行等价(while + % + == + break + 计数),都包含循环内 print(与 kv 计时区间一致)。脚本:/tmp/psbench/{ps.py,ps.rs}

原始数据(ns):kvlang 33368371941;Python 240817;Rust 24213

根因

kvlang 是把 PC 和全部状态都存在 KV 树里的明文解释执行 VM:每一个 %==+while 判定、-> 写槽都是一次 kvspace 读/写 + rwir 派发往返。prime_sieve(200) 试除法 O(n²) ≈ 上万次内层迭代,每次迭代数次 KV 往返,累积几万次操作 × 每次数百 µs 往返 ≈ 33 s。shm 单进程内存 KV 已远快于 redis,但每操作往返开销仍数量级高于寄存器/栈机。

#116 的关系

#116 分析的正是这条链路的另一维成本:随调用深度 D,PC/帧 key 长度 O(D)、活跃 key 总量 O(D²)。prime_sieve 的慢与 #116 同源——都出自「PC/帧/局部全部落 KV 树、每步往返」的 runtime 设计。#116 优化 key 形态(三维地址 [ctlflow,irseq,params])可减小单次往返的 key 体积,但不改变每操作一次往返的数量级;本 issue 记录的是往返次数×单次延迟这一正交维度。

定位取舍(非待修 bug)

这是 kvlang 定位的自觉取舍:代码即数据、PC 可崩溃恢复、软链接即调用——用极致可观测/可恢复性换执行速度。计算密集部分本应下沉扩展世界(tensor → op-gpu/numpy 扩展一次性算),kvlang 只做编排、不做热循环。

可选后续方向(待讨论,不在本 issue 承诺)

  • 帧局部/纯值临时变量的进程内缓存:热循环内的 d/rem/is_prime 等纯局部标量不必每次穿透 kvspace,可在 vthread 执行器内存内维护、仅在 yield/崩溃点回写(与崩溃恢复语义需对齐)。
  • 基础算子批处理:连续纯 native rwir(算术/比较)已在 runtime-rs 侧批处理,评估把 in-proc 批的粒度扩到整个内层 while
  • 明确文档化 kvlang「不做热循环」的定位,tutorial 层给出「计算下沉扩展」的对照例。

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions