pub mod cagra_gpu_search;
pub mod dist_gpu;
pub mod exhaustive_gpu;
pub mod forest_gpu;
pub mod ivf_gpu;
pub mod nndescent_gpu;
pub mod tensor;
pub mod traits_gpu;
pub const QUERY_CHUNK_SIZE: usize = 8192;
pub const DB_CHUNK_SIZE: usize = 16_384;
pub const WORKGROUP_SIZE_X: u32 = 32;
pub const WORKGROUP_SIZE_Y: u32 = 32;
pub const LINE_SIZE: u32 = 4;
pub fn grid_2d(total_cubes: u32) -> (u32, u32) {
let x = total_cubes.min(65535);
let y = total_cubes.div_ceil(x);
(x, y)
}
pub fn pad_vectors<T: num_traits::Float>(
flat: &[T],
n: usize,
dim: usize,
dim_padded: usize,
) -> Vec<T> {
let mut padded = vec![T::zero(); n * dim_padded];
for i in 0..n {
let src = &flat[i * dim..(i + 1) * dim];
let dst = &mut padded[i * dim_padded..i * dim_padded + dim];
dst.copy_from_slice(src);
}
padded
}