diff --git a/halo2_gadgets/goldenfiles/cost-model/arith-sum-10-values.csv b/halo2_gadgets/goldenfiles/cost-model/arith-sum-10-values.csv index d5f706980..1d4f72cf9 100644 --- a/halo2_gadgets/goldenfiles/cost-model/arith-sum-10-values.csv +++ b/halo2_gadgets/goldenfiles/cost-model/arith-sum-10-values.csv @@ -1,2 +1,2 @@ max_deg,rows,table_rows,advice_columns,lookups,permutations,column_queries,point_sets,proof_size -5,21,0,3,0,4,16,2,1600 +4,21,0,3,0,4,15,2,1504 diff --git a/halo2_gadgets/goldenfiles/cost-model/arith-sum-100-values.csv b/halo2_gadgets/goldenfiles/cost-model/arith-sum-100-values.csv index de920c83f..6c1c33e8d 100644 --- a/halo2_gadgets/goldenfiles/cost-model/arith-sum-100-values.csv +++ b/halo2_gadgets/goldenfiles/cost-model/arith-sum-100-values.csv @@ -1,2 +1,2 @@ max_deg,rows,table_rows,advice_columns,lookups,permutations,column_queries,point_sets,proof_size -5,201,0,3,0,4,16,2,1792 +4,201,0,3,0,4,15,2,1696 diff --git a/halo2_gadgets/goldenfiles/cost-model/arith-sum-1000-values.csv b/halo2_gadgets/goldenfiles/cost-model/arith-sum-1000-values.csv index 551e905f5..431803a8d 100644 --- a/halo2_gadgets/goldenfiles/cost-model/arith-sum-1000-values.csv +++ b/halo2_gadgets/goldenfiles/cost-model/arith-sum-1000-values.csv @@ -1,2 +1,2 @@ max_deg,rows,table_rows,advice_columns,lookups,permutations,column_queries,point_sets,proof_size -5,2001,0,3,0,4,16,2,1984 +4,2001,0,3,0,4,15,2,1888 diff --git a/halo2_gadgets/goldenfiles/cost-model/ecc-var-base-scalar-mult.csv b/halo2_gadgets/goldenfiles/cost-model/ecc-var-base-scalar-mult.csv index 688547bd6..3de7a6b9e 100644 --- a/halo2_gadgets/goldenfiles/cost-model/ecc-var-base-scalar-mult.csv +++ b/halo2_gadgets/goldenfiles/cost-model/ecc-var-base-scalar-mult.csv @@ -1,2 +1,2 @@ max_deg,rows,table_rows,advice_columns,lookups,permutations,column_queries,point_sets,proof_size -11,206,1024,10,1,10,48,6,4128 +6,206,1024,10,1,10,43,6,3648 diff --git a/halo2_gadgets/goldenfiles/cost-model/endoscale-base-pallas-vesta-8-64-8.csv b/halo2_gadgets/goldenfiles/cost-model/endoscale-base-pallas-vesta-8-64-8.csv index 69a49d581..2a534ddca 100644 --- a/halo2_gadgets/goldenfiles/cost-model/endoscale-base-pallas-vesta-8-64-8.csv +++ b/halo2_gadgets/goldenfiles/cost-model/endoscale-base-pallas-vesta-8-64-8.csv @@ -1,2 +1,2 @@ max_deg,rows,table_rows,advice_columns,lookups,permutations,column_queries,point_sets,proof_size -12,105,256,9,2,11,55,4,4480 +6,105,256,9,2,11,49,4,3904 diff --git a/halo2_gadgets/goldenfiles/cost-model/endoscale-base-pallas-vesta-8-66-9.csv b/halo2_gadgets/goldenfiles/cost-model/endoscale-base-pallas-vesta-8-66-9.csv index 4e1706843..83341b047 100644 --- a/halo2_gadgets/goldenfiles/cost-model/endoscale-base-pallas-vesta-8-66-9.csv +++ b/halo2_gadgets/goldenfiles/cost-model/endoscale-base-pallas-vesta-8-66-9.csv @@ -1,2 +1,2 @@ max_deg,rows,table_rows,advice_columns,lookups,permutations,column_queries,point_sets,proof_size -12,108,256,9,2,11,55,4,4480 +6,108,256,9,2,11,49,4,3904 diff --git a/halo2_gadgets/goldenfiles/cost-model/endoscale-base-vesta-pallas-8-64-8.csv b/halo2_gadgets/goldenfiles/cost-model/endoscale-base-vesta-pallas-8-64-8.csv index 69a49d581..2a534ddca 100644 --- a/halo2_gadgets/goldenfiles/cost-model/endoscale-base-vesta-pallas-8-64-8.csv +++ b/halo2_gadgets/goldenfiles/cost-model/endoscale-base-vesta-pallas-8-64-8.csv @@ -1,2 +1,2 @@ max_deg,rows,table_rows,advice_columns,lookups,permutations,column_queries,point_sets,proof_size -12,105,256,9,2,11,55,4,4480 +6,105,256,9,2,11,49,4,3904 diff --git a/halo2_gadgets/goldenfiles/cost-model/endoscale-base-vesta-pallas-8-66-9.csv b/halo2_gadgets/goldenfiles/cost-model/endoscale-base-vesta-pallas-8-66-9.csv index 4e1706843..83341b047 100644 --- a/halo2_gadgets/goldenfiles/cost-model/endoscale-base-vesta-pallas-8-66-9.csv +++ b/halo2_gadgets/goldenfiles/cost-model/endoscale-base-vesta-pallas-8-66-9.csv @@ -1,2 +1,2 @@ max_deg,rows,table_rows,advice_columns,lookups,permutations,column_queries,point_sets,proof_size -12,108,256,9,2,11,55,4,4480 +6,108,256,9,2,11,49,4,3904 diff --git a/halo2_gadgets/goldenfiles/cost-model/endoscale-scalar-pallas-vesta-8-64-8.csv b/halo2_gadgets/goldenfiles/cost-model/endoscale-scalar-pallas-vesta-8-64-8.csv index 91f60db7a..a58afd1a6 100644 --- a/halo2_gadgets/goldenfiles/cost-model/endoscale-scalar-pallas-vesta-8-64-8.csv +++ b/halo2_gadgets/goldenfiles/cost-model/endoscale-scalar-pallas-vesta-8-64-8.csv @@ -1,2 +1,2 @@ max_deg,rows,table_rows,advice_columns,lookups,permutations,column_queries,point_sets,proof_size -12,28,256,9,2,11,55,4,4480 +6,28,256,9,2,11,49,4,3904 diff --git a/halo2_gadgets/goldenfiles/cost-model/endoscale-scalar-pallas-vesta-8-66-9.csv b/halo2_gadgets/goldenfiles/cost-model/endoscale-scalar-pallas-vesta-8-66-9.csv index 95ad8bf86..c7c457a6b 100644 --- a/halo2_gadgets/goldenfiles/cost-model/endoscale-scalar-pallas-vesta-8-66-9.csv +++ b/halo2_gadgets/goldenfiles/cost-model/endoscale-scalar-pallas-vesta-8-66-9.csv @@ -1,2 +1,2 @@ max_deg,rows,table_rows,advice_columns,lookups,permutations,column_queries,point_sets,proof_size -12,36,256,9,2,11,55,4,4480 +6,36,256,9,2,11,49,4,3904 diff --git a/halo2_gadgets/goldenfiles/cost-model/endoscale-scalar-vesta-pallas-8-64-8.csv b/halo2_gadgets/goldenfiles/cost-model/endoscale-scalar-vesta-pallas-8-64-8.csv index 91f60db7a..a58afd1a6 100644 --- a/halo2_gadgets/goldenfiles/cost-model/endoscale-scalar-vesta-pallas-8-64-8.csv +++ b/halo2_gadgets/goldenfiles/cost-model/endoscale-scalar-vesta-pallas-8-64-8.csv @@ -1,2 +1,2 @@ max_deg,rows,table_rows,advice_columns,lookups,permutations,column_queries,point_sets,proof_size -12,28,256,9,2,11,55,4,4480 +6,28,256,9,2,11,49,4,3904 diff --git a/halo2_gadgets/goldenfiles/cost-model/endoscale-scalar-vesta-pallas-8-66-9.csv b/halo2_gadgets/goldenfiles/cost-model/endoscale-scalar-vesta-pallas-8-66-9.csv index 95ad8bf86..c7c457a6b 100644 --- a/halo2_gadgets/goldenfiles/cost-model/endoscale-scalar-vesta-pallas-8-66-9.csv +++ b/halo2_gadgets/goldenfiles/cost-model/endoscale-scalar-vesta-pallas-8-66-9.csv @@ -1,2 +1,2 @@ max_deg,rows,table_rows,advice_columns,lookups,permutations,column_queries,point_sets,proof_size -12,36,256,9,2,11,55,4,4480 +6,36,256,9,2,11,49,4,3904 diff --git a/halo2_gadgets/goldenfiles/cost-model/fbsm_base_field_pallas.csv b/halo2_gadgets/goldenfiles/cost-model/fbsm_base_field_pallas.csv index 460d9563d..530d852f3 100644 --- a/halo2_gadgets/goldenfiles/cost-model/fbsm_base_field_pallas.csv +++ b/halo2_gadgets/goldenfiles/cost-model/fbsm_base_field_pallas.csv @@ -1,2 +1,2 @@ max_deg,rows,table_rows,advice_columns,lookups,permutations,column_queries,point_sets,proof_size -12,156,1024,10,1,11,52,4,4288 +9,156,1024,10,1,11,49,4,4000 diff --git a/halo2_gadgets/goldenfiles/cost-model/fbsm_base_field_pluto.csv b/halo2_gadgets/goldenfiles/cost-model/fbsm_base_field_pluto.csv index 6cd24f800..e69777b77 100644 --- a/halo2_gadgets/goldenfiles/cost-model/fbsm_base_field_pluto.csv +++ b/halo2_gadgets/goldenfiles/cost-model/fbsm_base_field_pluto.csv @@ -1,2 +1,2 @@ max_deg,rows,table_rows,advice_columns,lookups,permutations,column_queries,point_sets,proof_size -12,269,1024,10,1,11,52,4,4288 +9,269,1024,10,1,11,49,4,4000 diff --git a/halo2_gadgets/goldenfiles/cost-model/fbsm_full_width_pallas.csv b/halo2_gadgets/goldenfiles/cost-model/fbsm_full_width_pallas.csv index c07390c6d..6cede011c 100644 --- a/halo2_gadgets/goldenfiles/cost-model/fbsm_full_width_pallas.csv +++ b/halo2_gadgets/goldenfiles/cost-model/fbsm_full_width_pallas.csv @@ -1,2 +1,2 @@ max_deg,rows,table_rows,advice_columns,lookups,permutations,column_queries,point_sets,proof_size -12,87,1024,10,1,11,52,4,4288 +9,87,1024,10,1,11,49,4,4000 diff --git a/halo2_gadgets/goldenfiles/cost-model/fbsm_full_width_pluto.csv b/halo2_gadgets/goldenfiles/cost-model/fbsm_full_width_pluto.csv index 4900f4fa0..4893022f8 100644 --- a/halo2_gadgets/goldenfiles/cost-model/fbsm_full_width_pluto.csv +++ b/halo2_gadgets/goldenfiles/cost-model/fbsm_full_width_pluto.csv @@ -1,2 +1,2 @@ max_deg,rows,table_rows,advice_columns,lookups,permutations,column_queries,point_sets,proof_size -12,151,1024,10,1,11,52,4,4288 +9,151,1024,10,1,11,49,4,4000 diff --git a/halo2_gadgets/goldenfiles/cost-model/fbsm_short_pallas.csv b/halo2_gadgets/goldenfiles/cost-model/fbsm_short_pallas.csv index 871bddb5c..84af740c2 100644 --- a/halo2_gadgets/goldenfiles/cost-model/fbsm_short_pallas.csv +++ b/halo2_gadgets/goldenfiles/cost-model/fbsm_short_pallas.csv @@ -1,2 +1,2 @@ max_deg,rows,table_rows,advice_columns,lookups,permutations,column_queries,point_sets,proof_size -12,27,1024,10,1,11,52,4,4288 +9,27,1024,10,1,11,49,4,4000 diff --git a/halo2_gadgets/goldenfiles/cost-model/fbsm_short_pluto.csv b/halo2_gadgets/goldenfiles/cost-model/fbsm_short_pluto.csv index 871bddb5c..84af740c2 100644 --- a/halo2_gadgets/goldenfiles/cost-model/fbsm_short_pluto.csv +++ b/halo2_gadgets/goldenfiles/cost-model/fbsm_short_pluto.csv @@ -1,2 +1,2 @@ max_deg,rows,table_rows,advice_columns,lookups,permutations,column_queries,point_sets,proof_size -12,27,1024,10,1,11,52,4,4288 +9,27,1024,10,1,11,49,4,4000 diff --git a/halo2_gadgets/goldenfiles/cost-model/plonk-verification-circuit.csv b/halo2_gadgets/goldenfiles/cost-model/plonk-verification-circuit.csv index c06625300..8e160e6b4 100644 --- a/halo2_gadgets/goldenfiles/cost-model/plonk-verification-circuit.csv +++ b/halo2_gadgets/goldenfiles/cost-model/plonk-verification-circuit.csv @@ -1,2 +1,2 @@ max_deg,rows,table_rows,advice_columns,lookups,permutations,column_queries,point_sets,proof_size -16,16908,1024,10,3,15,84,5,6496 +9,16908,1024,10,3,15,77,5,5824 diff --git a/halo2_gadgets/goldenfiles/cost-model/verify-ipa-commitment-circuit.csv b/halo2_gadgets/goldenfiles/cost-model/verify-ipa-commitment-circuit.csv index 0bd854613..1079036df 100644 --- a/halo2_gadgets/goldenfiles/cost-model/verify-ipa-commitment-circuit.csv +++ b/halo2_gadgets/goldenfiles/cost-model/verify-ipa-commitment-circuit.csv @@ -1,2 +1,2 @@ max_deg,rows,table_rows,advice_columns,lookups,permutations,column_queries,point_sets,proof_size -16,4501,1024,10,3,15,84,5,6368 +9,4501,1024,10,3,15,77,5,5696 diff --git a/halo2_proofs/examples/cost-model.rs b/halo2_proofs/examples/cost-model.rs index 7f6a4b204..48293be0e 100644 --- a/halo2_proofs/examples/cost-model.rs +++ b/halo2_proofs/examples/cost-model.rs @@ -28,6 +28,9 @@ struct CliCostOptions { #[options(help = "Maximum degree of the custom gates.", meta = "D")] gate_degree: usize, + #[options(help = "Maximum degree of the Constrain system.", meta = "D")] + max_degree: usize, + #[options( help = "A lookup over N columns with max input degree I and max table degree T. May be repeated.", meta = "N,I,T" @@ -51,6 +54,7 @@ impl CliCostOptions { instance: self.instance.clone(), fixed: self.fixed.clone(), gate_degree: self.gate_degree, + max_deg: self.max_degree, lookup: self.lookup.clone(), permutation: self.permutation.clone(), rows_count: self.rows, diff --git a/halo2_proofs/src/dev/cost_model.rs b/halo2_proofs/src/dev/cost_model.rs index 096b4cbfc..9eeca0499 100644 --- a/halo2_proofs/src/dev/cost_model.rs +++ b/halo2_proofs/src/dev/cost_model.rs @@ -68,6 +68,9 @@ pub struct CostOptions { /// Maximum degree of the custom gates. pub gate_degree: usize, + /// Maximum degree of the constrain system. + pub max_deg: usize, + /// A lookup over N columns with max input degree I and max table degree T. May be repeated. pub lookup: Vec, @@ -173,6 +176,9 @@ impl FromStr for Permutation { } impl Permutation { + /// Return the number of columns + pub fn nr_columns(&self) -> usize { self.columns } + fn required_degree(&self) -> usize { cmp::max(self.columns + 1, 2) } @@ -237,14 +243,6 @@ pub struct ModelCircuit { impl From for ModelCircuit { fn from(opts: CostOptions) -> Self { - let max_deg = [1, opts.gate_degree] - .iter() - .cloned() - .chain(opts.lookup.iter().map(|l| l.required_degree())) - .chain(opts.permutation.iter().map(|p| p.required_degree())) - .max() - .unwrap(); - let mut queries: Vec<_> = iter::empty() .chain(opts.advice.iter()) .chain(opts.instance.iter()) @@ -252,7 +250,7 @@ impl From for ModelCircuit { .cloned() .chain(opts.lookup.iter().flat_map(|l| l.queries())) .chain(opts.permutation.iter().flat_map(|p| p.queries())) - .chain(iter::repeat("0".parse().unwrap()).take(max_deg - 1)) + .chain(iter::repeat("0".parse().unwrap()).take(opts.max_deg - 1)) .collect(); let column_queries = queries.len(); @@ -264,7 +262,7 @@ impl From for ModelCircuit { k: opts.k, rows: opts.rows_count, table_rows: opts.table_rows_count, - max_deg, + max_deg: opts.max_deg, gate_usages: opts.gate_usages, advice_columns: opts.advice.len(), lookups: opts.lookup.len(), @@ -596,6 +594,7 @@ pub fn from_circuit_to_cost_model_options< instance, fixed, gate_degree, + max_deg: cs.degree(), lookup, permutation, gate_usages,