Skip to content

Commit c5ee0d3

Browse files
committed
skip one polynomial evaluation at each first round of the logup* GKRs
1 parent b40e327 commit c5ee0d3

File tree

1 file changed

+12
-32
lines changed

1 file changed

+12
-32
lines changed

crates/lookup/src/quotient_gkr.rs

Lines changed: 12 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -117,25 +117,17 @@ where
117117

118118
let eq_poly = eval_eq(&claim.point.0[1..]);
119119

120-
let mut sums_x = EF::zero_vec(up_layer.len() / 4);
121-
let mut sums_one_minus_x = EF::zero_vec(up_layer.len() / 4);
122-
123-
sums_x
124-
.par_iter_mut()
125-
.zip(sums_one_minus_x.par_iter_mut())
126-
.enumerate()
127-
.for_each(|(i, (x, one_minus_x))| {
120+
let sum_x = (0..up_layer.len() / 4)
121+
.into_par_iter()
122+
.map(|i| {
128123
let eq_eval = eq_poly[i];
129-
let u0 = up_layer[i];
130-
let u1 = up_layer[quarter_len + i];
131124
let u2 = up_layer[mid_len + i];
132125
let u3 = up_layer[mid_len + quarter_len + i];
133-
*x = eq_eval * u2 * u3;
134-
*one_minus_x = eq_eval * (u0 * u3 + u1 * u2);
135-
});
126+
eq_eval * u2 * u3
127+
})
128+
.sum::<EF>();
136129

137-
let sum_x = sums_x.into_par_iter().sum::<EF>();
138-
let sum_one_minus_x = sums_one_minus_x.into_par_iter().sum::<EF>();
130+
let sum_one_minus_x = (claim.value - sum_x * claim.point[0]) / (EF::ONE - claim.point[0]);
139131

140132
let mid_len = up_layer.len() / 2;
141133
let quarter_len = mid_len / 2;
@@ -244,40 +236,28 @@ where
244236

245237
let mut eq_poly_packed = pack_extension(&eq_poly);
246238

247-
let (sum_x_packed, sum_one_minus_x_packed): (EFPacking<EF>, EFPacking<EF>) = (0
248-
..n_non_zeros_numerator - quarter_len_packed)
239+
let sum_x_packed: EFPacking<EF> = (0..n_non_zeros_numerator - quarter_len_packed)
249240
.into_par_iter()
250241
.map(|i| {
251242
let eq_eval = eq_poly_packed[i];
252-
let u0 = up_layer_packed[i];
253-
let u1 = up_layer_packed[quarter_len_packed + i];
254243
let u2 = up_layer_packed[mid_len_packed + i];
255244
let u3 = up_layer_packed[three_quarter_len_packed + i];
256-
let x = eq_eval * u2 * u3;
257-
let one_minus_x = eq_eval * (u0 * u3 + u1 * u2);
258-
(x, one_minus_x)
245+
eq_eval * u2 * u3
259246
})
260247
.chain(
261248
(n_non_zeros_numerator - quarter_len_packed..quarter_len_packed)
262249
.into_par_iter()
263250
.map(|i| {
264251
let eq_eval = eq_poly_packed[i];
265-
let u0 = up_layer_packed[i];
266252
let u2 = up_layer_packed[mid_len_packed + i];
267253
let u3 = up_layer_packed[three_quarter_len_packed + i];
268-
let eq_eval_times_u3 = eq_eval * u3;
269-
let x = eq_eval_times_u3 * u2;
270-
let one_minus_x = eq_eval_times_u3 * u0;
271-
(x, one_minus_x)
254+
eq_eval * u3 * u2
272255
}),
273256
)
274-
.reduce(
275-
|| (EFPacking::<EF>::ZERO, EFPacking::<EF>::ZERO),
276-
|(acc_x, acc_one_minus_x), (x, one_minus_x)| (acc_x + x, acc_one_minus_x + one_minus_x),
277-
);
257+
.sum();
278258

279259
let sum_x = EFPacking::<EF>::to_ext_iter([sum_x_packed]).sum::<EF>();
280-
let sum_one_minus_x = EFPacking::<EF>::to_ext_iter([sum_one_minus_x_packed]).sum::<EF>();
260+
let sum_one_minus_x = (claim.value - sum_x * claim.point[0]) / (EF::ONE - claim.point[0]);
281261

282262
let first_sumcheck_polynomial =
283263
&DensePolynomial::new(vec![

0 commit comments

Comments
 (0)