Skip to content

Commit d55252a

Browse files
committed
transpose_slice_to_basis_coefficients
1 parent e553052 commit d55252a

File tree

2 files changed

+18
-9
lines changed

2 files changed

+18
-9
lines changed

crates/lean_prover/src/prove_execution.rs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -104,15 +104,8 @@ pub fn prove_execution(
104104
let dot_product_lengths: Vec<PF<EF>> = field_slice_as_base(&dot_product_columns[1]).unwrap();
105105

106106
let dot_product_computations: &[EF] = &dot_product_columns[8];
107-
let mut dot_product_computations_base = (0..DIMENSION).map(|_| Vec::new()).collect::<Vec<_>>();
108-
for row in dot_product_computations {
109-
for (j, coeff) in <EF as BasedVectorSpace<PF<EF>>>::as_basis_coefficients_slice(row)
110-
.iter()
111-
.enumerate()
112-
{
113-
dot_product_computations_base[j].push(*coeff);
114-
}
115-
}
107+
let dot_product_computations_base =
108+
transpose_slice_to_basis_coefficients::<F, EF>(dot_product_computations);
116109

117110
let n_rows_table_dot_products = dot_product_columns[0].len() - dot_product_padding_len;
118111
let log_n_rows_dot_product_table = log2_strict_usize(dot_product_columns[0].len());

crates/utils/src/misc.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,22 @@ pub fn field_slice_as_base<F: Field, EF: ExtensionField<F>>(slice: &[EF]) -> Opt
6868
slice.par_iter().map(|x| x.as_base()).collect()
6969
}
7070

71+
pub fn transpose_slice_to_basis_coefficients<F: Field, EF: ExtensionField<F>>(
72+
slice: &[EF],
73+
) -> Vec<Vec<F>> {
74+
let res = vec![F::zero_vec(slice.len()); EF::DIMENSION];
75+
slice.par_iter().enumerate().for_each(|(i, row)| {
76+
let coeffs = EF::as_basis_coefficients_slice(row);
77+
unsafe {
78+
for (j, &coeff) in coeffs.iter().enumerate() {
79+
let raw_ptr = res[j].as_ptr() as *mut F;
80+
*raw_ptr.add(i) = coeff;
81+
}
82+
}
83+
});
84+
res
85+
}
86+
7187
pub fn dot_product_with_base<EF: ExtensionField<PF<EF>>>(slice: &[EF]) -> EF {
7288
assert_eq!(slice.len(), <EF as BasedVectorSpace<PF<EF>>>::DIMENSION);
7389
(0..EF::DIMENSION)

0 commit comments

Comments
 (0)