Skip to main content

ViewMut

Struct ViewMut 

Source
pub struct ViewMut<'a, E: CubePrimitive, C: Coordinates> { /* private fields */ }
Expand description

Mutable view Note: Clone and Copy should ideally not be there, but are required for good ergonomics until Reborrow and CoerceShared are implemented and stabilized.

Implementations§

Source§

impl<'a, E: CubePrimitive, C: Coordinates + 'a> ViewMut<'a, E, C>

Source

pub fn new<V: ViewOperationsMut<E, S> + 'a, S: Coordinates>( view: V, layout: impl Into<VirtualLayout<C, S>>, ) -> Self

Create a new tensor view from an underlying concrete storage and a layout to map it into the target coordinate space

Source

pub fn __expand_new<V: ViewOperationsMut<E, S> + 'a, S: Coordinates + 'a>( scope: &Scope, view: V::ExpandType, layout: VirtualLayoutExpand<C, S>, ) -> ViewMutExpand<'a, E, C>

Expand function for View::new

Source§

impl<'a, E: CubePrimitive, C: Coordinates + 'a> ViewMut<'a, E, C>

Source

pub fn view<T: Coordinates + 'a>( self, _layout: impl Into<VirtualLayout<T, C>>, ) -> ViewMut<'a, E, T>

Source

pub fn __expand_view<T: Coordinates + 'a>( scope: &Scope, this: ViewMutExpand<'a, E, C>, layout: VirtualLayoutExpand<T, C>, ) -> ViewMutExpand<'a, E, T>

Source§

impl<'a, E: CubePrimitive, C: Coordinates> ViewMut<'a, E, C>

Source

pub fn shape(&self) -> C

Calls Layout::shape on the view’s layout

Source

pub fn is_in_bounds(&self, pos: C) -> bool

Calls Layout::is_in_bounds on the view’s layout

Source

pub fn __expand_shape( scope: &Scope, this: &<Self as CubeType>::ExpandType, ) -> <C as CubeType>::ExpandType

Calls Layout::shape on the view’s layout

Source

pub fn __expand_is_in_bounds( scope: &Scope, this: &<Self as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, ) -> <bool as CubeType>::ExpandType

Calls Layout::is_in_bounds on the view’s layout

Source§

impl<'a, E: CubePrimitive, C: Coordinates> ViewMut<'a, E, C>

Source

pub fn read(&self, pos: C) -> E

Read a value at pos. The layout handles translation into a concrete index.

Source

pub fn read_unchecked(&self, pos: C) -> E

Read a value at pos. The layout handles translation into a concrete index. Reading is done unchecked

Source

pub fn read_checked(&self, pos: C) -> E

Read a value at pos if it’s in bounds. The layout handles translation into a concrete index.

Source

pub fn read_masked(&self, pos: C, mask_value: E) -> E

Read a value at pos if it’s in bounds, returning mask_value otherwise. The layout handles translation into a concrete index.

Source

pub fn as_linear_slice(&self) -> &'a [E]

Interpret this view as a linear slice encompassing the entire view.

§Safety

No checking is done on whether the slice is contiguous in memory.

Source

pub fn vector_size(&self) -> VectorSize

Source

pub fn __expand_read( scope: &Scope, this: &<Self as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, ) -> <E as CubeType>::ExpandType

Read a value at pos. The layout handles translation into a concrete index.

Source

pub fn __expand_read_unchecked( scope: &Scope, this: &<Self as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, ) -> <E as CubeType>::ExpandType

Read a value at pos. The layout handles translation into a concrete index. Reading is done unchecked

Source

pub fn __expand_read_checked( scope: &Scope, this: &<Self as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, ) -> <E as CubeType>::ExpandType

Read a value at pos if it’s in bounds. The layout handles translation into a concrete index.

Source

pub fn __expand_read_masked( scope: &Scope, this: &<Self as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, mask_value: <E as CubeType>::ExpandType, ) -> <E as CubeType>::ExpandType

Read a value at pos if it’s in bounds, returning mask_value otherwise. The layout handles translation into a concrete index.

Source

pub fn __expand_as_linear_slice<'infer, 'scope>( scope: &'scope Scope, this: &'infer <Self as CubeType>::ExpandType, ) -> &'a <[E] as CubeType>::ExpandType

Interpret this view as a linear slice encompassing the entire view.

§Safety

No checking is done on whether the slice is contiguous in memory.

Source

