Parallelize collection into upper layers

This commit is contained in:
Dirkjan Ochtman 2021-02-02 16:22:01 +01:00
parent 07367c2022
commit dd1411949f
1 changed files with 5 additions and 3 deletions

View File

@ -10,7 +10,7 @@ use ordered_float::OrderedFloat;
use parking_lot::{Mutex, RwLock}; use parking_lot::{Mutex, RwLock};
use rand::rngs::SmallRng; use rand::rngs::SmallRng;
use rand::SeedableRng; use rand::SeedableRng;
use rayon::iter::{IntoParallelIterator, ParallelIterator}; use rayon::iter::{IndexedParallelIterator, IntoParallelIterator, ParallelIterator};
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -284,8 +284,10 @@ where
// For layers above the zero layer, make a copy of the current state of the zero layer // For layers above the zero layer, make a copy of the current state of the zero layer
// with `nearest` truncated to `M` elements. // with `nearest` truncated to `M` elements.
if layer.0 > 0 { if layer.0 > 0 {
let mut upper = Vec::with_capacity(zero.len()); let mut upper = vec![UpperNode::default(); zero.len()];
upper.extend(zero.iter().map(|zero| UpperNode::from_zero(&zero.read()))); (&zero).into_par_iter()
.map(|zero| UpperNode::from_zero(&zero.read()))
.collect_into_vec(&mut upper);
layers[layer.0 - 1] = upper; layers[layer.0 - 1] = upper;
} }
} }