use cubecl::prelude::*;
pub(crate) fn max_shared_fft_n(client: &Client, dtype: ElemType) -> usize {
let max_smem = client.properties().hardware.max_shared_memory_size;
let max_elems = max_smem / (2 * dtype.size());
floor_power_of_two(max_elems)
}
pub(crate) fn max_units_per_cube(client: &Client) -> usize {
client.properties().hardware.max_units_per_cube as usize
}
fn floor_power_of_two(n: usize) -> usize {
assert!(n > 0, "device reports zero shared memory / units");
if n.is_power_of_two() {
n
} else {
n.next_power_of_two() >> 1
}
}