Skip to main content

BounceTileExpand

Struct BounceTileExpand 

Source
pub struct BounceTileExpand<N: Numeric> {
    pub cmma: <CmmaTile<N> as CubeType>::ExpandType,
    pub smem: <Shared<[N]> as CubeType>::ExpandType,
    pub fragment: <WhiteboxFragment<N> as CubeType>::ExpandType,
}

Fields§

§cmma: <CmmaTile<N> as CubeType>::ExpandType§smem: <Shared<[N]> as CubeType>::ExpandType§fragment: <WhiteboxFragment<N> as CubeType>::ExpandType

Implementations§

Source§

impl<E: Float> BounceTileExpand<E>

Source

pub fn __expand_cmma_to_fragment_method(&mut self, scope: &Scope)

Synchronizes the fragment view from the cmma fragment via smem. Call before any rowwise/elementwise op so the fragment reflects the current cmma state.

Source

pub fn __expand_fragment_to_cmma_method(&mut self, scope: &Scope)

Synchronizes the cmma fragment from the fragment view via smem. Call after rowwise/elementwise edits to make the cmma side current for the next mma.

Source

pub fn __expand_row_max_method( &self, scope: &Scope, acc: &mut <RowWise<E> as CubeType>::ExpandType, base: &<RowWise<E> as CubeType>::ExpandType, )

Source

pub fn __expand_row_sum_method( &self, scope: &Scope, acc: &mut <RowWise<E> as CubeType>::ExpandType, )

Source

pub fn __expand_exp_diff_method( &mut self, scope: &Scope, rowwise: &<RowWise<E> as CubeType>::ExpandType, )

Source

pub fn __expand_rowwise_scale_method( &mut self, scope: &Scope, scale: &<RowWise<E> as CubeType>::ExpandType, )

Source

pub fn __expand_scale_and_mask_method<M: Mask>( &mut self, scope: &Scope, scale: <E as CubeType>::ExpandType, mask: &<M as CubeType>::ExpandType, )

Source

pub fn __expand_fill_zero_method(&mut self, scope: &Scope)

Zeros the cmma fragment. The fragment view is not the live storage at fill_zero call sites (always invoked before any cmma_to_fragment), so only cmma needs clearing.

Source

pub fn __expand_write_fragment_to_method<Lhs: Float, Sc: TileScope>( &self, scope: &Scope, softmaxed: &mut <Tile<Lhs, Sc> as CubeType>::ExpandType, )

Writes the (already-softmaxed) fragment view of this bounce tile into softmaxed. The source fragment is plane-fragmented; for a Bounce destination this routes through the destination’s smem into its cmma fragment.

Source

pub fn __expand_cmma_to_fragment(scope: &Scope, this: &mut Self)

Synchronizes the fragment view from the cmma fragment via smem. Call before any rowwise/elementwise op so the fragment reflects the current cmma state.

Source

pub fn __expand_fragment_to_cmma(scope: &Scope, this: &mut Self)

Synchronizes the cmma fragment from the fragment view via smem. Call after rowwise/elementwise edits to make the cmma side current for the next mma.

Source

pub fn __expand_row_max( scope: &Scope, this: &Self, acc: &mut <RowWise<E> as CubeType>::ExpandType, base: &<RowWise<E> as CubeType>::ExpandType, )

Source

pub fn __expand_row_sum( scope: &Scope, this: &Self, acc: &mut <RowWise<E> as CubeType>::ExpandType, )

Source

pub fn __expand_exp_diff( scope: &Scope, this: &mut Self, rowwise: &<RowWise<E> as CubeType>::ExpandType, )

Source

pub fn __expand_rowwise_scale( scope: &Scope, this: &mut Self, scale: &<RowWise<E> as CubeType>::ExpandType, )

Source

pub fn __expand_scale_and_mask<M: Mask>( scope: &Scope, this: &mut Self, scale: <E as CubeType>::ExpandType, mask: &<M as CubeType>::ExpandType, )

Source

pub fn __expand_fill_zero(scope: &Scope, this: &mut Self)

Zeros the cmma fragment. The fragment view is not the live storage at fill_zero call sites (always invoked before any cmma_to_fragment), so only cmma needs clearing.

Source

pub fn __expand_write_fragment_to<Lhs: Float, Sc: TileScope>( scope: &Scope, this: &Self, softmaxed: &mut <Tile<Lhs, Sc> as CubeType>::ExpandType, )

Writes the (already-softmaxed) fragment view of this bounce tile into softmaxed. The source fragment is plane-fragmented; for a Bounce destination this routes through the destination’s smem into its cmma fragment.

Source§

impl<N: Numeric> BounceTileExpand<N>

Source

pub fn __expand_copy_from_method<SE: Numeric, SS: Size, Sc: TileScope>( &mut self, scope: &Scope, source: &<Tile<SE, Sc> as CubeType>::ExpandType, ident: StageIdent, )

