use cubecl::prelude::*;
#[cube]
pub fn load_lanes<F: Float, N: Size>(input: &[F], start: usize, valid: u32) -> Vector<F, N> {
let mut v = Vector::<F, N>::empty();
let n = v.vector_size();
let last = valid - 1u32;
#[unroll]
for l in 0..n {
v.insert(l, input[start + u32::min(l as u32, last) as usize]);
}
v
}
#[cube]
pub fn store_lanes<F: Float, N: Size>(output: &mut [F], start: usize, value: Vector<F, N>, valid: u32) {
let n = value.vector_size();
#[unroll]
for l in 0..n {
if (l as u32) < valid {
output[start + l] = value.extract(l);
}
}
}