ParXap

Struct ParXap 

Source
pub struct ParXap<I, Vo, X1, R = DefaultRunner>
where R: ParallelRunner, I: ConcurrentIter, Vo: TransformableValues<Fallibility = Infallible>, X1: Fn(I::Item) -> Vo + Sync,
{ /* private fields */ }
Expand description

A parallel iterator that xaps inputs.

xap is a generalization of one-to-one map, filter-map and flat-map operations.

Implementations§

Source§

impl<E, T, R, Vo, X1> ParXap<ConcurrentRecursiveIter<T, E>, Vo, X1, R>
where T: Send + Sync, E: Fn(&T, &Queue<'_, T>) + Sync, R: ParallelRunner + Clone, X1: Fn(T) -> Vo + Sync, Vo: TransformableValues<Fallibility = Infallible>,

Source

pub fn linearize(self) -> ParXap<ConIterVec<T>, Vo, X1, R>

Even with exact length, a recursive parallel iterator is much more dynamic than a flat parallel iterator. This dynamic nature of shrinking and growing concurrently requires a greater parallelization overhead. An alternative approach is to eagerly discover all tasks and then perform the parallel computation over the flattened input of tasks.

The linearize approach works in two parallelization phases:

  • first phase to linearize the inputs in parallel over the non-linear data, and
  • second phase to perform the computation in parallel over the linear data.

See into_par_rec and into_par_rec_exact for examples.

Trait Implementations§

Source§

impl<I, Vo, X1, R> ParIter<R> for ParXap<I, Vo, X1, R>
where R: ParallelRunner, I: ConcurrentIter, Vo: TransformableValues<Fallibility = Infallible>, X1: Fn(I::Item) -> Vo + Sync,

Source§

type Item = <Vo as Values>::Item

Element type of the parallel iterator.
Source§

fn con_iter(&self) -> &impl ConcurrentIter

Returns a reference to the input concurrent iterator.
Source§

fn params(&self) -> Params

Parameters of the parallel iterator. Read more
Source§

fn num_threads(self, num_threads: impl Into<NumThreads>) -> Self

Sets the number of threads to be used in the parallel execution. Integers can be used as the argument with the following mapping: Read more
Source§

fn chunk_size(self, chunk_size: impl Into<ChunkSize>) -> Self

Sets the number of elements to be pulled from the concurrent iterator during the parallel execution. When integers are used as argument, the following mapping applies: Read more
Source§

fn iteration_order(self, collect: IterationOrder) -> Self

Sets the iteration order of the parallel computation. Read more
Source§

fn with_runner<Q: ParallelRunner>( self, orchestrator: Q, ) -> impl ParIter<Q, Item = Self::Item>

Rather than the DefaultRunner, uses the parallel runner Q which implements ParallelRunner. Read more
Source§

fn using<U, F>( self, using: F, ) -> impl ParIterUsing<UsingFun<F, U>, R, Item = <Self as ParIter<R>>::Item>
where U: 'static, F: Fn(usize) -> U + Sync,

Converts the ParIter into ParIterUsing which will have access to a mutable reference of the used variable throughout the computation. Read more
Source§

fn using_clone<U>( self, value: U, ) -> impl ParIterUsing<UsingClone<U>, R, Item = <Self as ParIter<R>>::Item>
where U: Clone + 'static,

Converts the ParIter into ParIterUsing which will have access to a mutable reference of the used variable throughout the computation. Read more
Source§

fn map<Out, Map>(self, map: Map) -> impl ParIter<R, Item = Out>
where Map: Fn(Self::Item) -> Out + Sync + Clone,

Takes a closure map and creates a parallel iterator which calls that closure on each element. Read more
Source§

fn filter<Filter>(self, filter: Filter) -> impl ParIter<R, Item = Self::Item>
where Filter: Fn(&Self::Item) -> bool + Sync + Clone,

Creates an iterator which uses a closure filter to determine if an element should be yielded. Read more
Source§

fn flat_map<IOut, FlatMap>( self, flat_map: FlatMap, ) -> impl ParIter<R, Item = IOut::Item>
where IOut: IntoIterator, FlatMap: Fn(Self::Item) -> IOut + Sync + Clone,

Creates an iterator that works like map, but flattens nested structure. Read more
Source§

fn filter_map<Out, FilterMap>( self, filter_map: FilterMap, ) -> impl ParIter<R, Item = Out>
where FilterMap: Fn(Self::Item) -> Option<Out> + Sync + Clone,

Creates an iterator that both filters and maps. Read more
Source§

fn take_while<While>( self, take_while: While, ) -> impl ParIter<R, Item = Self::Item>
where While: Fn(&Self::Item) -> bool + Sync + Clone,

Creates an iterator that yields elements based on the predicate take_while. Read more
Source§

fn into_fallible_result<Out, Err>( self, ) -> impl ParIterResult<R, Item = Out, Err = Err>
where Self::Item: IntoResult<Out, Err>,

Transforms a parallel iterator where elements are of the result type; i.e., ParIter<R, Item = Result<T, E>>, into fallible parallel iterator with item type T and error type E; i.e., into ParIterResult<R, Item = T, Err = E>. Read more
Source§

fn collect_into<C>(self, output: C) -> C
where C: ParCollectInto<Self::Item>,

Collects all the items from an iterator into a collection. Read more
Source§

fn reduce<Reduce>(self, reduce: Reduce) -> Option<Self::Item>
where Self::Item: Send, Reduce: Fn(Self::Item, Self::Item) -> Self::Item + Sync,

Reduces the elements to a single one, by repeatedly applying a reducing operation. Read more
Source§

fn first(self) -> Option<Self::Item>
where Self::Item: Send,

Returns the first (or any) element of the iterator; returns None if it is empty. Read more
Source§

fn with_pool<P: ParThreadPool>( self, pool: P, ) -> impl ParIter<RunnerWithPool<P, R::Executor>, Item = Self::Item>

Rather than DefaultPool, uses the parallel runner with the given pool implementing ParThreadPool. Read more
Source§

fn into_fallible_option<T>(self) -> impl ParIterOption<R, Item = T>
where Self::Item: IntoOption<T>,

Transforms a parallel iterator where elements are of the option type; i.e., ParIter<R, Item = Option<T>>, into fallible parallel iterator with item type T; i.e., into ParIterOption<R, Item = T>. Read more
Source§

fn inspect<Operation>( self, operation: Operation, ) -> impl ParIter<R, Item = Self::Item>
where Operation: Fn(&Self::Item) + Sync + Clone,

Does something with each element of an iterator, passing the value on. Read more
Source§

fn map_while<Out, MapWhile>( self, map_while: MapWhile, ) -> impl ParIter<R, Item = Out>
where MapWhile: Fn(Self::Item) -> Option<Out> + Sync + Clone,

Creates an iterator that both yields elements based on the predicate map_while and maps. Read more
Source§

fn copied<'a, T>(self) -> impl ParIter<R, Item = T>
where T: 'a + Copy, Self: ParIter<R, Item = &'a T>,

Creates an iterator which copies all of its elements. Read more
Source§

fn cloned<'a, T>(self) -> impl ParIter<R, Item = T>
where T: 'a + Clone, Self: ParIter<R, Item = &'a T>,

Creates an iterator which clones all of its elements. Read more
Source§

fn flatten(self) -> impl ParIter<R, Item = <Self::Item as IntoIterator>::Item>
where Self::Item: IntoIterator,

Creates an iterator that flattens nested structure. Read more
Source§

fn collect<C>(self) -> C
where C: ParCollectInto<Self::Item>,

Transforms an iterator into a collection. Read more
Source§

fn all<Predicate>(self, predicate: Predicate) -> bool
where Self::Item: Send, Predicate: Fn(&Self::Item) -> bool + Sync,

Tests if every element of the iterator matches a predicate. Read more
Source§

fn any<Predicate>(self, predicate: Predicate) -> bool
where Self::Item: Send, Predicate: Fn(&Self::Item) -> bool + Sync,

Tests if any element of the iterator matches a predicate. Read more
Source§

fn count(self) -> usize

Consumes the iterator, counting the number of iterations and returning it. Read more
Source§

fn for_each<Operation>(self, operation: Operation)
where Operation: Fn(Self::Item) + Sync,

Calls a closure on each element of an iterator. Read more
Source§

fn max(self) -> Option<Self::Item>
where Self::Item: Ord + Send,

Returns the maximum element of an iterator. Read more
Source§

fn max_by<Compare>(self, compare: Compare) -> Option<Self::Item>
where Self::Item: Send, Compare: Fn(&Self::Item, &Self::Item) -> Ordering + Sync,

Returns the element that gives the maximum value with respect to the specified compare function. Read more
Source§

fn max_by_key<Key, GetKey>(self, key: GetKey) -> Option<Self::Item>
where Self::Item: Send, Key: Ord, GetKey: Fn(&Self::Item) -> Key + Sync,

Returns the element that gives the maximum value from the specified function. Read more
Source§

fn min(self) -> Option<Self::Item>
where Self::Item: Ord + Send,

Returns the minimum element of an iterator. Read more
Source§

fn min_by<Compare>(self, compare: Compare) -> Option<Self::Item>
where Self::Item: Send, Compare: Fn(&Self::Item, &Self::Item) -> Ordering + Sync,

Returns the element that gives the minimum value with respect to the specified compare function. Read more
Source§

fn min_by_key<Key, GetKey>(self, get_key: GetKey) -> Option<Self::Item>
where Self::Item: Send, Key: Ord, GetKey: Fn(&Self::Item) -> Key + Sync,

Returns the element that gives the minimum value from the specified function. Read more
Source§

fn sum<Out>(self) -> Out
where Self::Item: Sum<Out>, Out: Send,

Sums the elements of an iterator. Read more
Source§

fn find<Predicate>(self, predicate: Predicate) -> Option<Self::Item>
where Self::Item: Send, Predicate: Fn(&Self::Item) -> bool + Sync,

Searches for an element of an iterator that satisfies a predicate. Read more
Source§

impl<I, Vo, X1, R> Send for ParXap<I, Vo, X1, R>
where R: ParallelRunner, I: ConcurrentIter, Vo: TransformableValues<Fallibility = Infallible>, X1: Fn(I::Item) -> Vo + Sync,

Source§

impl<I, Vo, X1, R> Sync for ParXap<I, Vo, X1, R>
where R: ParallelRunner, I: ConcurrentIter, Vo: TransformableValues<Fallibility = Infallible>, X1: Fn(I::Item) -> Vo + Sync,

Auto Trait Implementations§

§

impl<I, Vo, X1, R> Freeze for ParXap<I, Vo, X1, R>
where R: Freeze, I: Freeze, X1: Freeze,

§

impl<I, Vo, X1, R> RefUnwindSafe for ParXap<I, Vo, X1, R>

§

impl<I, Vo, X1, R> Unpin for ParXap<I, Vo, X1, R>
where R: Unpin, I: Unpin, X1: Unpin,

§

impl<I, Vo, X1, R> UnwindSafe for ParXap<I, Vo, X1, R>
where R: UnwindSafe, I: UnwindSafe, X1: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> SoM<T> for T

Source§

fn get_ref(&self) -> &T

Returns a reference to self.
Source§

fn get_mut(&mut self) -> &mut T

Returns a mutable reference to self.
Source§

impl<T> SoR<T> for T

Source§

fn get_ref(&self) -> &T

Returns a reference to self.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Erased for T