moonbit-pathfinding/bench_rust
Jennifer Davis 1d56d10e34
ci / ci (${{ matrix.backend }}) (wasm) (push) Failing after 1m22s Details
ci / ci (${{ matrix.backend }}) (wasm-gc) (push) Failing after 1m22s Details
ci / wasi delivery gate (push) Failing after 1m22s Details
ci / wit interface gate (push) Failing after 1m22s Details
pages / Build & deploy WASM Playground to GitHub Pages (push) Failing after 1m21s Details
ci / ci (${{ matrix.backend }}) (native) (push) Failing after 2m22s Details
ci / component model gate (push) Failing after 2m22s Details
ci / ci (${{ matrix.backend }}) (js) (push) Failing after 17m40s Details
ci / coverage (wasm-gc) (push) Has been skipped Details
ci / doc build (push) Has been skipped Details
ci / evidence guard (push) Has been skipped Details
ci / compat diff gate (push) Has been skipped Details
ci / moon prove (release branches only) (push) Has been skipped Details
ci / release-ready (all directions) (push) Has been skipped Details
chore: migrate to moon 0.1.20260713 idioms (Map([]) literals, Hash::hash/Compare::compare qualified calls, pkgtype executable in moon.pkg)
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-14 14:09:34 +00:00
..
moon_side chore: migrate to moon 0.1.20260713 idioms (Map([]) literals, Hash::hash/Compare::compare qualified calls, pkgtype executable in moon.pkg) 2026-07-14 14:09:34 +00:00
src feat: championship v1.0 upgrade - WASM playground, proof pipeline, performance benchmarks, API ergonomics 2026-06-22 05:04:33 +00:00
.gitignore feat: championship v1.0 upgrade - WASM playground, proof pipeline, performance benchmarks, API ergonomics 2026-06-22 05:04:33 +00:00
Cargo.lock feat: championship v1.0 upgrade - WASM playground, proof pipeline, performance benchmarks, API ergonomics 2026-06-22 05:04:33 +00:00
Cargo.toml feat: championship v1.0 upgrade - WASM playground, proof pipeline, performance benchmarks, API ergonomics 2026-06-22 05:04:33 +00:00
README.md bench: honest two-tier Rust comparison (same-algorithm 2.7x, bidir bonus) + README benchmark/live-demo refresh 2026-07-12 16:30:10 +00:00

README.md

bench_rust —— 与 Rust pathfinding crate 的对比基准Requirement 6

本目录实现 OSC 2026 冠军级升级方向 2「性能冠军」中的 跨语言对比基础设施 将本库MoonBit moonbit-pathfinding)与成熟的 Rust pathfinding crate 在 等价工作负载 上做可复现对比并产出对比报告Markdown + JSON

目录结构

路径 说明
Cargo.toml / src/main.rs Rust 侧采集器Cargo 工程,依赖 pathfinding crate
moon_side/ 本库MoonBit侧采集器主包调用既有 @unweighted/@directed
../scripts/rust_comparison.ps1 编排器:构建、采集、黄金交叉校验、对比报告

等价输入与黄金交叉校验R6.2

两侧共享 逐位一致的 xorshift64 随机源(与 src/infra_pbtRng 完全一致) 与 完全相同的确定性生成算法

  • 边数 m = n × 平均出度,按 (u, v, w) 顺序生成;u = next_below(n)v = next_below(n)(若 v == u 改写为 (u+1) % n 以规避自环)、w = next_range(1, 100)
  • 查询按 (s, t) 顺序生成,s = next_below(n)t = next_below(n)

--mode golden 让两侧各输出「黄金 JSON 图样本」,编排器逐元素比对(不一致即门禁失败), 从而证明两侧输入逐元素相同R6.2)。

工作负载矩阵与采样R6.1 / R6.3

  • 算法BFS、Dijkstra、A*A* 在一般图上使用 零启发式admissible等价一致代价搜索两侧一致
  • 同算法对齐:主对比表两侧均为 单向 BFS/Dijkstra/A*(本库 CSR indexed 快路径 vs Rust pathfinding crate 公开 API + 预构建邻接表);本库 双向变体Rust crate 无对应 API单独列为 bonus 表并与本库单向签名逐元素交叉校验,不进入同算法加速比
  • 规模:{1000, 10000, 100000} 节点;平均出度 {4, 16};每组 ≥100 查询。
  • 采样:每用例 ≥5 预热 + ≥30 计时样本;单次采样 = 运行该用例全部查询一遍。
  • 结果签名每条查询记录跳数BFS或路径代价Dijkstra/A*);两侧签名逐元素比对做一致性校验。

加速比口径与排除规则R6.6 / R6.7 / R6.8

  • 加速比统一以 中位计时 计算(本库中位 ÷ Rust 中位 → 本库相对 Rust 的加速;>1 表示本库更快)。
  • 失败 / 超时(单次采样 >60s/ 两库结果不一致(签名不同)的用例 标注并排除 出加速比。
  • 跨机器 / 跨工具链对比 显式标注且不据此声明加速比

运行

# 完整矩阵(在 release 模式下采集,含黄金交叉校验)
pwsh scripts/rust_comparison.ps1

# 快速烟雾验证(缩小矩阵;方法学不变,仅用于本地/CI 验证)
pwsh scripts/rust_comparison.ps1 -Quick -Sizes 1000 -Degrees 4,16 -Queries 100

产物写入 benches/results/latest-rust-comparison.mdlatest-rust-comparison.json 含完整方法学声明、CPU/OS 与两套工具链版本、逐用例对比与排除标注)。

单独运行某一侧采集器

# Rust 侧
cargo run --release -- --mode bench --seed 1311768467463790320 \
  --sizes 1000,10000,100000 --degrees 4,16 --queries 100 --warmup 5 --samples 30 --out rust.json

# 本库MoonBit
moon run bench_rust/moon_side --target native --release -- \
  --mode bench --seed 1311768467463790320 --sizes 1000,10000,100000 --degrees 4,16 \
  --queries 100 --warmup 5 --samples 30

计时单位说明

  • Rust 侧:std::time::Instant,毫秒。
  • 本库侧:@moonbitlang/core/bench 单调时钟。经校准,native 后端返回微秒 300M 次循环原始读数 ≈ 2.70e6,对应 wall-clock ≈ 2.7s),故毫秒 = 原始读数 / 1000。

可复现性R6.5

  • 依赖固定版本(pathfinding = 4.11.0,与 Rust 1.83 工具链兼容;Cargo.lock 已签入)。
  • 相同种子与参数重跑,本库侧中位计时与报告值的相对差异应 ≤15%。
  • 工具链缺失cargo / moon时编排器给出明确告警并优雅降级不静默崩溃。