pub fn __expand_vector_size( scope: &Scope, this: &<Self as CubeType>::ExpandType, ) -> VectorSize

Source§

impl<'a, E: CubePrimitive, C: Coordinates + 'static> ViewMut<'a, E, C>

Source

pub fn slice(self, pos: C, size: C) -> ViewMut<'a, E, C>

Create a slice starting from pos, with size. The layout handles translation into concrete indices. Size will be clamped to the current layout size.

Source

pub fn slice_unchecked(self, pos: C, size: C) -> ViewMut<'a, E, C>

Create a slice starting from pos, with size. The layout handles translation into concrete indices. Size and pos will be clamped to the current layout size. #Safety Access is always unchecked

Source

pub fn __expand_slice<'scope>( scope: &'scope Scope, this: <Self as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, size: <C as CubeType>::ExpandType, ) -> <ViewMut<'a, E, C> as CubeType>::ExpandType

Create a slice starting from pos, with size. The layout handles translation into concrete indices. Size will be clamped to the current layout size.

Source

pub fn __expand_slice_unchecked<'scope>( scope: &'scope Scope, this: <Self as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, size: <C as CubeType>::ExpandType, ) -> <ViewMut<'a, E, C> as CubeType>::ExpandType

Create a slice starting from pos, with size. The layout handles translation into concrete indices. Size and pos will be clamped to the current layout size. #Safety Access is always unchecked

Source§

impl<'a, E: CubePrimitive, C: Coordinates + 'a> ViewMut<'a, E, C>

Source

pub fn tensor_map_load( &self, barrier: &Barrier, shared_memory: &mut [E], pos: C, )

Execute a TMA load into shared memory, if the underlying storage supports it. Panics if it’s unsupported.

Source

pub fn __expand_tensor_map_load( scope: &Scope, this: &<Self as CubeType>::ExpandType, barrier: &<Barrier as CubeType>::ExpandType, shared_memory: &mut <[E] as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, )

Execute a TMA load into shared memory, if the underlying storage supports it. Panics if it’s unsupported.

Source§

impl<'a, E: CubePrimitive, C: Coordinates + 'a> ViewMut<'a, E, C>

Source

pub fn as_read(self) -> View<'a, E, C>

Reborrow this mutable view as a read-only View over the same storage. Lets a single ViewMut carrier serve both read and write paths without a second handle.

Source

pub fn __expand_as_read( scope: &Scope, this: ViewMutExpand<'a, E, C>, ) -> ViewExpand<'a, E, C>

Source§

impl<'a, E: CubePrimitive, C: Coordinates + 'a> ViewMut<'a, E, C>

Source

pub fn view_mut<'b, T: Coordinates + 'a>( self, _layout: impl Layout<Coordinates = T, SourceCoordinates = C>, ) -> ViewMut<'b, E, T>
where 'a: 'b,

Source

pub fn __expand_view_mut<T: Coordinates + 'a>( scope: &Scope, this: ViewMutExpand<'a, E, C>, layout: VirtualLayoutExpand<T, C>, ) -> ViewMutExpand<'a, E, T>

Source§

impl<'a, E: CubePrimitive, C: Coordinates> ViewMut<'a, E, C>

Source

pub fn write(&mut self, pos: C, value: E)

Write a value to pos. The layout handles translation into a concrete index.

Source

pub fn write_checked(&mut self, pos: C, value: E)

Write a value to pos if it’s in bounds. The layout handles translation into a concrete index.

Source

pub fn as_linear_slice_mut(&mut self) -> &'a mut [E]

Interpret this view as a mutable linear slice encompassing the entire view.

§Safety

No checking is done on whether the slice is contiguous in memory.

Source

pub fn __expand_write( scope: &Scope, this: &mut <Self as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, value: <E as CubeType>::ExpandType, )

Write a value to pos. The layout handles translation into a concrete index.

Source

pub fn __expand_write_checked( scope: &Scope, this: &mut <Self as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, value: <E as CubeType>::ExpandType, )

Write a value to pos if it’s in bounds. The layout handles translation into a concrete index.

Source

pub fn __expand_as_linear_slice_mut<'infer, 'scope>( scope: &'scope Scope, this: &'infer mut <Self as CubeType>::ExpandType, ) -> &'a mut <[E] as CubeType>::ExpandType

Interpret this view as a mutable linear slice encompassing the entire view.

§Safety

No checking is done on whether the slice is contiguous in memory.

Source§

