Skip to content

Commit e1f8a9a

Browse files
authored
Adjust default parameters (#406)
- Update formula in `estimate_verif_num_gates` after the update in the recursive verification from #397 - Update the parameters to get better utilization of 2^16 rows - Update metrics report to be more compact
1 parent a24bbf7 commit e1f8a9a

File tree

5 files changed

+70
-16
lines changed

5 files changed

+70
-16
lines changed

src/backends/plonky2/circuits/mainpod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1506,7 +1506,7 @@ pub fn calculate_statements_hash_circuit(
15061506
statements: &[StatementTarget],
15071507
) -> HashOutTarget {
15081508
assert!(statements.len() <= params.num_public_statements_hash);
1509-
let measure = measure_gates_begin!(builder, "CalculateId");
1509+
let measure = measure_gates_begin!(builder, "CalculateStsHash");
15101510
let statements_rev_flattened = statements.iter().rev().flat_map(|s| s.flatten());
15111511
let mut none_st = mainpod::Statement::from(Statement::None);
15121512
pad_statement(params, &mut none_st);
@@ -1561,6 +1561,7 @@ fn build_custom_predicate_table_circuit(
15611561
let mut custom_predicate_table =
15621562
Vec::with_capacity(params.max_custom_predicate_batches * params.max_custom_batch_size);
15631563
for cpb in custom_predicate_batches {
1564+
let measure_cpb = measure_gates_begin!(builder, "CustomPredBatch");
15641565
let id = cpb.id(builder); // constrain the id
15651566
for (index, cp) in cpb.predicates.iter().enumerate() {
15661567
let statements = cp
@@ -1582,6 +1583,7 @@ fn build_custom_predicate_table_circuit(
15821583
let in_query_hash = entry.hash(builder);
15831584
custom_predicate_table.push(in_query_hash);
15841585
}
1586+
measure_gates_end!(builder, measure_cpb);
15851587
}
15861588
measure_gates_end!(builder, measure);
15871589
Ok(custom_predicate_table)

src/backends/plonky2/circuits/metrics.rs

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,23 @@ impl Metrics {
5454
pub fn print(&self) {
5555
println!("Gate count:");
5656
let mut count = HashMap::new();
57+
let mut list = Vec::new();
5758
for (name, num_gates) in &self.gates {
58-
let n = count.entry(name).or_insert(0);
59+
let (n, gates) = count.entry(name).or_insert((0, 0));
60+
if *n == 0 {
61+
list.push(name);
62+
}
5963
*n += 1;
60-
println!("- {} [{}]: {}", name, *n, num_gates);
64+
*gates += num_gates;
6165
}
66+
for name in list.iter().rev() {
67+
let (n, total_gates) = count.get(name).expect("key inserted in previous loop");
68+
let avg_gates: f64 = (*total_gates as f64) / (*n as f64);
69+
println!("- {}: {} x {:.01} = {}", name, n, avg_gates, total_gates);
70+
}
71+
}
72+
pub fn reset(&mut self) {
73+
*self = Self::default()
6274
}
6375
}
6476

@@ -82,6 +94,15 @@ pub mod measure_macros {
8294
}};
8395
}
8496

97+
#[macro_export]
98+
macro_rules! measure_gates_reset {
99+
() => {{
100+
use $crate::backends::plonky2::circuits::metrics::METRICS;
101+
let mut metrics = METRICS.lock().unwrap();
102+
metrics.reset();
103+
}};
104+
}
105+
85106
#[macro_export]
86107
macro_rules! measure_gates_print {
87108
() => {{
@@ -108,6 +129,11 @@ pub mod measure_macros {
108129
};
109130
}
110131

132+
#[macro_export]
133+
macro_rules! measure_gates_reset {
134+
() => {};
135+
}
136+
111137
#[macro_export]
112138
macro_rules! measure_gates_print {
113139
() => {{

src/backends/plonky2/mainpod/mod.rs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ pub(crate) fn layout_statements(
384384
}
385385

386386
// Public statements
387-
assert!(inputs.public_statements.len() < params.max_public_statements);
387+
assert!(inputs.public_statements.len() <= params.max_public_statements);
388388
for i in 0..params.max_public_statements {
389389
let mut st = inputs
390390
.public_statements
@@ -859,6 +859,25 @@ pub mod tests {
859859
Ok(pod.verify()?)
860860
}
861861

862+
// `RUST_LOG=pod2::backends=debug cargo test --release --no-default-features --features=backend_plonky2,mem_cache,zk,metrics test_measure_main_pod -- --nocapture --ignored`
863+
#[ignore]
864+
#[test]
865+
fn test_measure_main_pod() -> frontend::Result<()> {
866+
env_logger::init();
867+
let params = Params::default();
868+
println!("{:#?}", params);
869+
let vd_set = VDSet::new(params.max_depth_mt_vds, &[]).unwrap();
870+
871+
// Calculate rec common first to avoid duplicate metrics in `pod_builder.prove`
872+
let _rec_common_circuit_data = cache_get_standard_rec_main_pod_common_circuit_data();
873+
let pod_builder = MainPodBuilder::new(&params, &vd_set);
874+
let prover = Prover {};
875+
crate::measure_gates_reset!();
876+
let _pod = pod_builder.prove(&prover)?;
877+
crate::measure_gates_print!();
878+
Ok(())
879+
}
880+
862881
#[test]
863882
fn test_main_tickets() -> frontend::Result<()> {
864883
let params = Params::default();

src/backends/plonky2/recursion/circuit.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -435,13 +435,13 @@ fn estimate_verif_num_gates(degree_bits: usize) -> usize {
435435
{
436436
// Formula obtained via linear regression using
437437
// `test_measure_zk_recursion` results with `standard_recursion_zk_config`.
438-
num_gates = 244 * degree_bits + 1127;
438+
num_gates = 243 * degree_bits + 1522;
439439
}
440440
#[cfg(not(feature = "zk"))]
441441
{
442442
// Formula obtained via linear regression using `test_measure_recursion`
443443
// results with `standard_recursion_config`.
444-
num_gates = 236 * degree_bits + 1171;
444+
num_gates = 236 * degree_bits + 1580;
445445
}
446446
// Add 2% for error because the results are not a clean line
447447
num_gates * 102 / 100
@@ -523,6 +523,11 @@ pub fn common_data_for_recursion<I: InnerCircuit>(
523523
}
524524

525525
if total_num_gates < (1 << degree_bits) {
526+
log::debug!(
527+
"degree_bits = {}, free_gates = {}",
528+
degree_bits,
529+
(1 << degree_bits) - total_num_gates
530+
);
526531
break;
527532
}
528533
degree_bits = log2_ceil(total_num_gates);
@@ -956,6 +961,7 @@ mod tests {
956961
Ok(())
957962
}
958963

964+
// `cargo test --release --no-default-features --features=backend_plonky2,mem_cache,zk,metrics test_measure_recursion -- --nocapture --ignored`
959965
#[ignore]
960966
#[test]
961967
fn test_measure_recursion() {
@@ -1005,6 +1011,7 @@ mod tests {
10051011
}
10061012
}
10071013

1014+
// `cargo test --release --no-default-features --features=backend_plonky2,mem_cache,zk,metrics test_measure_zk_recursion -- --nocapture --ignored`
10081015
#[ignore]
10091016
#[test]
10101017
fn test_measure_zk_recursion() {

src/middleware/mod.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -778,23 +778,23 @@ impl Default for Params {
778778
fn default() -> Self {
779779
Self {
780780
max_input_pods: 2,
781-
max_input_pods_public_statements: 10,
782-
max_statements: 40,
783-
max_public_statements: 10,
781+
max_input_pods_public_statements: 8,
782+
max_statements: 48,
783+
max_public_statements: 8,
784784
num_public_statements_hash: 16,
785785
max_statement_args: 5,
786786
max_operation_args: 5,
787-
max_custom_predicate_batches: 2,
788-
max_custom_predicate_verifications: 5,
787+
max_custom_predicate_batches: 4,
788+
max_custom_predicate_verifications: 8,
789789
max_custom_predicate_arity: 5,
790-
max_custom_predicate_wildcards: 10,
791-
max_custom_batch_size: 5, // TODO: Move down to 4?
792-
max_merkle_proofs_containers: 16,
793-
max_merkle_tree_state_transition_proofs_containers: 5,
790+
max_custom_predicate_wildcards: 8,
791+
max_custom_batch_size: 4,
792+
max_merkle_proofs_containers: 20,
793+
max_merkle_tree_state_transition_proofs_containers: 6,
794794
max_depth_mt_containers: 32,
795795
max_depth_mt_vds: 6, // up to 64 (2^6) different pod circuits
796796
max_public_key_of: 2,
797-
max_signed_by: 3,
797+
max_signed_by: 4,
798798
}
799799
}
800800
}

0 commit comments

Comments
 (0)