StridedMutSimd

Struct StridedMutSimd 

Source
pub struct StridedMutSimd<'a, T: TypeCommon> { /* private fields */ }
Expand description

A SIMD-optimized mutable strided iterator over tensor elements.

This struct provides mutable access to tensor elements with SIMD optimizations.

Implementations§

Source§

impl<'a, T: CommonBounds> StridedMutSimd<'a, T>

Source

pub fn new<U: TensorInfo<T>>(tensor: U) -> Self

Creates a new StridedMutSimd instance from a tensor.

This constructor initializes a StridedMutSimd iterator by creating a base StridedSimd from the provided tensor. It also retrieves the last stride from the base iterator to configure the strided access pattern. The PhantomData marker is used to associate the iterator with the tensor’s data type T without holding any actual data.

§Arguments
  • tensor - An instance that implements the TensorInfo<T> trait, representing the tensor to be iterated over. This tensor provides the necessary information about the tensor’s shape, strides, and data layout.
§Returns

A new instance of StridedMutSimd

Trait Implementations§

Source§

impl<'a, T> IterGetSetSimd for StridedMutSimd<'a, T>
where T: CommonBounds + 'a,

Source§

type Item = &'a mut T

The type of the iterator’s elements.
Source§

type SimdItem = &'a mut <T as TypeCommon>::Vec

The type of the iterator’s simd elements.
Source§

fn set_end_index(&mut self, end_index: usize)

set the end index of the iterator, this is used when rayon perform data splitting
Source§

fn set_intervals(&mut self, intervals: Arc<Vec<(usize, usize)>>)

set the chunk intervals of the iterator, we chunk the outer loop
Source§

fn set_strides(&mut self, strides: Strides)

set the strides for the iterator, we call this method normally when we do broadcasting
Source§

fn set_shape(&mut self, shape: Shape)

set the shape for the iterator, we call this method normally when we do broadcasting
Source§

fn set_prg(&mut self, prg: Vec<i64>)

set the loop progress for the iterator
Source§

fn intervals(&self) -> &Arc<Vec<(usize, usize)>>

get the intervals of the iterator
Source§

fn strides(&self) -> &Strides

get the strides of the iterator
Source§

fn shape(&self) -> &Shape

get the shape of the iterator
Source§

fn layout(&self) -> &Layout

get the layout of the iterator
Source§

fn broadcast_set_strides(&mut self, shape: &Shape)

set the strides for all the iterators
Source§

fn outer_loop_size(&self) -> usize

get the outer loop size
Source§

fn inner_loop_size(&self) -> usize

get the inner loop size
Source§

fn next(&mut self)

update the loop progress, this is called when we don’t do simd iteration
Source§

fn next_simd(&mut self)

update the loop progress, this is called when we do simd iteration
Source§

fn inner_loop_next(&mut self, index: usize) -> Self::Item

get the next element of the inner loop
Source§

fn inner_loop_next_simd(&mut self, index: usize) -> Self::SimdItem

get the next vector of the inner loop, this is called when we do simd iteration
Source§

fn all_last_stride_one(&self) -> bool

check if all iterators’ last stride is one, only when all iterators’ last stride is one, we can do simd iteration
Source§

fn lanes(&self) -> Option<usize>

get the simd vector size, if any of the iterator returned different vector size, it will return None
Source§

impl<'a, T> StridedIteratorSimd for StridedMutSimd<'a, T>
where T: CommonBounds,

Source§

fn for_each<F, F2>(self, op: F, vec_op: F2)
where F: Fn(Self::Item), F2: Fn(Self::SimdItem),

perform simd iteration, this method is for single thread simd iterator
Source§

fn for_each_init<F, INIT, T>(self, init: INIT, func: F)
where F: Fn(&mut T, Self::Item), INIT: Fn() -> T,

perform simd iteration with init, this method is for single thread simd iterator
Source§

impl<'a, T> StridedSimdIteratorZip for StridedMutSimd<'a, T>
where T: CommonBounds,

Source§

fn zip<'a, C>(self, other: C) -> StridedZipSimd<'a, Self, C>
where C: 'a + IterGetSetSimd, <C as IterGetSetSimd>::Item: Send, Self: IterGetSetSimd, <Self as IterGetSetSimd>::Item: Send,

Combines this iterator with another SIMD-optimized iterator, enabling simultaneous iteration. Read more

Auto Trait Implementations§

§

impl<'a, T> Freeze for StridedMutSimd<'a, T>

§

impl<'a, T> RefUnwindSafe for StridedMutSimd<'a, T>
where T: RefUnwindSafe,

§

impl<'a, T> Send for StridedMutSimd<'a, T>

§

impl<'a, T> Sync for StridedMutSimd<'a, T>

§

impl<'a, T> Unpin for StridedMutSimd<'a, T>

§

impl<'a, T> UnwindSafe for StridedMutSimd<'a, T>
where T: RefUnwindSafe,

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

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V