[keccak] Refactor lookup table and rho table#589
Conversation
57d8386 to
4bbb612
Compare
6a0a2ca to
ebfe428
Compare
4c57077 to
3e9efa7
Compare
149dc7b to
6ffcb67
Compare
6ffcb67 to
ff2b14a
Compare
ff2b14a to
d87a5b3
Compare
CPerezz
left a comment
There was a problem hiding this comment.
LGTM. Do we have any numbers in regards any performance upgrades or downgrades?
|
this branch main |
800037f to
349e2d9
Compare
|
Coul you edit your local halo2 version and include this modified pub fn run<ConcreteCircuit: Circuit<F>>(
k: u32,
circuit: &ConcreteCircuit,
instance: Vec<Vec<F>>,
) -> Result<Self, Error> {
let n = 1 << k;
let mut cs = ConstraintSystem::default();
let config = ConcreteCircuit::configure(&mut cs);
let cs = cs;
if n < cs.minimum_rows() {
return Err(Error::not_enough_rows_available(k));
}
if instance.len() != cs.num_instance_columns {
return Err(Error::InvalidInstances);
}
let instance = instance
.into_iter()
.map(|mut instance| {
if instance.len() > n - (cs.blinding_factors() + 1) {
return Err(Error::InstanceTooLarge);
}
instance.resize(n, F::zero());
Ok(instance)
})
.collect::<Result<Vec<_>, _>>()?;
// Fixed columns contain no blinding factors.
let fixed = vec![vec![CellValue::Unassigned; n]; cs.num_fixed_columns];
let selectors = vec![vec![false; n]; cs.num_selectors];
// Advice columns contain blinding factors.
let blinding_factors = cs.blinding_factors();
let usable_rows = n - (blinding_factors + 1);
let advice = vec![
{
let mut column = vec![CellValue::Unassigned; n];
// Poison unusable rows.
for (i, cell) in column.iter_mut().enumerate().skip(usable_rows) {
*cell = CellValue::Poison(i);
}
column
};
cs.num_advice_columns
];
let permutation = permutation::keygen::Assembly::new(n, &cs.permutation);
let constants = cs.constants.clone();
let mut prover = MockProver {
k,
n: n as u32,
cs,
regions: vec![],
current_region: None,
fixed,
advice,
instance,
selectors,
permutation,
usable_rows: 0..usable_rows,
};
ConcreteCircuit::FloorPlanner::synthesize(&mut prover, circuit, config, constants)?;
let (cs, selector_polys) = prover.cs.compress_selectors(prover.selectors.clone());
prover.cs = cs.clone();
prover.fixed.extend(selector_polys.into_iter().map(|poly| {
let mut v = vec![CellValue::Unassigned; n];
for (v, p) in v.iter_mut().zip(&poly[..]) {
*v = CellValue::Assigned(*p);
}
v
}));
println!("Num advice columns: {}", cs.num_advice_columns);
println!("Num fixed columns: {}", cs.num_fixed_columns);
println!("Num instance columns: {}", cs.num_instance_columns);
println!("Num lookups: {}", prover.cs.lookups.len());
println!("Num gates: {}", prover.cs.gates.len());
let mut num_polys = 0;
let mut max_degree_poly = 0;
let mut max_degree_poly_details = String::new();
for gate in prover.cs.gates.iter() {
num_polys += gate.polynomials().len();
for (idx, poly) in gate.polynomials().iter().enumerate() {
if poly.degree() > max_degree_poly {
max_degree_poly_details = format!("{}", gate.constraint_name(idx));
max_degree_poly = poly.degree();
}
}
}
let mut max_degree_lookup_input = 0;
let mut max_degree_lookup_input_descrip = String::new();
let mut max_degree_lookup = 0;
let mut max_degree_lookup_descrip = String::new();
for lookup in prover.cs.lookups.iter() {
for input in lookup.input_expressions.iter() {
if input.degree() > max_degree_lookup_input {
max_degree_lookup_input = input.degree();
max_degree_lookup_input_descrip = format!("lookup input '{}'", lookup.name);
}
}
for table in lookup.table_expressions.iter() {
if table.degree() > max_degree_lookup {
max_degree_lookup = table.degree();
max_degree_lookup_descrip = format!("lookup table '{}'", lookup.name);
}
}
}
println!("num polys: {}", num_polys);
println!(
"max_degree_poly: {} - {}",
max_degree_poly, max_degree_poly_details
);
println!(
"max_degree_lookup_input: {} - {}",
max_degree_lookup_input, max_degree_lookup_input_descrip
);
println!(
"max_degree_lookup: {} - {}",
max_degree_lookup, max_degree_lookup_descrip
);
Ok(prover)
}Then you should just run the tests with |
|
Here you go |
These are the results of this branch? Do you have the ones for |
|
The one from |
|
Ohh that's right @ChihChengLiang . Have you been able to print the resulting circuit to see if there are any major changes? Or you'd say it's not necessary? |
|
It might make more sense to print the circuit layout and compare benchs in #596. This PR changed nothing important on the performance. |
349e2d9 to
b89328f
Compare
|
@CPerezz @han0110 Thanks for the review. @miha-stopar feel free to give a post-merge review or no review at all. |
As mentioned in #489 (comment) we're moving toward 4 lookup gates that each have 3 table columns.
In this PR we did the following stuff: