use diskann_wide::Architecture;
use super::Kernel;
use super::TileBudget;
use super::f32::{F32Kernel, max_ip_kernel};
use super::layouts;
use crate::multi_vector::{BlockTransposedRef, MatRef, Standard};
pub(crate) struct F16Entry<const GROUP: usize>;
impl<A, const GROUP: usize>
diskann_wide::arch::Target3<
A,
(),
BlockTransposedRef<'_, half::f16, GROUP>,
MatRef<'_, Standard<half::f16>>,
&mut [f32],
> for F16Entry<GROUP>
where
A: Architecture,
F32Kernel<GROUP>: Kernel<A>,
layouts::BlockTransposed<half::f16, GROUP>: layouts::ConvertTo<A, <F32Kernel<GROUP> as Kernel<A>>::Left>
+ layouts::Layout<Element = half::f16>,
layouts::RowMajor<half::f16>: layouts::ConvertTo<A, <F32Kernel<GROUP> as Kernel<A>>::Right>
+ layouts::Layout<Element = half::f16>,
{
#[inline(always)]
fn run(
self,
arch: A,
lhs: BlockTransposedRef<'_, half::f16, GROUP>,
rhs: MatRef<'_, Standard<half::f16>>,
scratch: &mut [f32],
) {
max_ip_kernel(arch, lhs, rhs, scratch, TileBudget::default());
}
}