mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-07 16:23:12 +00:00
commit
ee5d1aa6c8
@ -1,6 +1,6 @@
|
|||||||
use alloc::vec;
|
|
||||||
use alloc::vec::Vec;
|
use alloc::vec::Vec;
|
||||||
|
|
||||||
|
use plonky2_maybe_rayon::*;
|
||||||
#[doc(inline)]
|
#[doc(inline)]
|
||||||
pub use plonky2_util::*;
|
pub use plonky2_util::*;
|
||||||
|
|
||||||
@ -20,35 +20,11 @@ pub(crate) fn transpose_poly_values<F: Field>(polys: Vec<PolynomialValues<F>>) -
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn transpose<F: Field>(matrix: &[Vec<F>]) -> Vec<Vec<F>> {
|
pub fn transpose<F: Field>(matrix: &[Vec<F>]) -> Vec<Vec<F>> {
|
||||||
let l = matrix.len();
|
let len = matrix[0].len();
|
||||||
let w = matrix[0].len();
|
(0..len)
|
||||||
|
.into_par_iter()
|
||||||
let mut transposed = vec![vec![]; w];
|
.map(|i| matrix.iter().map(|row| row[i]).collect())
|
||||||
for i in 0..w {
|
.collect()
|
||||||
transposed[i].reserve_exact(l);
|
|
||||||
unsafe {
|
|
||||||
// After .reserve_exact(l), transposed[i] will have capacity at least l. Hence, set_len
|
|
||||||
// will not cause the buffer to overrun.
|
|
||||||
transposed[i].set_len(l);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Optimization: ensure the larger loop is outside.
|
|
||||||
if w >= l {
|
|
||||||
for i in 0..w {
|
|
||||||
for j in 0..l {
|
|
||||||
transposed[i][j] = matrix[j][i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for j in 0..l {
|
|
||||||
for i in 0..w {
|
|
||||||
transposed[i][j] = matrix[j][i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
transposed
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn reverse_bits(n: usize, num_bits: usize) -> usize {
|
pub(crate) fn reverse_bits(n: usize, num_bits: usize) -> usize {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user