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( _: &mut 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( _: &mut 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: &mut Scope, this: <Self as CubeType>::ExpandType, dividend: <I as CubeType>::ExpandType, ) -> <I as CubeType>::ExpandType
pub fn __expand_modulo( scope: &mut Scope, this: <Self as CubeType>::ExpandType, dividend: <I as CubeType>::ExpandType, ) -> <I as CubeType>::ExpandType
pub fn __expand_div_mod( scope: &mut Scope, this: <Self as CubeType>::ExpandType, dividend: <I as CubeType>::ExpandType, ) -> <(I, 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 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<I: FastDivmodInt> CubeDebug for FastDivmod<I>
impl<I: FastDivmodInt> CubeDebug for FastDivmod<I>
Source§fn set_debug_name(&self, scope: &mut Scope, name: &'static str)
fn set_debug_name(&self, scope: &mut 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§fn into_mut(scope: &mut Scope, expand: Self::ExpandType) -> Self::ExpandType
fn into_mut(scope: &mut Scope, expand: Self::ExpandType) -> Self::ExpandType
Wrapper around the init method, necessary to type inference.
Source§impl<I: FastDivmodInt> LaunchArg for FastDivmod<I>
impl<I: FastDivmodInt> LaunchArg for FastDivmod<I>
Source§type RuntimeArg<'a, R: Runtime> = FastDivmodArgs<I>
type RuntimeArg<'a, R: Runtime> = FastDivmodArgs<I>
The runtime argument for the kernel.
Source§type CompilationArg = FastDivmodCompilationArg<I>
type CompilationArg = FastDivmodCompilationArg<I>
Compilation argument.
fn compilation_arg<'a, R: Runtime>( runtime_arg: &Self::RuntimeArg<'a, 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 an input variable during compilation that fill the KernelBuilder.
Source§fn expand_output(
arg: &Self::CompilationArg,
builder: &mut KernelBuilder,
) -> <Self as CubeType>::ExpandType
fn expand_output( arg: &Self::CompilationArg, builder: &mut KernelBuilder, ) -> <Self as CubeType>::ExpandType
Register an output variable during compilation that fill the KernelBuilder.
impl<I: Copy + FastDivmodInt> Copy for FastDivmod<I>
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> 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