pub struct DeviceEncodeThroughput {
pub n_rows: usize,
pub encode_secs: f64,
pub rows_per_sec: f64,
pub path: EncodePath,
pub decision: EncodeDeploymentDecision,
}Expand description
Measured throughput of the device-resident exact per-row certified encode
(sae_certified_encode_batch) — the literal “batched exact per-row GPU
encode” of #988, timed end to end (routing + amortized warm start + basin
Newton + Kantorovich certificate + lowest-error assignment/fallback), NOT a
component solve like gam_gpu::encode_throughput::measure_resident_solve_throughput
(which times only the resident normal-equations inner cell).
The point of this struct is Self::decision: the #988 surrogate question
(“is the exact encode fast enough at 10⁹ rows, or must we distill a certified
amortized surrogate?”) is answered by this measurement and only this one.
The decision is keyed on EncodeDeploymentDecision::from_device_measurement
with engaged = (path == EncodePath::Device), so it inherits that type’s
anti-green-wash contract: a CPU-emulator run (path == Cpu) can NEVER declare
the surrogate unneeded — it is honestly EncodeDeploymentDecision::Undetermined
(blocked on hardware), no matter how fast the CPU rate is. Only a real device
launch of the exact-encode kernel can move the decision to Met/Unmet.
Fields§
§n_rows: usizeRows encoded in the timed batch.
encode_secs: f64Wall-clock seconds for the full exact encode of the batch.
rows_per_sec: f64n_rows / encode_secs (0.0 for a degenerate / non-positive time).
path: EncodePathWhich path actually ran the encode — the #1026/#1551 honesty flag.
decision: EncodeDeploymentDecisionThe #988 surrogate decision keyed on THIS exact-encode measurement.
Met/Unmet only when path == EncodePath::Device; a CPU-emulator run
is Undetermined { NoDeviceEncodeKernel-adjacent } — a fast CPU number is
never a device pass.
Implementations§
Source§impl DeviceEncodeThroughput
impl DeviceEncodeThroughput
Sourcepub fn device_engaged(&self) -> bool
pub fn device_engaged(&self) -> bool
true iff the exact-encode kernel actually ran on a CUDA device — the
only state in which Self::decision is a real Met/Unmet.
Trait Implementations§
Source§impl Clone for DeviceEncodeThroughput
impl Clone for DeviceEncodeThroughput
Source§fn clone(&self) -> DeviceEncodeThroughput
fn clone(&self) -> DeviceEncodeThroughput
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for DeviceEncodeThroughput
Auto Trait Implementations§
impl Freeze for DeviceEncodeThroughput
impl RefUnwindSafe for DeviceEncodeThroughput
impl Send for DeviceEncodeThroughput
impl Sync for DeviceEncodeThroughput
impl Unpin for DeviceEncodeThroughput
impl UnsafeUnpin for DeviceEncodeThroughput
impl UnwindSafe for DeviceEncodeThroughput
Blanket Implementations§
impl<T> Allocation for T
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T, U> Imply<T> for U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.