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>::ExpandTypeImplementations§
Source§impl<E: Float> BounceTileExpand<E>
impl<E: Float> BounceTileExpand<E>
Sourcepub fn __expand_cmma_to_fragment_method(&mut self, scope: &Scope)
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.
Sourcepub fn __expand_fragment_to_cmma_method(&mut self, scope: &Scope)
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.
pub fn __expand_row_max_method( &self, scope: &Scope, acc: &mut <RowWise<E> as CubeType>::ExpandType, base: &<RowWise<E> as CubeType>::ExpandType, )
pub fn __expand_row_sum_method( &self, scope: &Scope, acc: &mut <RowWise<E> as CubeType>::ExpandType, )
pub fn __expand_exp_diff_method( &mut self, scope: &Scope, rowwise: &<RowWise<E> as CubeType>::ExpandType, )
pub fn __expand_rowwise_scale_method( &mut self, scope: &Scope, scale: &<RowWise<E> as CubeType>::ExpandType, )
pub fn __expand_scale_and_mask_method<M: Mask>( &mut self, scope: &Scope, scale: <E as CubeType>::ExpandType, mask: &<M as CubeType>::ExpandType, )
Sourcepub fn __expand_fill_zero_method(&mut self, scope: &Scope)
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.
Sourcepub fn __expand_write_fragment_to_method<Lhs: Float, Sc: TileScope>(
&self,
scope: &Scope,
softmaxed: &mut <Tile<Lhs, Sc> as CubeType>::ExpandType,
)
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.
Sourcepub fn __expand_cmma_to_fragment(scope: &Scope, this: &mut Self)
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.
Sourcepub fn __expand_fragment_to_cmma(scope: &Scope, this: &mut Self)
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.
pub fn __expand_row_max( scope: &Scope, this: &Self, acc: &mut <RowWise<E> as CubeType>::ExpandType, base: &<RowWise<E> as CubeType>::ExpandType, )
pub fn __expand_row_sum( scope: &Scope, this: &Self, acc: &mut <RowWise<E> as CubeType>::ExpandType, )
pub fn __expand_exp_diff( scope: &Scope, this: &mut Self, rowwise: &<RowWise<E> as CubeType>::ExpandType, )
pub fn __expand_rowwise_scale( scope: &Scope, this: &mut Self, scale: &<RowWise<E> as CubeType>::ExpandType, )
pub fn __expand_scale_and_mask<M: Mask>( scope: &Scope, this: &mut Self, scale: <E as CubeType>::ExpandType, mask: &<M as CubeType>::ExpandType, )
Sourcepub fn __expand_fill_zero(scope: &Scope, this: &mut Self)
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.
Sourcepub fn __expand_write_fragment_to<Lhs: Float, Sc: TileScope>(
scope: &Scope,
this: &Self,
softmaxed: &mut <Tile<Lhs, Sc> as CubeType>::ExpandType,
)
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>
impl<N: Numeric> BounceTileExpand<N>
Sourcepub fn __expand_copy_from_method<SE: Numeric, SS: Size, Sc: TileScope>(
&mut self,
scope: &Scope,
source: &<Tile<SE, Sc> as CubeType>::ExpandType,
ident: StageIdent,
)
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.
Sourcepub fn __expand_init_zero_method(&mut self, scope: &Scope)
pub fn __expand_init_zero_method(&mut self, scope: &Scope)
Zero-init the bounce tile (clears its cmma fragment).
Sourcepub fn __expand_copy_from<SE: Numeric, SS: Size, Sc: TileScope>(
scope: &Scope,
this: &mut Self,
source: &<Tile<SE, Sc> as CubeType>::ExpandType,
ident: StageIdent,
)
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.
Sourcepub fn __expand_init_zero(scope: &Scope, this: &mut Self)
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>
impl<Acc: Float> BounceTileExpand<Acc>
Sourcepub 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
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.
Sourcepub 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
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>
impl<N: Numeric> AsMutExpand for BounceTileExpand<N>
fn __expand_ref_mut_method(&mut self, _: &Scope) -> &mut Self
fn __expand_as_mut_method(&mut self, scope: &Scope) -> &mut T
Source§impl<N: Numeric> AsRefExpand for BounceTileExpand<N>
impl<N: Numeric> AsRefExpand for BounceTileExpand<N>
fn __expand_ref_method(&self, _: &Scope) -> &Self
fn __expand_as_ref_method(&self, scope: &Scope) -> &T
Source§impl<N: Numeric> CubeDebug for BounceTileExpand<N>
impl<N: Numeric> CubeDebug for BounceTileExpand<N>
Source§fn set_debug_name(&self, scope: &Scope, name: &'static str)
fn set_debug_name(&self, scope: &Scope, name: &'static str)
Source§impl<N: Numeric> ExpandTypeClone for BounceTileExpand<N>
impl<N: Numeric> ExpandTypeClone for BounceTileExpand<N>
Source§fn clone_unchecked(&self) -> Self
fn clone_unchecked(&self) -> Self
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>
impl<N: Numeric> IntoExpand for BounceTileExpand<N>
type Expand = BounceTileExpand<N>
fn into_expand(self, _: &Scope) -> Self
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>where
N: UnwindSafe + RefUnwindSafe,
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> 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