Skip to main content

Gpu

Struct Gpu 

Source
pub struct Gpu { /* private fields */ }
Expand description

A GPU that can run the sweep.

Holds a device and queue. Creating one enumerates adapters, which is slow enough that it should happen once per process rather than once per sweep.

Implementations§

Source§

impl Gpu

Source

pub fn new() -> Option<Gpu>

Open the default adapter, or None if this machine exposes none.

None means not found on this machine, never “impossible”. A headless CI runner with no driver is the common case, which is why every test here skips rather than fails on it.

Source

pub fn adapter(&self) -> &AdapterInfo

What the driver says this is.

Read it before quoting a speedup. DeviceType::Cpu is a software rasteriser — lavapipe, SwiftShader, WARP — which runs the shader correctly and tells you nothing about a GPU, and a benchmark that does not check this reports the wrong machine with full confidence.

Source

pub fn is_hardware(&self) -> bool

True when the adapter is real silicon rather than a software rasteriser.

Source

pub fn sweep( &self, m: &GpuModel, spins: &mut [i8], beta: f64, sweeps: u32, ) -> Result<(), String>

Run sweeps chromatic sweeps over spins, in place.

One dispatch per colour class per sweep, which is what makes the update correct: nodes in a class share no edge, so they can be resampled simultaneously without any of them reading a neighbour another lane is writing. Dispatching all nodes at once would be faster and wrong.

Auto Trait Implementations§

§

impl !RefUnwindSafe for Gpu

§

impl !UnwindSafe for Gpu

§

impl Freeze for Gpu

§

impl Send for Gpu

§

impl Sync for Gpu

§

impl Unpin for Gpu

§

impl UnsafeUnpin for Gpu

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

Source§

fn downcast(&self) -> &T

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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,