pub struct StridedStageMemory<ES: Numeric, NS: Size, T: TilingLayout> {
pub smem: Shared<[Vector<ES, NS>]>,
pub swizzle: Swizzle,
/* private fields */
}Expand description
Wrapper over the shared memory used for staging, abstracting its layout
Fields§
§smem: Shared<[Vector<ES, NS>]>Underlying shared memory
swizzle: SwizzleSwizzling of the shared memory, if any
Implementations§
Source§impl<ES: Numeric, NS: Size, T: TilingLayout> StridedStageMemory<ES, NS, T>
impl<ES: Numeric, NS: Size, T: TilingLayout> StridedStageMemory<ES, NS, T>
Sourcepub fn new(config: StageMemoryConfig) -> StridedStageMemory<ES, NS, T>
pub fn new(config: StageMemoryConfig) -> StridedStageMemory<ES, NS, T>
Instantiate a new stage memory for the given identifier
Sourcepub fn new_aligned(
alignment: usize,
config: StageMemoryConfig,
) -> StridedStageMemory<ES, NS, T>
pub fn new_aligned( alignment: usize, config: StageMemoryConfig, ) -> StridedStageMemory<ES, NS, T>
Instantiate a new stage memory for the given identifier, with shared memory alignment
pub fn with_buffer_index(&self, buffer_idx: u32) -> Self
Sourcepub fn with_layout<TNew: TilingLayout>(
&self,
) -> StridedStageMemory<ES, NS, TNew>
pub fn with_layout<TNew: TilingLayout>( &self, ) -> StridedStageMemory<ES, NS, TNew>
Return the same stage but with a different tiling layout. Allows comptime switching tiling.
Sourcepub fn get_tile(&self, tile: Coords2d) -> StridedTile<ES, NS>
pub fn get_tile(&self, tile: Coords2d) -> StridedTile<ES, NS>
Get the tile at position (row, col)
Sourcepub fn as_slice<N: Size>(&self) -> &[Vector<ES, N>]
pub fn as_slice<N: Size>(&self) -> &[Vector<ES, N>]
Return the whole stage as a slice, for reading
Sourcepub fn as_slice_mut<N: Size>(&mut self) -> &mut [Vector<ES, N>]
pub fn as_slice_mut<N: Size>(&mut self) -> &mut [Vector<ES, N>]
Return the whole stage as a mutable slice, for loading
Sourcepub unsafe fn free(&self)
pub unsafe fn free(&self)
Frees the shared memory for reuse, if possible on the target runtime.
§Safety
Must be used in uniform control flow Must not have any dangling references to this shared memory
Sourcepub fn __expand_new(
scope: &Scope,
config: StageMemoryConfig,
) -> <StridedStageMemory<ES, NS, T> as CubeType>::ExpandType
pub fn __expand_new( scope: &Scope, config: StageMemoryConfig, ) -> <StridedStageMemory<ES, NS, T> as CubeType>::ExpandType
Instantiate a new stage memory for the given identifier
Sourcepub fn __expand_new_aligned(
scope: &Scope,
alignment: usize,
config: StageMemoryConfig,
) -> <StridedStageMemory<ES, NS, T> as CubeType>::ExpandType
pub fn __expand_new_aligned( scope: &Scope, alignment: usize, config: StageMemoryConfig, ) -> <StridedStageMemory<ES, NS, T> as CubeType>::ExpandType
Instantiate a new stage memory for the given identifier, with shared memory alignment
pub fn __expand_with_buffer_index( scope: &Scope, this: &<Self as CubeType>::ExpandType, buffer_idx: <u32 as CubeType>::ExpandType, ) -> <Self as CubeType>::ExpandType
Sourcepub fn __expand_with_layout<TNew: TilingLayout>(
scope: &Scope,
this: &<Self as CubeType>::ExpandType,
) -> <StridedStageMemory<ES, NS, TNew> as CubeType>::ExpandType
pub fn __expand_with_layout<TNew: TilingLayout>( scope: &Scope, this: &<Self as CubeType>::ExpandType, ) -> <StridedStageMemory<ES, NS, TNew> as CubeType>::ExpandType
Return the same stage but with a different tiling layout. Allows comptime switching tiling.
Sourcepub fn __expand_get_tile(
scope: &Scope,
this: &<Self as CubeType>::ExpandType,
tile: <Coords2d as CubeType>::ExpandType,
) -> <StridedTile<ES, NS> as CubeType>::ExpandType
pub fn __expand_get_tile( scope: &Scope, this: &<Self as CubeType>::ExpandType, tile: <Coords2d as CubeType>::ExpandType, ) -> <StridedTile<ES, NS> as CubeType>::ExpandType
Get the tile at position (row, col)
Sourcepub fn __expand_as_slice<'infer, 'scope, N: Size>(
scope: &'scope Scope,
this: &'infer <Self as CubeType>::ExpandType,
) -> &'infer <[Vector<ES, N>] as CubeType>::ExpandType ⓘ
pub fn __expand_as_slice<'infer, 'scope, N: Size>( scope: &'scope Scope, this: &'infer <Self as CubeType>::ExpandType, ) -> &'infer <[Vector<ES, N>] as CubeType>::ExpandType ⓘ
Return the whole stage as a slice, for reading
Sourcepub fn __expand_as_slice_mut<'infer, 'scope, N: Size>(
scope: &'scope Scope,
this: &'infer mut <Self as CubeType>::ExpandType,
) -> &'infer mut <[Vector<ES, N>] as CubeType>::ExpandType ⓘ
pub fn __expand_as_slice_mut<'infer, 'scope, N: Size>( scope: &'scope Scope, this: &'infer mut <Self as CubeType>::ExpandType, ) -> &'infer mut <[Vector<ES, N>] as CubeType>::ExpandType ⓘ
Return the whole stage as a mutable slice, for loading
Sourcepub fn __expand_free(scope: &Scope, this: &<Self as CubeType>::ExpandType)
pub fn __expand_free(scope: &Scope, this: &<Self as CubeType>::ExpandType)
Frees the shared memory for reuse, if possible on the target runtime.
§Safety
Must be used in uniform control flow Must not have any dangling references to this shared memory
Trait Implementations§
Source§impl<ES: Clone + Numeric, NS: Clone + Size, T: Clone + TilingLayout> Clone for StridedStageMemory<ES, NS, T>
impl<ES: Clone + Numeric, NS: Clone + Size, T: Clone + TilingLayout> Clone for StridedStageMemory<ES, NS, T>
Source§fn clone(&self) -> StridedStageMemory<ES, NS, T>
fn clone(&self) -> StridedStageMemory<ES, NS, T>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<ES: Numeric, NS: Size, T: TilingLayout> CubeType for StridedStageMemory<ES, NS, T>
impl<ES: Numeric, NS: Size, T: TilingLayout> CubeType for StridedStageMemory<ES, NS, T>
type ExpandType = StridedStageMemoryExpand<ES, NS, T>
Source§impl<ES: Numeric, NS: Size, T: TilingLayout> Stage<ES> for StridedStageMemory<ES, NS, T>
impl<ES: Numeric, NS: Size, T: TilingLayout> Stage<ES> for StridedStageMemory<ES, NS, T>
fn tile<Sc: TileScope>(this: &Self, tile: Coords2d) -> Tile<ES, Sc>
Source§fn as_stage_tile<Sc: TileScope>(this: &Self) -> Tile<ES, Sc>
fn as_stage_tile<Sc: TileScope>(this: &Self) -> Tile<ES, Sc>
TileKind::Stage
tile. Only meaningful for read-only stages consumed by the partition
matmul; other impls return Tile::new_None().fn __expand_tile<Sc: TileScope>( scope: &Scope, this: &<Self as CubeType>::ExpandType, tile: <Coords2d as CubeType>::ExpandType, ) -> <Tile<ES, Sc> as CubeType>::ExpandType
fn __expand_as_stage_tile<Sc: TileScope>( scope: &Scope, this: &<Self as CubeType>::ExpandType, ) -> <Tile<ES, Sc> as CubeType>::ExpandType
Auto Trait Implementations§
impl<ES, NS, T> !Send for StridedStageMemory<ES, NS, T>
impl<ES, NS, T> !Sync for StridedStageMemory<ES, NS, T>
impl<ES, NS, T> Freeze for StridedStageMemory<ES, NS, T>
impl<ES, NS, T> RefUnwindSafe for StridedStageMemory<ES, NS, T>
impl<ES, NS, T> Unpin for StridedStageMemory<ES, NS, T>where
T: Unpin,
impl<ES, NS, T> UnsafeUnpin for StridedStageMemory<ES, NS, T>
impl<ES, NS, T> UnwindSafe for StridedStageMemory<ES, NS, T>
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> 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