impl<'a, E: CubePrimitive, C: Coordinates + 'static> ViewMut<'a, E, C>

Source

pub fn slice_mut(self, pos: C, size: C) -> ViewMut<'a, E, C>

Create a mutable slice starting from pos, with size. The layout handles translation into concrete indices. Size and pos will be clamped to the current layout size.

Source

pub fn slice_mut_unchecked(self, pos: C, size: C) -> ViewMut<'a, E, C>

Create a mutable slice starting from pos, with size. The layout handles translation into concrete indices. Size and pos will be clamped to the current layout size.

§Safety

Access is always unchecked.

Source

pub fn __expand_slice_mut<'scope>( scope: &'scope Scope, this: <Self as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, size: <C as CubeType>::ExpandType, ) -> <ViewMut<'a, E, C> as CubeType>::ExpandType

Create a mutable slice starting from pos, with size. The layout handles translation into concrete indices. Size and pos will be clamped to the current layout size.

Source

pub fn __expand_slice_mut_unchecked<'scope>( scope: &'scope Scope, this: <Self as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, size: <C as CubeType>::ExpandType, ) -> <ViewMut<'a, E, C> as CubeType>::ExpandType

Create a mutable slice starting from pos, with size. The layout handles translation into concrete indices. Size and pos will be clamped to the current layout size.

§Safety

Access is always unchecked.

Source§

impl<'a, E: CubePrimitive, C: Coordinates> ViewMut<'a, E, C>

Source

pub fn tensor_map_store(&self, shared_memory: &[E], pos: C)

Execute a TMA store into global memory, if the underlying storage supports it. Panics if it’s unsupported.

Source

pub fn __expand_tensor_map_store( scope: &Scope, this: &<Self as CubeType>::ExpandType, shared_memory: &<[E] as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, )

Execute a TMA store into global memory, if the underlying storage supports it. Panics if it’s unsupported.

Trait Implementations§

Source§

impl<'a, E: Clone + CubePrimitive, C: Clone + Coordinates> Clone for ViewMut<'a, E, C>

Source§

fn clone(&self) -> ViewMut<'a, E, C>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a, E: Copy + CubePrimitive, C: Copy + Coordinates> Copy for ViewMut<'a, E, C>

Source§

impl<'a, E: CubePrimitive, C: Coordinates + 'a> CubeType for ViewMut<'a, E, C>

Source§

impl<E: CubePrimitive, C: Coordinates + 'static> LaunchArg for ViewMut<'static, E, C>

Source§

type RuntimeArg<R: Runtime> = ViewArg<C, R>

The runtime argument for the kernel.
Source§

type CompilationArg = ViewCompilationArg<C>

Compilation argument.
Source§

fn register<R: Runtime>( arg: Self::RuntimeArg<R>, launcher: &mut KernelLauncher<R>, ) -> Self::CompilationArg

Source§

fn expand( arg: &Self::CompilationArg, builder: &mut KernelBuilder, ) -> <Self as CubeType>::ExpandType

Register a variable during compilation that fill the KernelBuilder.
Source§

impl<'a, T: CubePrimitive, C: Coordinates + 'a> Vectorized for ViewMut<'a, T, C>

Source§

impl<'a, T: CubePrimitive, C: Coordinates + 'a> ViewOperations<T, C> for ViewMut<'a, T, C>

Source§

fn read(&self, pos: C) -> T

Source§

fn read_checked(&self, pos: C) -> T

Source§

fn read_masked(&self, pos: C, value: T) -> T

Source§

fn read_unchecked(&self, pos: C) -> T

Source§

fn as_linear_slice(&self, pos: C, size: C) -> &[T]

Create a slice starting from pos, with size. The layout handles translation into concrete indices.
Source§

fn tensor_map_load(&self, barrier: &Barrier, shared_memory: &mut [T], pos: C)

Execute a TMA load into shared memory, if the underlying storage supports it. Panics if it’s unsupported.
Source§

fn shape(&self) -> C

Source§

fn is_in_bounds(&self, pos: C) -> bool

Source§

fn __expand_read( scope: &Scope, this: &<Self as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, ) -> <T as CubeType>::ExpandType

Source§

fn __expand_read_checked( scope: &Scope, this: &<Self as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, ) -> <T as CubeType>::ExpandType

Source§

fn __expand_read_masked( scope: &Scope, this: &<Self as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, value: <T as CubeType>::ExpandType, ) -> <T as CubeType>::ExpandType

Source§

