From 6aaebfcac9ff27b0ec254708a74b79c81934c394 Mon Sep 17 00:00:00 2001 From: Daniel Lubarov Date: Thu, 5 Aug 2021 08:03:37 -0700 Subject: [PATCH] Optimize BaseSumGate's eval_unfiltered_recursively (#155) --- src/gates/base_sum.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/gates/base_sum.rs b/src/gates/base_sum.rs index f580bf16..89edc7fa 100644 --- a/src/gates/base_sum.rs +++ b/src/gates/base_sum.rs @@ -91,9 +91,12 @@ impl, const D: usize, const B: usize> Gate for BaseSumGat constraints.push({ let mut acc = builder.one_extension(); (0..B).for_each(|i| { - let it = builder.constant_extension(F::from_canonical_usize(i).into()); - let diff = builder.sub_extension(limb, it); - acc = builder.mul_extension(acc, diff); + // We update our accumulator as: + // acc' = acc (x - i) + // = acc x + (-i) acc + // Since -i is constant, we can do this in one arithmetic_extension call. + let neg_i = -F::from_canonical_usize(i); + acc = builder.arithmetic_extension(F::ONE, neg_i, acc, limb, acc) }); acc });