pub enum F32Transcendental {
ScalarLibm,
AccelerateVForce,
SleefU10,
}Expand description
Which sin/exp implementation an elementwise parity probe evaluates.
The reference stack does not call the scalar libm for large tensors: its CPU elementwise kernels
dispatch through a vectorized Vectorized<float>, whose transcendentals are ~1-ulp routines
rather than correctly-rounded ones. codec_snake_bisect established that the SnakeBeta seam’s
entire residual divergence lives in exactly these two functions — every other operation in that
expression is a correctly-rounded f32 *, + or / with no freedom at all — so identifying
which vectorized routine the pinned oracle used is the whole remaining question there.
Variants§
ScalarLibm
Rust’s scalar f32::sin / f32::exp, i.e. the platform libm. The production reference.
AccelerateVForce
macOS Accelerate vForce (vvsinf / vvexpf), selected only by the parity harness.
On every other target this deliberately falls back to Self::ScalarLibm.
SleefU10
SLEEF’s 1-ulp Sleef_sinf_u10 / Sleef_expf_u10, ported to safe Rust in crate::sleef.
This is the routine an AArch64 Vectorized<float> actually dispatches to, so it is the
candidate the vForce probe was only ever standing in for — and unlike vForce it is portable
and could therefore be adopted into production if it measures exact.
Trait Implementations§
Source§impl Clone for F32Transcendental
impl Clone for F32Transcendental
Source§fn clone(&self) -> F32Transcendental
fn clone(&self) -> F32Transcendental
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more