From 366912b0c420d7ced241ed5a9d05774a9bd502f4 Mon Sep 17 00:00:00 2001 From: David Nevado Date: Thu, 29 Aug 2024 09:51:47 +0200 Subject: [PATCH] feat: Compute L0 denominators with fft --- halo2_backend/src/plonk/keygen.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/halo2_backend/src/plonk/keygen.rs b/halo2_backend/src/plonk/keygen.rs index 71766b01c..3d701149a 100644 --- a/halo2_backend/src/plonk/keygen.rs +++ b/halo2_backend/src/plonk/keygen.rs @@ -108,7 +108,6 @@ where } // Compute fixeds - let fixed_polys: Vec<_> = circuit .preprocessing .fixed @@ -161,11 +160,16 @@ where }; // Compute denominators. - let mut acc = zeta; - l0.iter_mut().for_each(|e| { - *e = acc - one; - acc *= w; - }); + // (X-1) in {z, zw, zw^2,... zw^(extended_n)} equals + // (zX-1) in {1, w, ... w^{extended_n} wich can be computed with fft. + l0[0] = -one; + l0[1] = zeta; + halo2curves::fft::best_fft( + &mut l0, + vk.domain.get_extended_omega(), + vk.domain.extended_k(), + ); + l0.batch_invert(); // Compute numinators.