基准与性能对比

oCAS 在 ocas-tests/benches/ 中提供基于 criterion 的基准套件,以及面向 SymPy、SageMath、Symbolica 的跨语言对比工具。本章说明如何运行各项基准及其测量内容。


运行 oCAS 基准

# 所有基准
cargo bench --workspace

# 单项基准
cargo bench --bench poly_gcd
cargo bench --bench poly_factor
cargo bench --bench groebner
cargo bench --bench integrate
cargo bench --bench ntt_poly_mul

# 更快但精度较低的运行
cargo bench --bench poly_gcd -- --warm-up-time 0.5 --measurement-time 1
基准覆盖
arenaArena 分配吞吐
parse / normalize表达式解析与规范化
poly_dense / poly_sparse多项式运算
poly_gcd一元与二元多项式 GCD
poly_factor无平方与完全因式分解(ℤ/𝔽_p/多元/代数数域)
groebnerGröbner 基(cyclic-n 理想)
calculus / rewrite微分、Taylor、规则化简
integrate符号积分(有理/Risch/特殊函数)
eval_interpreter / eval_jit / eval_simd数值求值路径
eval_streaming流式求值(恒定内存)
eval_estrin / eval_pulp快速多项式求值(Estrin / pulp SIMD)
ntt_poly_mulNTT 多项式乘法
gmp_integerGMP 整数运算
sympy_comparison与 SymPy 直接对比

SymPy 对比(自动化)

sympy_comparison 基准通过 uv 管理的 Python 子进程(scripts/compare_sympy.py)驱动 SymPy,用 iter_custom 将耗时(纳秒)接入 criterion,使 oCAS 与 SymPy 在同一报告中并列展示。

# 需要 PATH 中有 `uv`;Python 环境会自动准备
cargo bench --bench sympy_comparison

支持的任务:parse、diff、expand、factor、gcd、series。


SageMath 对比(本地手动)

SageMath 安装体积过大,不适合进 CI,因此对比在本地通过 sage 解释器运行。该工具与 bench_sympy.py 的输出契约一致。

# 在 ocas-tests 目录下运行(需已安装 SageMath)
sage scripts/bench_sage.py factor "x^30 - 1" 100

任务:parse、diff、expand、factor、gcd。注意 SageMath 用 ^ 表示乘方(与 oCAS 相同),无需语法转换。


JIT 与求值

eval_jit 基准对比 Cranelift JIT 与栈式解释器在单输出与多输出工作负载上的表现(各 1000 次调用,criterion iter_custom 计时):

工作负载解释器JIT加速比
多项式(单输出)221 µs2.27 µs97×
三角函数 3 输出479 µs22.4 µs21×

表中数字来自 0.15.0 的测量(criterion iter_custom,各 1000 次调用), 随版本演进可能略有变化。

cargo bench --bench eval_jit --features jit

多输出用例通过 compile_multi 将三个表达式(sin(x)、cos(x)、sin(x)/cos(x))编译为一个求值器,跨输出共享 sin(x) 子表达式;call_into 将结果写入栈分配缓冲,每次调用零堆分配。

流式求值

StreamingEvaluator 跨行复用内部缓冲,处理百万行数据集时内存恒定:

工作负载逐行 evaluateStreamingEvaluator加速比
100k 行,多项式23.4 ms16.8 ms28%
cargo bench --bench eval_streaming

f32 混合精度

compile_jit_f32 / compile_vector_evaluator_f32 生成单精度代码。同一硬件上 SIMD 求值器通道数翻倍(AVX-512 上 f64 为 8、f32 为 16)。当 f32 精度足够时使用。


Symbolica 对比(本地手动)

Symbolica 是 oCAS 的主要性能参考。由于 Symbolica 采用 AGPL 类许可证且作为独立 Cargo workspace 发布,不会链接进 oCAS 构建。请从源码检出运行 Symbolica 自带的示例二进制,手动对比耗时。

推荐对比矩阵(Symbolica 示例 → oCAS 基准):

Symbolica 示例oCAS 基准工作负载
polynomial_gcdpoly_gcd整数与有理多项式 GCD
factorizationpoly_factorx^n - 1 无平方/完整因式分解
groebner_basisgroebnercyclic-4 理想
derivativecalculus符号微分
seriescalculusTaylor 展开
# 运行 Symbolica 示例(在 symbolica 源码根目录)
cd ../symbolica
cargo run --release --example polynomial_gcd

# 再运行对应的 oCAS 基准
cd ../ocas
cargo bench --bench poly_gcd -- --warm-up-time 0.5 --measurement-time 1

正确性对比

除性能外,oCAS 还在 ocas-tests/tests/correctness/ 中提供了正确性交叉验证框架。 它运行 201 项自动化测试,覆盖 19 个数学模块(截至 0.24.0),将 oCAS 结果与 SymPy、 SageMath、Symbolica 进行对比。详见正确性章节。


报告结果

criterion 将 HTML 报告写入 target/criterion/。在浏览器打开 target/criterion/poly_gcd/index.html 可查看分布、回归与并列对比。