Skip to main content

hermes_simd/dispatch/
dot.rs

1//! Generic runtime-dispatch dot product kernel.
2
3use hermes_simd_core::{
4    align::Unaligned,
5    arch::SimdArch,
6    execution::Unmasked,
7    kernel::SimdKernel,
8    scalar::Scalar,
9    view::{SimdError, SimdView},
10};
11use hermes_simd_macros::runtime_dispatch;
12
13#[runtime_dispatch(avx512f, avx2, neon, scalar)]
14pub(super) fn dispatch_dot_kernel<T, A>(a: &[T], b: &[T]) -> Result<T, SimdError>
15where
16    T: Scalar,
17    A: SimdArch + SimdKernel<T>,
18{
19    match (
20        SimdView::<T, A, Unaligned, Unmasked, &[T]>::new(a),
21        SimdView::<T, A, Unaligned, Unmasked, &[T]>::new(b),
22    ) {
23        (Some(v1), Some(v2)) => v1.dot(&v2),
24        _ => unsafe { core::hint::unreachable_unchecked() },
25    }
26}