pub enum Delivery {
SyncPerUnit,
AsyncPerUnit,
AsyncBulk,
Tma,
Procedural,
}Expand description
Who moves an operand into a stage, and whether its bytes have landed when the fill returns.
Variants§
SyncPerUnit
Every unit loads its own lines and stores them, through its registers: landed when the fill returns, and a line can be decoded on its way.
AsyncPerUnit
Every unit hands its own lines to the copy engine (cp.async), memory to memory: they land
after the fill returns, as they lie, and something the slot waits on tracks them.
AsyncBulk
One unit hands the whole stage to the copy engine as one contiguous run
(cp.async.bulk): it lands after the fill returns, counted in bytes on the slot’s barrier.
Tma
One unit hands the stage’s box to the TMA engine through a tensor map
(cp.async.bulk.tensor): it lands after the fill returns, counted in bytes on the slot’s
barrier.
Procedural
Every unit computes its values from their coordinates: nothing is read, and the stage holds them when the fill returns.
Implementations§
Source§impl Delivery
impl Delivery
Sourcepub const TMA_STAGE_ALIGNMENT: usize = 1024
pub const TMA_STAGE_ALIGNMENT: usize = 1024
The byte alignment a stage a Tma box lands in starts on: the span a
128-byte swizzle repeats over, which the engine keys off the address, so a stage’s first
row takes the first key as the fragment reading it does. A launch sizing its shared memory
counts what aligning a stage to it can cost.
Sourcepub fn moves(self, stage: &Space) -> Result<(), Refusal>
pub fn moves(self, stage: &Space) -> Result<(), Refusal>
Whether this delivery moves stage in one transfer, and why not where it cannot.
pub fn is_tma(&self) -> bool
Trait Implementations§
impl Copy for Delivery
impl Eq for Delivery
impl StructuralPartialEq for Delivery
Auto Trait Implementations§
impl Freeze for Delivery
impl RefUnwindSafe for Delivery
impl Send for Delivery
impl Sync for Delivery
impl Unpin for Delivery
impl UnsafeUnpin for Delivery
impl UnwindSafe for Delivery
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> CloneExpand for Twhere
T: Clone,
impl<T> CloneExpand for Twhere
T: Clone,
fn __expand_clone_method(&self, _: &Scope) -> T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> CompilationArg for T
impl<T> CompilationArg for T
Source§fn dynamic_cast<Arg>(&self) -> Argwhere
Arg: CompilationArg,
fn dynamic_cast<Arg>(&self) -> Argwhere
Arg: CompilationArg,
impl<T> CubeComptime for T
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.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<K, Q> Equivalent<Q> for K
impl<K, Q> Equivalent<Q> for K
Source§fn equivalent(&self, key: &Q) -> bool
fn equivalent(&self, key: &Q) -> bool
key and return true if they are equal.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