pub struct TensorReader<EI: Numeric> {
pub tensor: VirtualTensor<EI>,
pub x_offset: u32,
pub y_offset: u32,
pub stride_x: u32,
pub stride_y: u32,
pub shape_x: u32,
pub shape_y: u32,
pub batch_offset: u32,
}
Expand description
A view of a tensor that starts reading data from a specified offset. Ensures safe access by preventing out-of-bounds errors. Includes pre-fetched shapes and strides for optimized performance.
Fields§
§tensor: VirtualTensor<EI>
§x_offset: u32
§y_offset: u32
§stride_x: u32
§stride_y: u32
§shape_x: u32
§shape_y: u32
§batch_offset: u32
Implementations§
Source§impl<EG: Numeric> TensorReader<EG>
impl<EG: Numeric> TensorReader<EG>
Sourcepub fn new(
tensor: VirtualTensor<EG>,
x_offset: u32,
y_offset: u32,
batch_offset: u32,
) -> Self
pub fn new( tensor: VirtualTensor<EG>, x_offset: u32, y_offset: u32, batch_offset: u32, ) -> Self
Instantiate a read view over the given tensor, pre-fetching needed strides and shapes
Sourcepub fn update_view(&mut self, k_offset: u32, ident: InputIdent)
pub fn update_view(&mut self, k_offset: u32, ident: InputIdent)
Advance the view along the k dimension by a specified offset, k_offset
.
Sourcepub fn load_window_in_tile<G: GlobalConfig>(
&self,
tile: (u32, u32),
nth_window: u32,
input_ident: InputIdent,
config: G,
) -> Window<EG>
pub fn load_window_in_tile<G: GlobalConfig>( &self, tile: (u32, u32), nth_window: u32, input_ident: InputIdent, config: G, ) -> Window<EG>
Reads data from the tensor view as a window, i.e. a slice of global memory Also returns the length of the slice
The length of the slice is the width of the tile
§Note
If the slice would be partly out-of-bounds, it will simply be shorter. The caller must do the padding if necessary.
Sourcepub fn load_window_in_stage<G: GlobalConfig>(
&self,
nth_window: u32,
input_ident: InputIdent,
config: G,
) -> Window<EG>
pub fn load_window_in_stage<G: GlobalConfig>( &self, nth_window: u32, input_ident: InputIdent, config: G, ) -> Window<EG>
Reads data from the tensor view as a window, i.e. a slice of global memory
The length of the slice is the width of the tile
§Note
If the slice would be partly out-of-bounds, it will simply be shorter. The caller must do the padding if necessary.
Sourcepub fn load_coalesced_in_tile<G: GlobalConfig>(
&self,
tile_x: u32,
tile_y: u32,
position: u32,
input_ident: InputIdent,
config: G,
) -> Line<EG>
pub fn load_coalesced_in_tile<G: GlobalConfig>( &self, tile_x: u32, tile_y: u32, position: u32, input_ident: InputIdent, config: G, ) -> Line<EG>
Reads data from the tensor view at the specified tile coordinates (tile_x, tile_y).
Each unit loads one line in a coalesced manner for improved efficiency. For row-major tensors, subsequent units read lines horizontally within the tile, while for column-major tensors, they read lines vertically.
§Note
Out-of-bounds reads will be translated to zeros.
Sourcepub fn load_coalesced_in_stage<G: GlobalConfig>(
&self,
position: u32,
input_ident: InputIdent,
config: G,
) -> Line<EG>
pub fn load_coalesced_in_stage<G: GlobalConfig>( &self, position: u32, input_ident: InputIdent, config: G, ) -> Line<EG>
Reads data from the tensor view at the specified index within the whole view, without regards to tiles
Each unit loads one line in a coalesced manner for improved efficiency. For row-major tensors, subsequent units read lines horizontally within the tile, while for column-major tensors, they read lines vertically.
§Note
Out-of-bounds reads will be translated to zeros.
pub fn __expand_new( context: &mut Scope, tensor: <VirtualTensor<EG> as CubeType>::ExpandType, x_offset: <u32 as CubeType>::ExpandType, y_offset: <u32 as CubeType>::ExpandType, batch_offset: <u32 as CubeType>::ExpandType, ) -> <Self as CubeType>::ExpandType
pub fn __expand_update_view( context: &mut Scope, this: <Self as CubeType>::ExpandType, k_offset: <u32 as CubeType>::ExpandType, ident: InputIdent, ) -> <() as CubeType>::ExpandType
pub fn __expand_load_window_in_tile<G: GlobalConfig>( context: &mut Scope, this: <Self as CubeType>::ExpandType, tile: <(u32, u32) as CubeType>::ExpandType, nth_window: <u32 as CubeType>::ExpandType, input_ident: InputIdent, config: G, ) -> <Window<EG> as CubeType>::ExpandType
pub fn __expand_load_window_in_stage<G: GlobalConfig>( context: &mut Scope, this: <Self as CubeType>::ExpandType, nth_window: <u32 as CubeType>::ExpandType, input_ident: InputIdent, config: G, ) -> <Window<EG> as CubeType>::ExpandType
pub fn __expand_load_coalesced_in_tile<G: GlobalConfig>( context: &mut Scope, this: <Self as CubeType>::ExpandType, tile_x: <u32 as CubeType>::ExpandType, tile_y: <u32 as CubeType>::ExpandType, position: <u32 as CubeType>::ExpandType, input_ident: InputIdent, config: G, ) -> <Line<EG> as CubeType>::ExpandType
pub fn __expand_load_coalesced_in_stage<G: GlobalConfig>( context: &mut Scope, this: <Self as CubeType>::ExpandType, position: <u32 as CubeType>::ExpandType, input_ident: InputIdent, config: G, ) -> <Line<EG> as CubeType>::ExpandType
Trait Implementations§
Source§impl<EI: Clone + Numeric> Clone for TensorReader<EI>
impl<EI: Clone + Numeric> Clone for TensorReader<EI>
Source§fn clone(&self) -> TensorReader<EI>
fn clone(&self) -> TensorReader<EI>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more