Skip to main content

ArchTarget

Enum ArchTarget 

Source
#[non_exhaustive]
pub enum ArchTarget { Gfx(GfxTarget), Sm(ComputeCapability), Xe(IntelArch), Apple(AppleFamily), }
Expand description

The architecture a prebuilt GPU artifact must target.

Each vendor names this differently but uses it the same way — to select a build the device can actually run — so one field carries whichever form applies. A GPU has at most one, which the type enforces.

use gpu_probe::{ArchTarget, GfxTarget};

let target = ArchTarget::Gfx(GfxTarget::new(10, 1, 3));
assert_eq!(target.to_string(), "gfx1013");
assert_eq!(target.gfx(), Some(GfxTarget::new(10, 1, 3)));
assert_eq!(target.sm(), None);

Deliberately not Ord: comparing an AMD target against an NVIDIA one has no meaning. Order within a vendor by matching out GfxTarget or ComputeCapability, both of which are ordered.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Gfx(GfxTarget)

AMD: the --offload-arch value a ROCm/HIP code object is built for.

§

Sm(ComputeCapability)

NVIDIA: the compute capability a CUDA artifact is built for.

§

Xe(IntelArch)

Intel: the GPU architecture family, from the PCI device id.

§

Apple(AppleFamily)

Apple: the Metal GPU family. A capability tier rather than a build target — see AppleFamily.

Implementations§

Source§

impl ArchTarget

Source

pub const fn gfx(self) -> Option<GfxTarget>

The AMD target, or None when this names another vendor’s.

Source

pub const fn sm(self) -> Option<ComputeCapability>

The NVIDIA compute capability, or None when this names another vendor’s.

Source

pub const fn xe(self) -> Option<IntelArch>

The Intel architecture family, or None when this names another vendor’s.

Source

pub const fn apple(self) -> Option<AppleFamily>

The Apple GPU family, or None when this names another vendor’s.

Trait Implementations§

Source§

impl Clone for ArchTarget

Source§

fn clone(&self) -> ArchTarget

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 ArchTarget

Source§

impl Debug for ArchTarget

Source§

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

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

impl Display for ArchTarget

Source§

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

Renders in the form each vendor’s toolchain expects: gfx1013 for --offload-arch, sm_89 for CUDA.

Source§

impl Eq for ArchTarget

Source§

impl Hash for ArchTarget

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for ArchTarget

Source§

fn eq(&self, other: &ArchTarget) -> 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 ArchTarget

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> 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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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.