pub struct ArgMax;
Expand description
Compute the coordinate of the maximum item returning the smallest coordinate in case of equality.
Implementations§
Source§impl ArgMax
impl ArgMax
Sourcepub fn choose_argmax<N: Numeric>(
items0: Line<N>,
coordinates0: Line<u32>,
items1: Line<N>,
coordinates1: Line<u32>,
) -> (Line<N>, Line<u32>)
pub fn choose_argmax<N: Numeric>( items0: Line<N>, coordinates0: Line<u32>, items1: Line<N>, coordinates1: Line<u32>, ) -> (Line<N>, Line<u32>)
Compare two pairs of items and coordinates and return a new pair where each element in the lines is the maximal item with its coordinate. In case of equality, the lowest coordinate is selected.
pub fn __expand_choose_argmax<N: Numeric>( context: &mut CubeContext, items0: <Line<N> as CubeType>::ExpandType, coordinates0: <Line<u32> as CubeType>::ExpandType, items1: <Line<N> as CubeType>::ExpandType, coordinates1: <Line<u32> as CubeType>::ExpandType, ) -> <(Line<N>, Line<u32>) as CubeType>::ExpandType
Trait Implementations§
Source§impl<In: Numeric> ReduceInstruction<In> for ArgMax
impl<In: Numeric> ReduceInstruction<In> for ArgMax
Source§type AccumulatorItem = (Line<In>, Line<u32>)
type AccumulatorItem = (Line<In>, Line<u32>)
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.Source§fn null_input(line_size: u32) -> Line<In>
fn null_input(line_size: u32) -> Line<In>
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(line_size: u32) -> Self::AccumulatorItem
fn null_accumulator(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(
destination: &mut Self::AccumulatorItem,
source: &Self::AccumulatorItem,
)
fn assign_accumulator( 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(
accumulator: &Self::AccumulatorItem,
item: Line<In>,
coordinate: Line<u32>,
use_planes: bool,
) -> Self::AccumulatorItem
fn reduce( accumulator: &Self::AccumulatorItem, item: Line<In>, coordinate: Line<u32>, 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(
lhs: Self::AccumulatorItem,
rhs: Self::AccumulatorItem,
) -> Self::AccumulatorItem
fn fuse_accumulators( lhs: Self::AccumulatorItem, rhs: Self::AccumulatorItem, ) -> Self::AccumulatorItem
Reduce two accumulators into a single accumulator.
Source§fn merge_line<Out: Numeric>(
accumulator: Self::AccumulatorItem,
_shape_axis_reduce: u32,
) -> Out
fn merge_line<Out: Numeric>( 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>(
accumulator: Self::AccumulatorItem,
_shape_axis_reduce: u32,
) -> Line<Out>
fn to_output_perpendicular<Out: Numeric>( 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_null_input( context: &mut CubeContext, line_size: u32, ) -> <Line<In> as CubeType>::ExpandType
fn __expand_null_accumulator( context: &mut CubeContext, line_size: u32, ) -> <Self::AccumulatorItem as CubeType>::ExpandType
fn __expand_assign_accumulator( context: &mut CubeContext, destination: <Self::AccumulatorItem as CubeType>::ExpandType, source: <Self::AccumulatorItem as CubeType>::ExpandType, ) -> <() as CubeType>::ExpandType
fn __expand_reduce( context: &mut CubeContext, accumulator: <Self::AccumulatorItem as CubeType>::ExpandType, item: <Line<In> as CubeType>::ExpandType, coordinate: <Line<u32> as CubeType>::ExpandType, use_planes: bool, ) -> <Self::AccumulatorItem as CubeType>::ExpandType
fn __expand_fuse_accumulators( context: &mut CubeContext, lhs: <Self::AccumulatorItem as CubeType>::ExpandType, rhs: <Self::AccumulatorItem as CubeType>::ExpandType, ) -> <Self::AccumulatorItem as CubeType>::ExpandType
fn __expand_merge_line<Out: Numeric>( context: &mut CubeContext, accumulator: <Self::AccumulatorItem as CubeType>::ExpandType, _shape_axis_reduce: <u32 as CubeType>::ExpandType, ) -> <Out as CubeType>::ExpandType
fn __expand_to_output_perpendicular<Out: Numeric>( context: &mut CubeContext, accumulator: <Self::AccumulatorItem as CubeType>::ExpandType, _shape_axis_reduce: <u32 as CubeType>::ExpandType, ) -> <Line<Out> as CubeType>::ExpandType
Auto Trait Implementations§
impl Freeze for ArgMax
impl RefUnwindSafe for ArgMax
impl Send for ArgMax
impl Sync for ArgMax
impl Unpin for ArgMax
impl UnwindSafe for ArgMax
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