use cubecl::prelude::*;
use cubecl::std::tensor::layout::linear::{LinearView, LinearViewMut};
use cubecl::{self as cubecl, cube};
pub const TOUCHED_PER_WRITTEN: u32 = 64;
#[cube(launch, address_type = "dynamic")]
pub fn touch_vectors<E: Numeric, N: Size>(
input: LinearView<'_, Vector<E, N>>,
mut output: LinearViewMut<'_, Vector<E, N>>,
#[define(E)] _dtype: ElemType,
) {
if !output.is_in_bounds(ABSOLUTE_POS) {
terminate!();
}
let units = output.shape();
let mut sum = Vector::<E, N>::cast_from(0u32);
#[unroll]
for i in 0..TOUCHED_PER_WRITTEN as usize {
let vector = ABSOLUTE_POS + i * units;
if input.is_in_bounds(vector) {
sum += input.read(vector);
}
}
output.write(ABSOLUTE_POS, sum);
}