Skip to main content

SplitPlan

Struct SplitPlan 

Source
pub struct SplitPlan {
    pub lanes: usize,
    pub cpu_lanes: usize,
    pub gpu_lanes: usize,
    pub cpu_backend: ComputeBackend,
    pub co_execution: CoExecution,
}
Expand description

A resolved, deterministic plan for one batch.

Produced by SplitPlan::for_lanes. Holds no borrows and no lifetimes, per the workspace rules.

Fields§

§lanes: usize

Total lanes in the batch.

§cpu_lanes: usize

Lanes 0 .. cpu_lanes run on the CPU backend.

§gpu_lanes: usize

Lanes cpu_lanes .. lanes run on the GPU.

§cpu_backend: ComputeBackend

The CPU backend the plan will actually use, already resolved.

§co_execution: CoExecution

Precision policy for the CPU half.

Implementations§

Source§

impl SplitPlan

Source

pub fn for_lanes( lanes: usize, ratio: SplitRatio, co_execution: CoExecution, ) -> Self

Build the deterministic plan for lanes work items.

§Arguments
  • lanes — total independent work items, dimensionless.
  • ratio — how much to give the GPU; see SplitRatio.
  • co_execution — precision policy for the CPU half.
§Returns

A plan whose cpu_lanes + gpu_lanes == lanes exactly. When the GPU is unavailable — no gpu feature, Android, or no adapter — gpu_lanes is 0 and the whole batch is planned for the CPU; that is the graceful degradation contract, not an error.

§Determinism

A pure function of its arguments and the machine’s backend availability. It performs no timing, samples no load, and consults no random source, so two runs on one machine always plan identically.

Source

pub fn is_co_executing(&self) -> bool

Whether this plan actually uses both sides.

false for a CPU-only or GPU-only plan, which is the common case on hardware where one side dominates.

Source

pub fn precision_note(&self) -> &'static str

A one-line, caller-facing statement of the precision this plan will produce — the per-call form of the mixed-precision caveat #18 required be documented rather than discovered.

Intended to be logged or surfaced by anything recording a V&V run, so a result set carries the precision story with it.

Source

pub fn harmonise_cpu_half(&self, cpu_values: &mut [f64])

Apply the CoExecution policy to the CPU half of a completed result.

Call this on the CPU-computed lanes before splicing the two halves together. Under CoExecution::NativePrecision it is a no-op; under CoExecution::MatchGpuPrecision it rounds each value through f32.

Trait Implementations§

Source§

impl Clone for SplitPlan

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for SplitPlan

Source§

impl Debug for SplitPlan

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for SplitPlan

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for SplitPlan

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.