Save 3% on eval_unfiltered_base (#206)

* Save 3% on eval_unfiltered_base

Again, remove a few allocations/deallocations.

* Minor style
This commit is contained in:
Jakub Nabaglo 2021-08-28 15:00:47 -07:00 committed by GitHub
parent 21b263ee3e
commit c4fd0919b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -53,12 +53,19 @@ impl<F: Extendable<D>, const D: usize, const B: usize> Gate<F, D> for BaseSumGat
fn eval_unfiltered_base(&self, vars: EvaluationVarsBase<F>) -> Vec<F> {
let sum = vars.local_wires[Self::WIRE_SUM];
let limbs = vars.local_wires[self.limbs()].to_vec();
let computed_sum = reduce_with_powers(&limbs, F::from_canonical_usize(B));
let mut constraints = vec![computed_sum - sum];
for limb in limbs {
constraints.push((0..B).map(|i| limb - F::from_canonical_usize(i)).product());
}
let limbs = &vars.local_wires[self.limbs()];
let computed_sum = reduce_with_powers(limbs, F::from_canonical_usize(B));
let mut constraints = Vec::with_capacity(limbs.len() + 1);
constraints.push(computed_sum - sum);
let constraints_iter = limbs.iter().map(|&limb| {
(0..B)
.map(|i| limb - F::from_canonical_usize(i))
.product::<F>()
});
constraints.extend(constraints_iter);
constraints
}