mirror of
https://github.com/arnaucube/Nova.git
synced 2026-01-11 00:21:29 +01:00
Add the ability to profile the benchmarks w/ a flamegraph feature (#183)
* feat: Integrate flamegraph profiling in benchmarks - Introduce "flamegraph" feature flag for optional profiling integration - Add benchmark profiling support in `compressed_snark` and `recursive_snark` groups - Update Cargo.toml with `pprof` and `cfg-if` dependencies * ci: Build benches to make sure they don't bit-rot - Integrate bench build step into GitHub Actions workflow
This commit is contained in:
committed by
GitHub
parent
af886d6ce7
commit
ff0370f506
2
.github/workflows/rust.yml
vendored
2
.github/workflows/rust.yml
vendored
@@ -25,6 +25,8 @@ jobs:
|
|||||||
run: cargo build --target wasm32-unknown-unknown
|
run: cargo build --target wasm32-unknown-unknown
|
||||||
- name: Build examples
|
- name: Build examples
|
||||||
run: cargo build --examples --verbose
|
run: cargo build --examples --verbose
|
||||||
|
- name: Build benches
|
||||||
|
run: cargo build --benches --verbose
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: cargo +stable test --release --verbose
|
run: cargo +stable test --release --verbose
|
||||||
- name: Check Rustfmt Code Style
|
- name: Check Rustfmt Code Style
|
||||||
|
|||||||
@@ -40,6 +40,8 @@ pasta-msm = { version = "0.1.4" }
|
|||||||
criterion = { version = "0.4", features = ["html_reports"] }
|
criterion = { version = "0.4", features = ["html_reports"] }
|
||||||
rand = "0.8.4"
|
rand = "0.8.4"
|
||||||
hex = "0.4.3"
|
hex = "0.4.3"
|
||||||
|
pprof = { version = "0.11" }
|
||||||
|
cfg-if = "1.0.0"
|
||||||
|
|
||||||
[[bench]]
|
[[bench]]
|
||||||
name = "recursive-snark"
|
name = "recursive-snark"
|
||||||
@@ -59,3 +61,4 @@ default = []
|
|||||||
portable = ["pasta-msm/portable"]
|
portable = ["pasta-msm/portable"]
|
||||||
cuda = ["neptune/cuda", "neptune/pasta", "neptune/arity24"]
|
cuda = ["neptune/cuda", "neptune/pasta", "neptune/arity24"]
|
||||||
opencl = ["neptune/opencl", "neptune/pasta", "neptune/arity24"]
|
opencl = ["neptune/opencl", "neptune/pasta", "neptune/arity24"]
|
||||||
|
flamegraph = ["pprof/flamegraph", "pprof/criterion"]
|
||||||
|
|||||||
@@ -22,10 +22,24 @@ type S2 = nova_snark::spartan::RelaxedR1CSSNARK<G2, EE2>;
|
|||||||
type C1 = NonTrivialTestCircuit<<G1 as Group>::Scalar>;
|
type C1 = NonTrivialTestCircuit<<G1 as Group>::Scalar>;
|
||||||
type C2 = TrivialTestCircuit<<G2 as Group>::Scalar>;
|
type C2 = TrivialTestCircuit<<G2 as Group>::Scalar>;
|
||||||
|
|
||||||
criterion_group! {
|
// To run these benchmarks, first download `criterion` with `cargo install cargo install cargo-criterion`.
|
||||||
name = compressed_snark;
|
// Then `cargo criterion --bench compressed-snark`. The results are located in `target/criterion/data/<name-of-benchmark>`.
|
||||||
config = Criterion::default().warm_up_time(Duration::from_millis(3000));
|
// For flamegraphs, run `cargo criterion --bench compressed-snark --features flamegraph -- --profile-time <secs>`.
|
||||||
targets = bench_compressed_snark
|
// The results are located in `target/criterion/profile/<name-of-benchmark>`.
|
||||||
|
cfg_if::cfg_if! {
|
||||||
|
if #[cfg(feature = "flamegraph")] {
|
||||||
|
criterion_group! {
|
||||||
|
name = compressed_snark;
|
||||||
|
config = Criterion::default().warm_up_time(Duration::from_millis(3000)).with_profiler(pprof::criterion::PProfProfiler::new(100, pprof::criterion::Output::Flamegraph(None)));
|
||||||
|
targets = bench_compressed_snark
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
criterion_group! {
|
||||||
|
name = compressed_snark;
|
||||||
|
config = Criterion::default().warm_up_time(Duration::from_millis(3000));
|
||||||
|
targets = bench_compressed_snark
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
criterion_main!(compressed_snark);
|
criterion_main!(compressed_snark);
|
||||||
|
|||||||
@@ -18,10 +18,24 @@ type G2 = pasta_curves::vesta::Point;
|
|||||||
type C1 = NonTrivialTestCircuit<<G1 as Group>::Scalar>;
|
type C1 = NonTrivialTestCircuit<<G1 as Group>::Scalar>;
|
||||||
type C2 = TrivialTestCircuit<<G2 as Group>::Scalar>;
|
type C2 = TrivialTestCircuit<<G2 as Group>::Scalar>;
|
||||||
|
|
||||||
criterion_group! {
|
// To run these benchmarks, first download `criterion` with `cargo install cargo install cargo-criterion`.
|
||||||
name = recursive_snark;
|
// Then `cargo criterion --bench recursive-snark`. The results are located in `target/criterion/data/<name-of-benchmark>`.
|
||||||
config = Criterion::default().warm_up_time(Duration::from_millis(3000));
|
// For flamegraphs, run `cargo criterion --bench recursive-snark --features flamegraph -- --profile-time <secs>`.
|
||||||
targets = bench_recursive_snark
|
// The results are located in `target/criterion/profile/<name-of-benchmark>`.
|
||||||
|
cfg_if::cfg_if! {
|
||||||
|
if #[cfg(feature = "flamegraph")] {
|
||||||
|
criterion_group! {
|
||||||
|
name = recursive_snark;
|
||||||
|
config = Criterion::default().warm_up_time(Duration::from_millis(3000)).with_profiler(pprof::criterion::PProfProfiler::new(100, pprof::criterion::Output::Flamegraph(None)));
|
||||||
|
targets = bench_recursive_snark
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
criterion_group! {
|
||||||
|
name = recursive_snark;
|
||||||
|
config = Criterion::default().warm_up_time(Duration::from_millis(3000));
|
||||||
|
targets = bench_recursive_snark
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
criterion_main!(recursive_snark);
|
criterion_main!(recursive_snark);
|
||||||
|
|||||||
Reference in New Issue
Block a user