pub struct SmemCyclicAccumulation<A: Numeric> {
pub source: Tile,
/* private fields */
}Expand description
A cube’s shared-memory accumulator over one box, summing in A and read back at the element
of the tile it was opened over, that writers writers reach exclusively, on the
Cyclic schedule.
A writer drains its partial with drain (or
drain_at for a partial over one window), which runs every
round and synchronizes the cube after each; once every writer has, source holds the sum.
Every unit of the cube reaches the drain, each plane with the partial and window it holds.
Fields§
§source: TileReads the sum back at the opened tile’s element; valid only once every writer has drained.
Implementations§
Source§impl<A: Numeric> SmemCyclicAccumulation<A>
impl<A: Numeric> SmemCyclicAccumulation<A>
Sourcepub fn drain(&self, partial: &Tile, writer: usize)
pub fn drain(&self, partial: &Tile, writer: usize)
Drain partial, an accumulator over the whole box, every round of the schedule, the cube
synchronized after each: each unit lands its plane’s fragments of the round’s chunk as
writer, its plane’s place among the writers. Once every writer of the cube has, the sum is
in source.
Sourcepub fn drain_at(&self, partial: &Tile, window: &Region, writer: usize)
pub fn drain_at(&self, partial: &Tile, window: &Region, writer: usize)
drain for a partial over one window of the box, as a
kernel that walks its planes itself holds one.
Sourcepub fn __expand_drain(
scope: &Scope,
this: &<Self as CubeType>::ExpandType,
partial: &<Tile as CubeType>::ExpandType,
writer: <usize as CubeType>::ExpandType,
)
pub fn __expand_drain( scope: &Scope, this: &<Self as CubeType>::ExpandType, partial: &<Tile as CubeType>::ExpandType, writer: <usize as CubeType>::ExpandType, )
Drain partial, an accumulator over the whole box, every round of the schedule, the cube
synchronized after each: each unit lands its plane’s fragments of the round’s chunk as
writer, its plane’s place among the writers. Once every writer of the cube has, the sum is
in source.
Sourcepub fn __expand_drain_at(
scope: &Scope,
this: &<Self as CubeType>::ExpandType,
partial: &<Tile as CubeType>::ExpandType,
window: &<Region as CubeType>::ExpandType,
writer: <usize as CubeType>::ExpandType,
)
pub fn __expand_drain_at( scope: &Scope, this: &<Self as CubeType>::ExpandType, partial: &<Tile as CubeType>::ExpandType, window: &<Region as CubeType>::ExpandType, writer: <usize as CubeType>::ExpandType, )
drain for a partial over one window of the box, as a
kernel that walks its planes itself holds one.
Trait Implementations§
Source§impl<A: Numeric> CubeType for SmemCyclicAccumulation<A>
impl<A: Numeric> CubeType for SmemCyclicAccumulation<A>
type ExpandType = SmemCyclicAccumulationExpand<A>
Auto Trait Implementations§
impl<A> !Send for SmemCyclicAccumulation<A>
impl<A> !Sync for SmemCyclicAccumulation<A>
impl<A> Freeze for SmemCyclicAccumulation<A>
impl<A> RefUnwindSafe for SmemCyclicAccumulation<A>
impl<A> Unpin for SmemCyclicAccumulation<A>
impl<A> UnsafeUnpin for SmemCyclicAccumulation<A>
impl<A> UnwindSafe for SmemCyclicAccumulation<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