Copies into the bounce tile’s cmma fragment from source. Bounce always loads through its CMMA representation (the WhiteboxFragment view is synced lazily on demand by softmax/scale ops); supported sources mirror CmmaTile::copy_from.

Source

pub fn __expand_init_zero_method(&mut self, scope: &Scope)

Zero-init the bounce tile (clears its cmma fragment).

Source

pub fn __expand_copy_from<SE: Numeric, SS: Size, Sc: TileScope>( scope: &Scope, this: &mut Self, source: &<Tile<SE, Sc> as CubeType>::ExpandType, ident: StageIdent, )

Copies into the bounce tile’s cmma fragment from source. Bounce always loads through its CMMA representation (the WhiteboxFragment view is synced lazily on demand by softmax/scale ops); supported sources mirror CmmaTile::copy_from.

Source

pub fn __expand_init_zero(scope: &Scope, this: &mut Self)

Zero-init the bounce tile (clears its cmma fragment).

Source§

impl<Acc: Float> BounceTileExpand<Acc>

Source

pub fn __expand_softmax_method<Lhs: Float, M: Mask>( &mut self, scope: &Scope, mask: &<M as CubeType>::ExpandType, softmaxed: &mut <Tile<Lhs, Plane> as CubeType>::ExpandType, state: &mut (<RowWise<Acc> as CubeType>::ExpandType, <RowWise<Acc> as CubeType>::ExpandType), head_dim_factor: <Acc as CubeType>::ExpandType, ) -> <RowWise<Acc> as CubeType>::ExpandType

Online softmax for the Bounce variant. cmma → fragment once at entry so all subsequent rowwise ops read/write the fragment view; the post- exp values are still in the fragment at the end (we skip fragment_to_cmma on score because its cmma is cleared next iteration), and we stream straight into softmaxed via write_fragment_to.

Source

pub fn __expand_softmax<Lhs: Float, M: Mask>( scope: &Scope, this: &mut Self, mask: &<M as CubeType>::ExpandType, softmaxed: &mut <Tile<Lhs, Plane> as CubeType>::ExpandType, state: &mut (<RowWise<Acc> as CubeType>::ExpandType, <RowWise<Acc> as CubeType>::ExpandType), head_dim_factor: <Acc as CubeType>::ExpandType, ) -> <RowWise<Acc> as CubeType>::ExpandType

Online softmax for the Bounce variant. cmma → fragment once at entry so all subsequent rowwise ops read/write the fragment view; the post- exp values are still in the fragment at the end (we skip fragment_to_cmma on score because its cmma is cleared next iteration), and we stream straight into softmaxed via write_fragment_to.

Trait Implementations§

Source§

impl<N: Numeric> AsMutExpand for BounceTileExpand<N>

Source§

fn __expand_ref_mut_method(&mut self, _: &Scope) -> &mut Self

Source§

fn __expand_as_mut_method(&mut self, scope: &Scope) -> &mut T

Source§

impl<N: Numeric> AsRefExpand for BounceTileExpand<N>

Source§

fn __expand_ref_method(&self, _: &Scope) -> &Self

Source§

fn __expand_as_ref_method(&self, scope: &Scope) -> &T

Source§

impl<N: Numeric> CubeDebug for BounceTileExpand<N>

Source§

fn set_debug_name(&self, scope: &Scope, name: &'static str)

Set the debug name of this type’s expansion. Should do nothing for types that don’t appear at runtime
Source§

impl<N: Numeric> ExpandTypeClone for BounceTileExpand<N>

Source§

fn clone_unchecked(&self) -> Self

Unchecked clone that only clones the conceptual runtime value. Should only be used in cases where each copy is used in a mutually exclusive branch (i.e. match, runtime enums). This is intentionally separated from Rust’s Clone semantics and should only be used for the conceptual expand values, never real data. Using two values in the same branch is undefined behaviour.
Source§

impl<N: Numeric> IntoExpand for BounceTileExpand<N>

Source§

impl<N: Numeric> IntoMut for BounceTileExpand<N>

Source§

fn into_mut(self, scope: &Scope) -> Self

Convert the variable into a potentially new mutable variable in scope, copying if needed.

Auto Trait Implementations§

§

impl<N> !Send for BounceTileExpand<N>

§

impl<N> !Sync for BounceTileExpand<N>

§

impl<N> Freeze for BounceTileExpand<N>

§

impl<N> RefUnwindSafe for BounceTileExpand<N>
where N: RefUnwindSafe,

§

impl<N> Unpin for BounceTileExpand<N>
where N: Unpin,

§

impl<N> UnsafeUnpin for BounceTileExpand<N>

§

impl<N> UnwindSafe for BounceTileExpand<N>

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> IntoComptime for T

Source§

fn comptime(self) -> Self

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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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.