cubecl_reduce/instructions/utils.rs
1use cubecl_core as cubecl;
2use cubecl_core::prelude::*;
3
4// Using plane operations, return the lowest coordinate for each line element
5// for which the item equal the target.
6#[cube]
7pub(crate) fn lowest_coordinate_matching<E: CubePrimitive>(
8 target: Line<E>,
9 item: Line<E>,
10 coordinate: Line<u32>,
11) -> Line<u32> {
12 let line_size = item.size();
13 let is_candidate = item.equal(target);
14 let candidate_coordinate = select_many(
15 is_candidate,
16 coordinate,
17 Line::empty(line_size).fill(u32::MAX),
18 );
19 plane_min(candidate_coordinate)
20}