Skip to main content

GpuRuntime

Struct GpuRuntime 

Source
pub struct GpuRuntime {
    pub device: GpuDeviceInfo,
    pub devices: Vec<GpuDeviceInfo>,
    pub policy: GpuDispatchPolicy,
    pub memory_budget_bytes: usize,
}

Fields§

§device: GpuDeviceInfo

Highest-scoring probed CUDA device. Existing dispatch code routes one-shot kernels through this device.

§devices: Vec<GpuDeviceInfo>

All usable CUDA devices discovered at probe time, ordered by score.

§policy: GpuDispatchPolicy§memory_budget_bytes: usize

Implementations§

Source§

impl GpuRuntime

Source

pub fn probe() -> Result<Option<Self>, GpuError>

Source

pub fn global() -> Option<&'static Self>

Source

pub fn is_available() -> bool

Source

pub fn global_or_fail(mode: GpuMode) -> Result<&'static Self, GpuError>

Fail-closed accessor for the process-wide runtime under a [GpuMode] contract (issue #1017).

  • [GpuMode::Required] — the device MUST be present: when the probe found no usable runtime this returns Err(GpuError::DriverLibraryUnavailable) carrying the recorded CPU reason, so the resident path surfaces a structured error instead of silently falling back to the CPU.
  • [GpuMode::Auto] / [GpuMode::Off] — preserve the existing probe-first behavior bit-for-bit: this is a thin wrapper over Self::global that maps the None case to the same typed error without ever forcing the runtime on or changing any numerics. Auto callers treat the Err exactly as they treated global().is_none() today (fall back to CPU); only the Required caller propagates it.

This does NOT alter global()/cuda_context_for/ensure_cuda_runtime_device; it only adds the residency gate on top of the working Auto path.

Source

pub fn policy(&self) -> &GpuDispatchPolicy

Source

pub fn selected_device(&self) -> &GpuDeviceInfo

Source§

impl GpuRuntime

Source

pub fn device_ordinals(&self) -> Vec<usize>

Ordinals of all usable devices, highest-score first.

self.devices is already score-sorted at probe time, so this simply projects out the ordinals. Empty only if the probe somehow produced no devices (the public probe() guarantees at least one on Ok(Some(_))).

Source

pub fn device_count(&self) -> usize

Number of usable devices in the pool.

Source

pub fn memory_budget_for(&self, ordinal: usize) -> usize

Per-device byte budget: free memory capped at half of total, matching the primary-device budget computed in device_runtime::probe. Falls back to the primary memory_budget_bytes when the ordinal is not in the pool so a caller that passes a stale ordinal still gets a usable (conservative) budget rather than zero.

Trait Implementations§

Source§

impl Clone for GpuRuntime

Source§

fn clone(&self) -> GpuRuntime

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 Debug for GpuRuntime

Source§

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

Formats the value using the given formatter. Read more

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> ByRef<T> for T

Source§

fn by_ref(&self) -> &T

Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> DistributionExt for T
where T: ?Sized,

Source§

fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> T
where Self: Distribution<T>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Imply<T> for U
where T: ?Sized, U: ?Sized,

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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 = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V