From c4fd0919b639b88faecd9f98bbb834fb6afa4a46 Mon Sep 17 00:00:00 2001 From: Jakub Nabaglo Date: Sat, 28 Aug 2021 15:00:47 -0700 Subject: [PATCH] Save 3% on eval_unfiltered_base (#206) * Save 3% on eval_unfiltered_base Again, remove a few allocations/deallocations. * Minor style --- src/gates/base_sum.rs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/gates/base_sum.rs b/src/gates/base_sum.rs index 641a8150..341d0fc1 100644 --- a/src/gates/base_sum.rs +++ b/src/gates/base_sum.rs @@ -53,12 +53,19 @@ impl, const D: usize, const B: usize> Gate for BaseSumGat fn eval_unfiltered_base(&self, vars: EvaluationVarsBase) -> Vec { 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::() + }); + constraints.extend(constraints_iter); + constraints }