Merge pull request #678 from proxima-one/fix-starky-avx

Fix starky avx
This commit is contained in:
Daniel Lubarov 2022-08-21 12:06:39 -07:00 committed by GitHub
commit 8a8b3f36aa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 24 additions and 16 deletions

View File

@ -44,12 +44,8 @@ impl<P: PackedField> ConstraintConsumer<P> {
}
}
// TODO: Do this correctly.
pub fn accumulators(self) -> Vec<P::Scalar> {
pub fn accumulators(self) -> Vec<P> {
self.constraint_accs
.into_iter()
.map(|acc| acc.as_slice()[0])
.collect()
}
/// Add one constraint valid on all rows except the last.

View File

@ -388,7 +388,7 @@ where
let quotient_values = (0..size)
.into_par_iter()
.step_by(P::WIDTH)
.map(|i_start| {
.flat_map_iter(|i_start| {
let i_next_start = (i_start + next_step) % size;
let i_range = i_start..i_start + P::WIDTH;
@ -444,11 +444,18 @@ where
);
let mut constraints_evals = consumer.accumulators();
// We divide the constraints evaluations by `Z_H(x)`.
let denominator_inv = z_h_on_coset.eval_inverse_packed(i_start);
let denominator_inv: P = z_h_on_coset.eval_inverse_packed(i_start);
for eval in &mut constraints_evals {
*eval *= denominator_inv;
}
constraints_evals
let num_challenges = alphas.len();
(0..P::WIDTH).into_iter().map(move |i| {
(0..num_challenges)
.map(|j| constraints_evals[j].as_slice()[i])
.collect()
})
})
.collect::<Vec<_>>();

View File

@ -44,12 +44,8 @@ impl<P: PackedField> ConstraintConsumer<P> {
}
}
// TODO: Do this correctly.
pub fn accumulators(self) -> Vec<P::Scalar> {
pub fn accumulators(self) -> Vec<P> {
self.constraint_accs
.into_iter()
.map(|acc| acc.as_slice()[0])
.collect()
}
/// Add one constraint valid on all rows except the last.

View File

@ -258,7 +258,7 @@ where
let quotient_values = (0..size)
.into_par_iter()
.step_by(P::WIDTH)
.map(|i_start| {
.flat_map_iter(|i_start| {
let i_next_start = (i_start + next_step) % size;
let i_range = i_start..i_start + P::WIDTH;
@ -292,13 +292,22 @@ where
permutation_check_data,
&mut consumer,
);
let mut constraints_evals = consumer.accumulators();
// We divide the constraints evaluations by `Z_H(x)`.
let denominator_inv = z_h_on_coset.eval_inverse_packed(i_start);
let denominator_inv: P = z_h_on_coset.eval_inverse_packed(i_start);
for eval in &mut constraints_evals {
*eval *= denominator_inv;
}
constraints_evals
let num_challenges = alphas.len();
(0..P::WIDTH).into_iter().map(move |i| {
(0..num_challenges)
.map(|j| constraints_evals[j].as_slice()[i])
.collect()
})
})
.collect::<Vec<_>>();