pub struct LastArrival<'a> { /* private fields */ }Expand description
One output box of a Levels::shared_by share, held whole by one run or in parts by several
(Portion::holders). A run holding it whole hands its sum straight on to the output. Each run
holding a part parks it in a slot of its own and counts itself in at the box; the last to count
adds the box’s slots in the order of their runs and hands the total on to the output.
No run waits on another, so the merge does not depend on how the device schedules cubes. The parts are added in the order of their runs, so the total is the same bits whichever run arrives last.
The slots are one operand over the output’s axes, in its order, of two boxes a run
(Partitioning::arrival_slots): the first holds the part of the box the run starts in, the
second the part of the box it ends in. A run’s other boxes are its own whole, so no part needs a
third. The counters are one u32 a box (Partitioning::arrival_counters), holding zero, and
left holding zero. A count publishes the run’s part at device scope first, so it runs only where
the runtime hands one cube’s writes to another within a dispatch (device_memory_scope).
Implementations§
Source§impl<'a> LastArrival<'a>
impl<'a> LastArrival<'a>
Sourcepub fn hand_on(&self, sum: &Tile, out: &mut Tile)
pub fn hand_on(&self, sum: &Tile, out: &mut Tile)
Hand sum, opened on tile, on to out with a cast: drained straight
into it where this run holds the box whole, parked and merged by the last run to arrive
otherwise. Every unit of the cube reaches it.
Sourcepub fn __expand_tile(
scope: &Scope,
this: &<Self as CubeType>::ExpandType,
) -> <Tile as CubeType>::ExpandType
pub fn __expand_tile( scope: &Scope, this: &<Self as CubeType>::ExpandType, ) -> <Tile as CubeType>::ExpandType
This run’s slot of its box: what a sum it hands on is opened on.
Sourcepub fn __expand_hand_on(
scope: &Scope,
this: &<Self as CubeType>::ExpandType,
sum: &<Tile as CubeType>::ExpandType,
out: &mut <Tile as CubeType>::ExpandType,
)
pub fn __expand_hand_on( scope: &Scope, this: &<Self as CubeType>::ExpandType, sum: &<Tile as CubeType>::ExpandType, out: &mut <Tile as CubeType>::ExpandType, )
Hand sum, opened on tile, on to out with a cast: drained straight
into it where this run holds the box whole, parked and merged by the last run to arrive
otherwise. Every unit of the cube reaches it.
Trait Implementations§
Source§impl<'a> CubeType for LastArrival<'a>
impl<'a> CubeType for LastArrival<'a>
type ExpandType = LastArrivalExpand<'a>
Auto Trait Implementations§
impl<'a> !Send for LastArrival<'a>
impl<'a> !Sync for LastArrival<'a>
impl<'a> Freeze for LastArrival<'a>
impl<'a> RefUnwindSafe for LastArrival<'a>
impl<'a> Unpin for LastArrival<'a>
impl<'a> UnsafeUnpin for LastArrival<'a>
impl<'a> UnwindSafe for LastArrival<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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