Skip to content

Commit 0b126ec

Browse files
authored
ref: split criterion bench and RAM measure in provekit (#30)
1 parent c92c801 commit 0b126ec

File tree

4 files changed

+59
-38
lines changed

4 files changed

+59
-38
lines changed

provekit/Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ utils = { workspace = true }
99
criterion = { workspace = true }
1010
noir-r1cs = { git = "https://github.com/worldfnd/ProveKit", branch = "main" }
1111

12+
[[bin]]
13+
name = "provekit-measure"
14+
path = "src/bin/measure.rs"
15+
1216
[[bench]]
1317
name = "prove_verify"
1418
harness = false

provekit/README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,9 @@ This benchmark code is using the ProveKit of World Foundation(https://github.com
88
```bash
99
cargo bench
1010
```
11+
12+
Measure RAM footprint:
13+
14+
```bash
15+
cargo run -r --bin provekit-measure
16+
```

provekit/benches/prove_verify.rs

Lines changed: 2 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,10 @@
11
use criterion::{BatchSize, Criterion, black_box, criterion_group, criterion_main};
2-
use provekit::{ProvekitSha256Benchmark, WORKSPACE_ROOT};
3-
use std::path::PathBuf;
4-
use utils::bench::{SubMetrics, display_submetrics, measure_peak_memory, write_json_submetrics};
2+
use provekit::ProvekitSha256Benchmark;
53

64
const INPUT_EXPONENTS: [u32; 1] = [11];
75

86
fn sha256_benchmarks(c: &mut Criterion) {
9-
let (bench_harness, preprocessing_peak_memory) =
10-
measure_peak_memory(|| ProvekitSha256Benchmark::new(&INPUT_EXPONENTS));
11-
12-
let mut all_metrics = Vec::new();
13-
14-
for &exp in INPUT_EXPONENTS.iter() {
15-
let mut metrics = SubMetrics::new(1 << exp);
16-
metrics.preprocessing_peak_memory = preprocessing_peak_memory;
17-
18-
let package_name = format!("sha256_bench_2e{exp}");
19-
let circuit_path = PathBuf::from(WORKSPACE_ROOT)
20-
.join("target")
21-
.join(format!("{package_name}.json"));
22-
let toml_path = PathBuf::from(WORKSPACE_ROOT)
23-
.join("circuits/hash/sha256-provekit")
24-
.join(format!("sha256-bench-2e{exp}"))
25-
.join("Prover.toml");
26-
27-
metrics.preprocessing_size = std::fs::metadata(circuit_path)
28-
.map(|m| m.len())
29-
.unwrap_or(0) as usize
30-
+ std::fs::metadata(toml_path).map(|m| m.len()).unwrap_or(0) as usize;
31-
32-
let (proof, proving_peak_memory) = measure_peak_memory(|| bench_harness.run_prove(exp));
33-
metrics.proving_peak_memory = proving_peak_memory;
34-
metrics.proof_size = proof.whir_r1cs_proof.transcript.len();
35-
36-
all_metrics.push(metrics);
37-
}
38-
39-
println!("{}", display_submetrics(&all_metrics));
40-
41-
let json_path = "sha2_provekit_submetrics.json";
42-
write_json_submetrics(json_path, &all_metrics[0]);
43-
7+
let bench_harness = ProvekitSha256Benchmark::new(&INPUT_EXPONENTS);
448
let mut group = c.benchmark_group("SHA256 Prove & Verify");
459
group.sample_size(10);
4610

provekit/src/bin/measure.rs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
use provekit::{ProvekitSha256Benchmark, WORKSPACE_ROOT};
2+
use std::path::PathBuf;
3+
use utils::bench::{SubMetrics, display_submetrics, measure_peak_memory, write_json_submetrics};
4+
5+
const INPUT_EXPONENTS: [u32; 1] = [11];
6+
7+
fn main() {
8+
let metrics = benchmark_sha2();
9+
let json_file: &'static str = "sha2_provekit_submetrics.json";
10+
write_json_submetrics(json_file, &metrics[0]);
11+
}
12+
13+
fn benchmark_sha2() -> Vec<SubMetrics> {
14+
let (bench_harness, preprocessing_peak_memory) =
15+
measure_peak_memory(|| ProvekitSha256Benchmark::new(&INPUT_EXPONENTS));
16+
17+
let mut all_metrics = Vec::new();
18+
19+
for &exp in INPUT_EXPONENTS.iter() {
20+
let mut metrics = SubMetrics::new(1 << exp);
21+
metrics.preprocessing_peak_memory = preprocessing_peak_memory;
22+
23+
let package_name = format!("sha256_bench_2e{exp}");
24+
let circuit_path = PathBuf::from(WORKSPACE_ROOT)
25+
.join("target")
26+
.join(format!("{package_name}.json"));
27+
let toml_path = PathBuf::from(WORKSPACE_ROOT)
28+
.join("circuits/hash/sha256-provekit")
29+
.join(format!("sha256-bench-2e{exp}"))
30+
.join("Prover.toml");
31+
32+
metrics.preprocessing_size = std::fs::metadata(circuit_path)
33+
.map(|m| m.len())
34+
.unwrap_or(0) as usize
35+
+ std::fs::metadata(toml_path).map(|m| m.len()).unwrap_or(0) as usize;
36+
37+
let (proof, proving_peak_memory) = measure_peak_memory(|| bench_harness.run_prove(exp));
38+
metrics.proving_peak_memory = proving_peak_memory;
39+
metrics.proof_size = proof.whir_r1cs_proof.transcript.len();
40+
41+
all_metrics.push(metrics);
42+
}
43+
44+
println!("{}", display_submetrics(&all_metrics));
45+
46+
all_metrics
47+
}

0 commit comments

Comments
 (0)