Skip to content

Commit a79e9b1

Browse files
committed
perf(zeromorph fri v2): Optimize codes
1 parent d69b566 commit a79e9b1

1 file changed

Lines changed: 26 additions & 29 deletions

File tree

plonkish/plonkish_backend/src/pcs/multilinear/zeromorph_fri_v2.rs

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ where
136136

137137
let (quotients, remainder) = quotients(poly, point, |_, q| UnivariatePolynomial::new(q));
138138
let quotients_rscoded: Vec<_> = quotients
139-
.iter()
139+
.par_iter()
140140
.map(|q| {
141141
let q_coeffs = q.coeffs().to_vec();
142142
let mut new_coeffs = vec![<F as ff::Field>::ZERO; 1 << num_vars];
@@ -256,10 +256,9 @@ where
256256
.chunks(vp.vp.num_rounds * 2)
257257
.map(|chunk| {
258258
chunk
259-
.iter()
260-
.collect_vec()
259+
.to_vec()
261260
.chunks(2)
262-
.map(|chunk| chunk.iter().map(|x| **x).collect())
261+
.map(|chunk| chunk.to_vec())
263262
.collect()
264263
})
265264
.collect();
@@ -288,10 +287,9 @@ where
288287
.chunks((q_comms.len() + 1) * 2)
289288
.map(|chunk| {
290289
chunk
291-
.iter()
292-
.collect_vec()
290+
.to_vec()
293291
.chunks(2)
294-
.map(|chunk| chunk.iter().map(|x| **x).collect())
292+
.map(|chunk| chunk.to_vec())
295293
.collect()
296294
})
297295
.collect();
@@ -306,15 +304,13 @@ where
306304
.chunks((q_comms.len() + 1) * (vp.vp.num_rounds + vp.vp.log_rate) * 2)
307305
.map(|chunk| {
308306
chunk
309-
.iter()
310-
.collect_vec()
307+
.to_vec()
311308
.chunks((vp.vp.num_rounds + vp.vp.log_rate) * 2)
312309
.map(|chunk| {
313310
chunk
314-
.iter()
315-
.collect_vec()
311+
.to_vec()
316312
.chunks(2)
317-
.map(|chunk| chunk.iter().map(|x| (**x).clone()).collect())
313+
.map(|chunk| chunk.to_vec())
318314
.collect()
319315
})
320316
.collect()
@@ -693,8 +689,8 @@ pub fn open_helper<H: Hash>(
693689
//construct evaluation codeword
694690
let num_vars = pp.num_vars;
695691
assert_eq!(num_vars, qs.len());
696-
let mut denominator = Vec::new();
697-
let mut numerator = Vec::new();
692+
let mut denominator = vec![<F as ff::Field>::ZERO; 1 << (num_vars + pp.log_rate)];
693+
let mut numerator = vec![<F as ff::Field>::ZERO; 1 << (num_vars + pp.log_rate)];
698694
let last_level = &pp.table_w_weights[pp.table_w_weights.len() - 1];
699695
let dft = p3_dft::Radix2Dit::default();
700696

@@ -861,23 +857,22 @@ pub fn open_helper<H: Hash>(
861857
reverse_index_bits_in_place(&mut test_slice);
862858
}
863859

864-
let mut d_pointer = 0;
865860
let mut rbo_g = g.clone();
866861
reverse_index_bits_in_place(&mut rbo_g);
867-
for j in 0..(1 << (num_vars + pp.log_rate)) {
868-
let mut x: F = last_level[d_pointer].0;
869-
if j % 2 != 0 {
870-
d_pointer = d_pointer + 1;
871-
x = -x;
862+
parallelize(&mut denominator, |(denominator, start)| {
863+
for (i, d) in denominator.iter_mut().enumerate() {
864+
let mut x: F = last_level[(start + i) / 2].0;
865+
if (start + i) % 2 != 0 {
866+
x = -x;
867+
}
868+
*d = x - point;
872869
}
873-
// assert_eq!(
874-
// x, test_slice[j],
875-
// "j {:?}, x {:?}, test_slice[j] {:?}",
876-
// j, x, test_slice[j]
877-
// );
878-
denominator.push(x - point);
879-
numerator.push(rbo_g[j] - eval);
880-
}
870+
});
871+
parallelize(&mut numerator, |(numerator, start)| {
872+
for (i, n) in numerator.iter_mut().enumerate() {
873+
*n = rbo_g[start + i] - eval;
874+
}
875+
});
881876

882877
if cfg!(feature = "sanity-check") {
883878
let mut numerator_cp = numerator.clone();
@@ -966,7 +961,9 @@ pub fn open_helper<H: Hash>(
966961
let indices = &query.1;
967962
indices.into_iter().enumerate().for_each(|(i, q)| {
968963
let root = trees[i][trees[i].len() - 1][0].clone();
969-
println!("write merkle path q {:?}, root {:?}", q, root);
964+
if cfg!(feature = "sanity-check") {
965+
println!("write merkle path q {:?}, root {:?}", q, root);
966+
}
970967
write_merkle_path::<H, F>(&trees[i], *q, transcript);
971968
})
972969
});

0 commit comments

Comments
 (0)