fn __expand_read_unchecked( scope: &Scope, this: &<Self as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, ) -> <T as CubeType>::ExpandType

Source§

fn __expand_as_linear_slice<'infer, 'scope>( scope: &'scope Scope, this: &'infer <Self as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, size: <C as CubeType>::ExpandType, ) -> &'infer <[T] as CubeType>::ExpandType

Source§

fn __expand_tensor_map_load( scope: &Scope, this: &<Self as CubeType>::ExpandType, barrier: &<Barrier as CubeType>::ExpandType, shared_memory: &mut <[T] as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, )

Source§

fn __expand_shape( scope: &Scope, this: &<Self as CubeType>::ExpandType, ) -> <C as CubeType>::ExpandType

Source§

fn __expand_is_in_bounds( scope: &Scope, this: &<Self as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, ) -> <bool as CubeType>::ExpandType

Source§

impl<'a, T: CubePrimitive, C: Coordinates + 'a> ViewOperationsMut<T, C> for ViewMut<'a, T, C>

Source§

fn write(&self, pos: C, value: T)

Source§

fn write_checked(&self, pos: C, value: T)

Source§

fn as_linear_slice_mut(&self, pos: C, size: C) -> &mut [T]

Create a mutable slice starting from pos, with size. The layout handles translation into concrete indices.
Source§

fn tensor_map_store(&self, shared_memory: &[T], pos: C)

Execute a TMA store into global memory, if the underlying storage supports it. Panics if it’s unsupported.
Source§

fn __expand_write( scope: &Scope, this: &<Self as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, value: <T as CubeType>::ExpandType, )

Source§

fn __expand_write_checked( scope: &Scope, this: &<Self as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, value: <T as CubeType>::ExpandType, )

Source§

fn __expand_as_linear_slice_mut<'infer, 'scope>( scope: &'scope Scope, this: &'infer <Self as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, size: <C as CubeType>::ExpandType, ) -> &'infer mut <[T] as CubeType>::ExpandType

Source§

fn __expand_tensor_map_store( scope: &Scope, this: &<Self as CubeType>::ExpandType, shared_memory: &<[T] as CubeType>::ExpandType, pos: <C as CubeType>::ExpandType, )

Auto Trait Implementations§

§

impl<'a, E, C> !UnwindSafe for ViewMut<'a, E, C>

§

impl<'a, E, C> Freeze for ViewMut<'a, E, C>
where <C as CubeType>::ExpandType: Sized,

§

impl<'a, E, C> RefUnwindSafe for ViewMut<'a, E, C>

§

impl<'a, E, C> Send for ViewMut<'a, E, C>
where <C as CubeType>::ExpandType: Sized, C: Send,

§

impl<'a, E, C> Sync for ViewMut<'a, E, C>
where <C as CubeType>::ExpandType: Sized, C: Sync,

§

impl<'a, E, C> Unpin for ViewMut<'a, E, C>
where <C as CubeType>::ExpandType: Sized, C: Unpin, E: Unpin,

§

impl<'a, E, C> UnsafeUnpin for ViewMut<'a, E, C>
where <C as CubeType>::ExpandType: Sized,

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> CloneExpand for T
where T: Clone,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.
Source§

impl<T> TuneInputs for T
where T: Clone + Send + Sync + 'static,

Source§

type At<'a> = T

The concrete input type at lifetime 'a.
Source§

impl<T> ViewLayoutLaunchArg for T
where T: LaunchArg + Send + Sync,

Source§

type RuntimeArg<R: Runtime> = <T as LaunchArg>::RuntimeArg<R>

The runtime argument for the kernel.
Source§

type CompilationArg = <T as LaunchArg>::CompilationArg

Compilation argument.
Source§

fn register<R, B>( arg: <T as ViewLayoutLaunchArg>::RuntimeArg<R>, _buffer: &B, _ty: Type, launcher: &mut KernelLauncher<R>, ) -> <T as ViewLayoutLaunchArg>::CompilationArg
where R: Runtime, B: MemoryArg,

Source§

fn expand( arg: &<T as ViewLayoutLaunchArg>::CompilationArg, _ty: Type, builder: &mut KernelBuilder, ) -> <T as CubeType>::ExpandType

Register an input variable during compilation that fill the KernelBuilder.
Source§

fn expand_output( arg: &Self::CompilationArg, ty: Type, builder: &mut KernelBuilder, ) -> <Self as CubeType>::ExpandType

Register an output variable during compilation that fill the KernelBuilder.