@@ -101,6 +101,7 @@ impl<'a, B: BackendForChannel<MC>, MC: MerkleChannel> CommitmentSchemeProver<'a,
101101 pub fn build_weights_hash_map (
102102 & self ,
103103 sampled_points : & TreeVec < ColumnVec < Vec < CirclePoint < SecureField > > > > ,
104+ max_log_size : u32 ,
104105 ) -> WeightsHashMap < B >
105106 where
106107 Col < B , SecureField > : Send + Sync ,
@@ -120,16 +121,20 @@ impl<'a, B: BackendForChannel<MC>, MC: MerkleChannel> CommitmentSchemeProver<'a,
120121 } ;
121122
122123 let log_size = poly. evals . domain . log_size ( ) ;
123-
124+ // For each sample point, compute the weights needed to evaluate the polynomial at
125+ // the folded sample point.
126+ // TODO(Leo): the computation `point.repeated_double(max_log_size - log_size)` is
127+ // likely repeated a bunch of times in a typical flat air. Consider moving it
128+ // outside the loop.
124129 #[ cfg( not( feature = "parallel" ) ) ]
125- points
126- . iter ( )
127- . for_each ( | & point| compute_weights ( ( log_size , point ) ) ) ;
130+ points. iter ( ) . for_each ( | & point| {
131+ compute_weights ( ( log_size , point . repeated_double ( max_log_size - log_size ) ) )
132+ } ) ;
128133
129134 #[ cfg( feature = "parallel" ) ]
130- points
131- . par_iter ( )
132- . for_each ( | & point| compute_weights ( ( log_size , point ) ) ) ;
135+ points. par_iter ( ) . for_each ( | & point| {
136+ compute_weights ( ( log_size , point . repeated_double ( max_log_size - log_size ) ) )
137+ } ) ;
133138 } ) ;
134139
135140 weights_dashmap
@@ -147,12 +152,13 @@ impl<'a, B: BackendForChannel<MC>, MC: MerkleChannel> CommitmentSchemeProver<'a,
147152 class = "EvaluateOutOfDomain"
148153 )
149154 . entered ( ) ;
155+
156+ let max_log_size = self . trees . last ( ) . unwrap ( ) . commitment . layers . len ( ) as u32 - 1 ;
150157 let weights_hash_map = if self . store_polynomials_coefficients {
151158 None
152159 } else {
153- Some ( self . build_weights_hash_map ( & sampled_points) )
160+ Some ( self . build_weights_hash_map ( & sampled_points, max_log_size ) )
154161 } ;
155- let max_log_size = self . trees . last ( ) . unwrap ( ) . commitment . layers . len ( ) as u32 - 1 ;
156162 let samples: TreeVec < Vec < Vec < PointSample > > > = self
157163 . polynomials ( )
158164 . zip_cols ( & sampled_points)
0 commit comments