pub struct DepthwiseSpace { /* private fields */ }Expand description
The space one launch runs over, in the terms the kernel builds it from: the problem’s extents and the tiling. The kernel’s comptime argument, so the space the launch sizes its grid from is the space the kernel walks.
Implementations§
Source§impl DepthwiseSpace
impl DepthwiseSpace
Sourcepub fn extents(&self) -> Vec<(Axis, usize)>
pub fn extents(&self) -> Vec<(Axis, usize)>
The space’s axes and their extents, every one static.
Sourcepub fn levels(&self) -> Vec<Level>
pub fn levels(&self) -> Vec<Level>
Three levels, outermost first. The first separates the output across the launch grid: an
all-sequential level would put the whole convolution in one instance, which is a
correct kernel and a useless one. The next two separate what one cube took across the
cube’s own threads: rows go to planes, channels to lanes. The taps stay whole
throughout: they are the contraction, and every tap of one output position accumulates
into the same register.
The levels, stated from the leaf up, in counts: one lane’s channel line by the
cube’s columns by one row; the plane’s lanes across channels, in turns; the channel lines
a lane holds past its first, where the tile is wider than the plane; the cube’s rows
across its planes; and a cube per box, the taps whole. The channel axis takes X so
that the fastest-moving cube index is the one memory is contiguous along.
Round-robin across the lanes, so a lane holding several channel lines takes every
plane_size-th rather than a contiguous run: a contiguous run puts a stride between
what neighbouring lanes read and breaks the coalescing the whole NHWC layout is for.
Columns stay whole: they are the register block, not a split. The walk over a lane’s
further lines is stated only where there are any — the old lanes level was that walk
as well, its length found by dividing the tile.
pub fn space(&self) -> Space
Sourcepub fn partitioning(&self) -> Partitioning
pub fn partitioning(&self) -> Partitioning
The space with the levels that cut it: what the leaf and the overhangs are read off.
Trait Implementations§
Source§impl Clone for DepthwiseSpace
impl Clone for DepthwiseSpace
impl Copy for DepthwiseSpace
Source§impl Debug for DepthwiseSpace
impl Debug for DepthwiseSpace
impl Eq for DepthwiseSpace
Source§impl Hash for DepthwiseSpace
impl Hash for DepthwiseSpace
Source§impl PartialEq for DepthwiseSpace
impl PartialEq for DepthwiseSpace
impl StructuralPartialEq for DepthwiseSpace
Auto Trait Implementations§
impl Freeze for DepthwiseSpace
impl RefUnwindSafe for DepthwiseSpace
impl Send for DepthwiseSpace
impl Sync for DepthwiseSpace
impl Unpin for DepthwiseSpace
impl UnsafeUnpin for DepthwiseSpace
impl UnwindSafe for DepthwiseSpace
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> CompilationArg for T
impl<T> CompilationArg for T
Source§fn dynamic_cast<Arg>(&self) -> Argwhere
Arg: CompilationArg,
fn dynamic_cast<Arg>(&self) -> Argwhere
Arg: CompilationArg,
impl<T> CubeComptime for T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<K, Q> Equivalent<Q> for K
impl<K, Q> Equivalent<Q> for K
Source§fn equivalent(&self, key: &Q) -> bool
fn equivalent(&self, key: &Q) -> bool
key and return true if they are equal.impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
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