pub fn dot<A, B, R, OpA, OpB>(
a: &StridedView<'_, A, OpA>,
b: &StridedView<'_, B, OpB>,
) -> Result<R>where
A: Copy + Mul<B, Output = R> + MaybeSendSync + 'static,
B: Copy + MaybeSendSync + 'static,
R: Copy + Zero + Add<Output = R> + MaybeSendSync + MaybeSimdOps + 'static,
OpA: ElementOp<A>,
OpB: ElementOp<B>,Expand description
Dot product: sum(OpA::apply(a[i]) * OpB::apply(b[i])).
Operands may have different element types. Result type R must be A * B.
SIMD fast path fires only when A == B == R (same type) and both Identity ops.