Skip to content

Commit 2c9d204

Browse files
Move VM benches to divan (#2690)
1 parent 5d8c0ba commit 2c9d204

File tree

3 files changed

+181
-61
lines changed

3 files changed

+181
-61
lines changed

engine/Cargo.lock

Lines changed: 129 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

engine/baml-vm/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ baml-runtime = { path = "../baml-runtime" }
2424
internal-baml-core = { path = "../baml-lib/baml-core" }
2525
internal-baml-diagnostics = { path = "../baml-lib/diagnostics" }
2626
internal-baml-parser-database = { path = "../baml-lib/parser-database" }
27-
criterion = "0.5"
27+
divan = { package = "codspeed-divan-compat", version = "*" }
2828
indexmap = { workspace = true }
2929

3030
[[bench]]

engine/baml-vm/benches/fib.rs

Lines changed: 51 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
//! VM execution benchmarks.
2+
//!
3+
//! Do not measure compilation here, only VM execution time.
4+
15
use baml_vm::{watch::Watch, BamlVmProgram, EvalStack, Frame, ObjectIndex, StackIndex, Value, Vm};
2-
use criterion::{criterion_group, criterion_main, BatchSize, Criterion};
36

47
struct Program {
58
source: &'static str,
@@ -41,67 +44,58 @@ fn bootstrap_vm(input: Program) -> Vm {
4144
}
4245
}
4346

44-
pub fn bench_recursive_fib(c: &mut Criterion) {
45-
c.bench_function("recursive fib 25", |b| {
46-
b.iter_batched(
47-
|| {
48-
bootstrap_vm(Program {
49-
source: r#"
50-
function fib(n: int) -> int {
51-
if (n <= 1) {
52-
n
53-
} else {
54-
fib(n - 1) + fib(n - 2)
55-
}
47+
#[divan::bench(consts = [5, 10, 15])]
48+
pub fn recursive_fib<const N: i64>(bencher: divan::Bencher) {
49+
bencher
50+
.with_inputs(|| {
51+
bootstrap_vm(Program {
52+
source: r#"
53+
function fib(n: int) -> int {
54+
if (n <= 1) {
55+
n
56+
} else {
57+
fib(n - 1) + fib(n - 2)
5658
}
57-
"#,
58-
function: "fib",
59-
args: vec![Value::Int(25)],
60-
})
61-
},
62-
|mut vm| {
63-
vm.exec().unwrap();
64-
},
65-
BatchSize::PerIteration,
66-
)
67-
});
59+
}
60+
"#,
61+
function: "fib",
62+
args: vec![Value::Int(N)],
63+
})
64+
})
65+
.bench_refs(|vm| vm.exec().unwrap());
6866
}
6967

70-
pub fn bench_iterative_fib(c: &mut Criterion) {
71-
c.bench_function("iterative fib 3000", |b| {
72-
b.iter_batched(
73-
|| {
74-
bootstrap_vm(Program {
75-
source: r#"
76-
function fib(n: int) -> int {
77-
let a = 0;
78-
let b = 1;
68+
#[divan::bench(consts = [1000, 2000, 3000])]
69+
pub fn iterative_fib<const N: i64>(bencher: divan::Bencher) {
70+
bencher
71+
.with_inputs(|| {
72+
bootstrap_vm(Program {
73+
source: r#"
74+
function fib(n: int) -> int {
75+
let a = 0;
76+
let b = 1;
7977
80-
if (n == 0) {
81-
b
82-
} else {
83-
let i = 1;
84-
while (i <= n) {
85-
let c = a + b;
86-
a = b;
87-
b = c;
88-
i += 1;
89-
}
90-
b
78+
if (n == 0) {
79+
b
80+
} else {
81+
let i = 1;
82+
while (i <= n) {
83+
let c = a + b;
84+
a = b;
85+
b = c;
86+
i += 1;
9187
}
88+
b
9289
}
93-
"#,
94-
function: "fib",
95-
args: vec![Value::Int(3000)],
96-
})
97-
},
98-
|mut vm| {
99-
vm.exec().unwrap();
100-
},
101-
BatchSize::PerIteration,
102-
)
103-
});
90+
}
91+
"#,
92+
function: "fib",
93+
args: vec![Value::Int(N)],
94+
})
95+
})
96+
.bench_refs(|vm| vm.exec().unwrap());
10497
}
10598

106-
criterion_group!(benches, bench_recursive_fib, bench_iterative_fib);
107-
criterion_main!(benches);
99+
fn main() {
100+
divan::main();
101+
}

0 commit comments

Comments
 (0)