pub enum FastDivmod<I: FastDivmodInt> {
Fast {
divisor: I,
multiplier: I,
shift_right: u32,
},
Fallback {
divisor: I,
},
}Expand description
Create a fast-divmod object if supported, or a regular fallback if not. This precalculates certain values on the host, in exchange for making division and modulo operations on the GPU much faster. Only supports u32 right now to allow for a simpler algorithm. It’s mostly used for indices regardless.
Implementation based on ONNX: https://github.com/microsoft/onnxruntime/blob/main/onnxruntime/core/providers/cuda/shared_inc/fast_divmod.h
Variants§
Implementations§
Source§impl<I: FastDivmodInt> FastDivmod<I>
impl<I: FastDivmodInt> FastDivmod<I>
pub fn new_Fast(divisor: I, multiplier: I, shift_right: u32) -> Self
pub fn __expand_new_Fast( _: &Scope, divisor: <I as CubeType>::ExpandType, multiplier: <I as CubeType>::ExpandType, shift_right: <u32 as CubeType>::ExpandType, ) -> FastDivmodExpand<I>
pub fn new_Fallback(divisor: I) -> Self
pub fn __expand_new_Fallback( _: &Scope, divisor: <I as CubeType>::ExpandType, ) -> FastDivmodExpand<I>
Source§impl<I: FastDivmodInt> FastDivmod<I>
impl<I: FastDivmodInt> FastDivmod<I>
pub fn div(&self, dividend: I) -> I
pub fn modulo(&self, dividend: I) -> I
pub fn div_mod(&self, dividend: I) -> (I, I)
pub fn __expand_div( scope: &Scope, this: &<Self as CubeType>::ExpandType, dividend: <I as CubeType>::ExpandType, ) -> <I as CubeType>::ExpandType
pub fn __expand_modulo( scope: &Scope, this: &<Self as CubeType>::ExpandType, dividend: <I as CubeType>::ExpandType, ) -> <I as CubeType>::ExpandType
pub fn __expand_div_mod( scope: &Scope, this: &<Self as CubeType>::ExpandType, dividend: <I as CubeType>::ExpandType, ) -> (<I as CubeType>::ExpandType, <I as CubeType>::ExpandType)
Trait Implementations§
Source§impl<I: Clone + FastDivmodInt> Clone for FastDivmod<I>
impl<I: Clone + FastDivmodInt> Clone for FastDivmod<I>
Source§fn clone(&self) -> FastDivmod<I>
fn clone(&self) -> FastDivmod<I>
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreimpl<I: Copy + FastDivmodInt> Copy for FastDivmod<I>
Source§impl<I: FastDivmodInt> CubeDebug for FastDivmod<I>
impl<I: FastDivmodInt> CubeDebug for FastDivmod<I>
Source§fn set_debug_name(&self, scope: &Scope, name: &'static str)
fn set_debug_name(&self, scope: &Scope, name: &'static str)
Set the debug name of this type’s expansion. Should do nothing for types that don’t appear
at runtime
Source§impl<I: FastDivmodInt> CubeType for FastDivmod<I>
impl<I: FastDivmodInt> CubeType for FastDivmod<I>
type ExpandType = FastDivmodExpand<I>
Source§impl<I> LaunchArg for FastDivmod<I>
impl<I> LaunchArg for FastDivmod<I>
Source§type RuntimeArg<R: Runtime> = I
type RuntimeArg<R: Runtime> = I
The runtime argument for the kernel.
Source§type CompilationArg = FastDivmodCompilationArg
type CompilationArg = FastDivmodCompilationArg
Compilation argument.
fn register<R: Runtime>( divisor: Self::RuntimeArg<R>, launcher: &mut KernelLauncher<R>, ) -> Self::CompilationArg
Source§fn expand(
arg: &Self::CompilationArg,
builder: &mut KernelBuilder,
) -> <Self as CubeType>::ExpandType
fn expand( arg: &Self::CompilationArg, builder: &mut KernelBuilder, ) -> <Self as CubeType>::ExpandType
Register a variable during compilation that fill the
KernelBuilder.Auto Trait Implementations§
impl<I> Freeze for FastDivmod<I>where
I: Freeze,
impl<I> RefUnwindSafe for FastDivmod<I>where
I: RefUnwindSafe,
impl<I> Send for FastDivmod<I>
impl<I> Sync for FastDivmod<I>
impl<I> Unpin for FastDivmod<I>where
I: Unpin,
impl<I> UnsafeUnpin for FastDivmod<I>where
I: UnsafeUnpin,
impl<I> UnwindSafe for FastDivmod<I>where
I: UnwindSafe,
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
Mutably borrows from an owned value. Read more
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>
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 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>
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 moreimpl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> TuneInputs for T
impl<T> TuneInputs for T
Source§impl<T> ViewLayoutLaunchArg for T
impl<T> ViewLayoutLaunchArg for T
Source§type RuntimeArg<R: Runtime> = <T as LaunchArg>::RuntimeArg<R>
type RuntimeArg<R: Runtime> = <T as LaunchArg>::RuntimeArg<R>
The runtime argument for the kernel.
Source§type CompilationArg = <T as LaunchArg>::CompilationArg
type CompilationArg = <T as LaunchArg>::CompilationArg
Compilation argument.
fn register<R, B>( arg: <T as ViewLayoutLaunchArg>::RuntimeArg<R>, _buffer: &B, _ty: Type, launcher: &mut KernelLauncher<R>, ) -> <T as ViewLayoutLaunchArg>::CompilationArg
Source§fn expand(
arg: &<T as ViewLayoutLaunchArg>::CompilationArg,
_ty: Type,
builder: &mut KernelBuilder,
) -> <T as CubeType>::ExpandType
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
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.