pub enum ReduceFn {
Sum(Sum),
Prod(Prod),
Mean(Mean),
MaxAbs(MaxAbs),
ArgMax(ArgMax),
ArgMin(ArgMin),
Max(Max),
Min(Min),
}
Variants§
Implementations§
Source§impl ReduceFn
impl ReduceFn
pub fn new_Sum(_0: Sum) -> Self
pub fn __expand_new_Sum( _: &mut Scope, _0: <Sum as CubeType>::ExpandType, ) -> ReduceFnExpand
pub fn new_Prod(_0: Prod) -> Self
pub fn __expand_new_Prod( _: &mut Scope, _0: <Prod as CubeType>::ExpandType, ) -> ReduceFnExpand
pub fn new_Mean(_0: Mean) -> Self
pub fn __expand_new_Mean( _: &mut Scope, _0: <Mean as CubeType>::ExpandType, ) -> ReduceFnExpand
pub fn new_MaxAbs(_0: MaxAbs) -> Self
pub fn __expand_new_MaxAbs( _: &mut Scope, _0: <MaxAbs as CubeType>::ExpandType, ) -> ReduceFnExpand
pub fn new_ArgMax(_0: ArgMax) -> Self
pub fn __expand_new_ArgMax( _: &mut Scope, _0: <ArgMax as CubeType>::ExpandType, ) -> ReduceFnExpand
pub fn new_ArgMin(_0: ArgMin) -> Self
pub fn __expand_new_ArgMin( _: &mut Scope, _0: <ArgMin as CubeType>::ExpandType, ) -> ReduceFnExpand
pub fn new_Max(_0: Max) -> Self
pub fn __expand_new_Max( _: &mut Scope, _0: <Max as CubeType>::ExpandType, ) -> ReduceFnExpand
pub fn new_Min(_0: Min) -> Self
pub fn __expand_new_Min( _: &mut Scope, _0: <Min as CubeType>::ExpandType, ) -> ReduceFnExpand
Trait Implementations§
Source§impl CubeDebug for ReduceFn
impl CubeDebug for ReduceFn
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 CubeType for ReduceFn
impl CubeType for ReduceFn
type ExpandType = ReduceFnExpand
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 ReduceFamily for ReduceFn
impl ReduceFamily for ReduceFn
type Instruction<P: ReducePrecision> = ReduceFn
type Config = ReduceFnConfig
Source§impl<P: ReducePrecision> ReduceInstruction<P> for ReduceFn
impl<P: ReducePrecision> ReduceInstruction<P> for ReduceFn
Source§type AccumulatorItem = DynamicAccumulatorItem<<P as ReducePrecision>::EA>
type AccumulatorItem = DynamicAccumulatorItem<<P as ReducePrecision>::EA>
The intermediate state into which we accumulate new input elements.
This is most likely a
Line<T>
or a struct or tuple of lines.When multiple agents are collaborating to reduce a single slice,
we need a share accumulator to store multiple
AccumulatorItem
.
This is most likely a SharedMemory<Line<T>>
or a struct or tuple of lined shared memories.type Config = ReduceFnConfig
Source§fn requirements(this: &Self) -> ReduceRequirements
fn requirements(this: &Self) -> ReduceRequirements
Requirements of the reduce.
fn from_config(config: Self::Config) -> Self
Source§fn null_input(this: &Self, line_size: u32) -> Line<P::EI>
fn null_input(this: &Self, line_size: u32) -> Line<P::EI>
A input such that
Self::reduce(accumulator, Self::null_input(), coordinate, use_planes)
is guaranteed to return accumulator
unchanged for any choice of coordinate
.Source§fn null_accumulator(this: &Self, line_size: u32) -> Self::AccumulatorItem
fn null_accumulator(this: &Self, line_size: u32) -> Self::AccumulatorItem
A accumulator such that
Self::fuse_accumulators(accumulator, Self::null_accumulator()
always returns
is guaranteed to return accumulator
unchanged.Source§fn assign_accumulator(
_this: &Self,
destination: &mut Self::AccumulatorItem,
source: &Self::AccumulatorItem,
)
fn assign_accumulator( _this: &Self, destination: &mut Self::AccumulatorItem, source: &Self::AccumulatorItem, )
Assign the value of
source
into destination
.
In spirit, this is equivalent to destination = source;
,
but this syntax is not currently supported by CubeCL.Source§fn reduce(
this: &Self,
accumulator: &Self::AccumulatorItem,
item: Line<P::EI>,
coordinate: ReduceCoordinate,
use_planes: bool,
) -> Self::AccumulatorItem
fn reduce( this: &Self, accumulator: &Self::AccumulatorItem, item: Line<P::EI>, coordinate: ReduceCoordinate, use_planes: bool, ) -> Self::AccumulatorItem
If
use_planes
is true
, reduce all the item
and coordinate
within the accumulator
.
Else, reduce the given item
and coordinate
into the accumulator.Source§fn fuse_accumulators(
this: &Self,
lhs: Self::AccumulatorItem,
rhs: Self::AccumulatorItem,
) -> Self::AccumulatorItem
fn fuse_accumulators( this: &Self, lhs: Self::AccumulatorItem, rhs: Self::AccumulatorItem, ) -> Self::AccumulatorItem
Reduce two accumulators into a single accumulator.
Source§fn merge_line<Out: Numeric>(
this: &Self,
accumulator: Self::AccumulatorItem,
shape_axis_reduce: u32,
) -> Out
fn merge_line<Out: Numeric>( this: &Self, accumulator: Self::AccumulatorItem, shape_axis_reduce: u32, ) -> Out
Reduce all elements of the accumulator into a single output element of type
Out
.Source§fn to_output_perpendicular<Out: Numeric>(
this: &Self,
accumulator: Self::AccumulatorItem,
shape_axis_reduce: u32,
) -> Line<Out>
fn to_output_perpendicular<Out: Numeric>( this: &Self, accumulator: Self::AccumulatorItem, shape_axis_reduce: u32, ) -> Line<Out>
Convert each element of the accumulator into the expected output element of type
Out
.fn __expand_requirements( scope: &mut Scope, this: <Self as CubeType>::ExpandType, ) -> <ReduceRequirements as CubeType>::ExpandType
fn __expand_from_config( scope: &mut Scope, config: Self::Config, ) -> <Self as CubeType>::ExpandType
fn __expand_null_input( scope: &mut Scope, this: <Self as CubeType>::ExpandType, line_size: u32, ) -> <Line<P::EI> as CubeType>::ExpandType
fn __expand_null_accumulator( scope: &mut Scope, this: <Self as CubeType>::ExpandType, line_size: u32, ) -> <Self::AccumulatorItem as CubeType>::ExpandType
fn __expand_assign_accumulator( scope: &mut Scope, _this: <Self as CubeType>::ExpandType, destination: <Self::AccumulatorItem as CubeType>::ExpandType, source: <Self::AccumulatorItem as CubeType>::ExpandType, ) -> <() as CubeType>::ExpandType
fn __expand_reduce( scope: &mut Scope, this: <Self as CubeType>::ExpandType, accumulator: <Self::AccumulatorItem as CubeType>::ExpandType, item: <Line<P::EI> as CubeType>::ExpandType, coordinate: <ReduceCoordinate as CubeType>::ExpandType, use_planes: bool, ) -> <Self::AccumulatorItem as CubeType>::ExpandType
fn __expand_fuse_accumulators( scope: &mut Scope, this: <Self as CubeType>::ExpandType, lhs: <Self::AccumulatorItem as CubeType>::ExpandType, rhs: <Self::AccumulatorItem as CubeType>::ExpandType, ) -> <Self::AccumulatorItem as CubeType>::ExpandType
fn __expand_merge_line<Out: Numeric>( scope: &mut Scope, this: <Self as CubeType>::ExpandType, accumulator: <Self::AccumulatorItem as CubeType>::ExpandType, shape_axis_reduce: <u32 as CubeType>::ExpandType, ) -> <Out as CubeType>::ExpandType
fn __expand_to_output_perpendicular<Out: Numeric>( scope: &mut Scope, this: <Self as CubeType>::ExpandType, accumulator: <Self::AccumulatorItem as CubeType>::ExpandType, shape_axis_reduce: <u32 as CubeType>::ExpandType, ) -> <Line<Out> as CubeType>::ExpandType
Auto Trait Implementations§
impl Freeze for ReduceFn
impl RefUnwindSafe for ReduceFn
impl Send for ReduceFn
impl Sync for ReduceFn
impl Unpin for ReduceFn
impl UnwindSafe for ReduceFn
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