pub struct FmaAdd;Expand description
Fused-multiply-add elementwise operation: out[i] = a[i] * b[i] + a[i] (binary form).
As an ElementOp, this interprets the two operand vectors as a and b, and computes
fmadd(a, b, zero) — i.e. a * b with hardware FMA precision, accumulating into zero.
To use as a ternary a*b + c accumulation, call Arch::fmadd directly.
§Zero-Cost Guarantee
size_of::<FmaAdd>() == 0. Monomorphization over Arch eliminates the ZST entirely;
the call site reduces to a direct Arch::fmadd instruction.
Trait Implementations§
impl Copy for FmaAdd
Source§impl<T> ElementOp<T> for FmaAddwhere
T: NumericElement,
impl<T> ElementOp<T> for FmaAddwhere
T: NumericElement,
Source§unsafe fn apply<Arch>(
self,
a: <Arch as SimdKernel<T>>::Vector,
b: <Arch as SimdKernel<T>>::Vector,
) -> <Arch as SimdKernel<T>>::Vectorwhere
Arch: SimdKernel<T>,
unsafe fn apply<Arch>(
self,
a: <Arch as SimdKernel<T>>::Vector,
b: <Arch as SimdKernel<T>>::Vector,
) -> <Arch as SimdKernel<T>>::Vectorwhere
Arch: SimdKernel<T>,
fmadd(a, b, zero) — uses hardware FMA where available.
§Safety
Processor must support the target feature of Arch.
Source§fn apply_scalar(self, a: T, b: T) -> T
fn apply_scalar(self, a: T, b: T) -> T
Scalar tail: a * b (scalar mul; the addend is the implicit zero).
impl Eq for FmaAdd
impl StructuralPartialEq for FmaAdd
Auto Trait Implementations§
impl Freeze for FmaAdd
impl RefUnwindSafe for FmaAdd
impl Send for FmaAdd
impl Sync for FmaAdd
impl Unpin for FmaAdd
impl UnsafeUnpin for FmaAdd
impl UnwindSafe for FmaAdd
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Converts some archived metadata to the pointer metadata for itself.
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Returns the layout of the type.
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Returns whether the given value has been niched. Read more
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
Writes data to
out indicating that a T is niched.