pub struct Specialize<const N: usize, F>(/* private fields */);Expand description
A utility for specializing distance computations for fixed-length slices.
When F implements diskann_wide::arch::Target2 for UnalignedSlice,
Specialize<N, F> will implement diskann_wide::arch::FTarget2 for slices of exactly
length N. This can lead to must better generated code, especially when N is small.
Passing slices of length not equal to N will panic.
use diskann_vector::{AsUnaligned, distance::{Specialize, SquaredL2}};
use diskann_wide::{ARCH, arch::FTarget2};
let x = [1.0f32, 2.0, 3.0];
let y = [2.0f32, 3.0, 4.0];
let result: f32 = Specialize::<3, SquaredL2>::run(
ARCH,
x.as_unaligned(),
y.as_unaligned(),
);
assert_eq!(result, 3.0);Implementations§
Source§impl<const N: usize, F> Specialize<N, F>
impl<const N: usize, F> Specialize<N, F>
Sourcepub const fn new() -> Self
pub const fn new() -> Self
Create a new Specialize.
Trait Implementations§
Source§impl<const N: usize, F> Clone for Specialize<N, F>
impl<const N: usize, F> Clone for Specialize<N, F>
impl<const N: usize, F> Copy for Specialize<N, F>
Source§impl<const N: usize, F> Default for Specialize<N, F>
impl<const N: usize, F> Default for Specialize<N, F>
Source§impl<A, T, L, R, const N: usize, F> FTarget2<A, T, UnalignedSlice<'_, L>, UnalignedSlice<'_, R>> for Specialize<N, F>where
A: Architecture,
F: for<'a, 'b> Target2<A, T, UnalignedSlice<'a, L>, UnalignedSlice<'b, R>> + Default,
impl<A, T, L, R, const N: usize, F> FTarget2<A, T, UnalignedSlice<'_, L>, UnalignedSlice<'_, R>> for Specialize<N, F>where
A: Architecture,
F: for<'a, 'b> Target2<A, T, UnalignedSlice<'a, L>, UnalignedSlice<'b, R>> + Default,
fn run(arch: A, x: UnalignedSlice<'_, L>, y: UnalignedSlice<'_, R>) -> T
Auto Trait Implementations§
impl<const N: usize, F> Freeze for Specialize<N, F>
impl<const N: usize, F> RefUnwindSafe for Specialize<N, F>where
F: RefUnwindSafe,
impl<const N: usize, F> Send for Specialize<N, F>where
F: Send,
impl<const N: usize, F> Sync for Specialize<N, F>where
F: Sync,
impl<const N: usize, F> Unpin for Specialize<N, F>where
F: Unpin,
impl<const N: usize, F> UnsafeUnpin for Specialize<N, F>
impl<const N: usize, F> UnwindSafe for Specialize<N, F>where
F: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more