singe-cuda 0.1.0-alpha.6

Safe Rust wrappers for CUDA driver, runtime, NVRTC, NVVM, NVTX, memory, streams, modules, and graphs.
Documentation
use std::fmt::{self, Display, Formatter};

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum GpuArchitecture {
    Compute75,
    Compute80,
    Compute86,
    Compute87,
    Compute89,
    Compute90,
    Compute90a,
    Compute100,
    Compute100f,
    Compute100a,
    Compute101,
    Compute101f,
    Compute101a,
    Compute103,
    Compute103f,
    Compute103a,
    Compute110,
    Compute110f,
    Compute110a,
    Compute120,
    Compute120f,
    Compute120a,
    Compute121,
    Compute121f,
    Compute121a,
    Sm75,
    Sm80,
    Sm86,
    Sm87,
    Sm89,
    Sm90,
    Sm90a,
    Sm100,
    Sm100f,
    Sm100a,
    Sm101,
    Sm101f,
    Sm101a,
    Sm103,
    Sm103f,
    Sm103a,
    Sm110,
    Sm110f,
    Sm110a,
    Sm120,
    Sm120f,
    Sm120a,
    Sm121,
    Sm121f,
    Sm121a,
}

impl GpuArchitecture {
    pub const fn is_virtual(self) -> bool {
        matches!(
            self,
            Self::Compute75
                | Self::Compute80
                | Self::Compute86
                | Self::Compute87
                | Self::Compute89
                | Self::Compute90
                | Self::Compute90a
                | Self::Compute100
                | Self::Compute100f
                | Self::Compute100a
                | Self::Compute101
                | Self::Compute101f
                | Self::Compute101a
                | Self::Compute103
                | Self::Compute103f
                | Self::Compute103a
                | Self::Compute110
                | Self::Compute110f
                | Self::Compute110a
                | Self::Compute120
                | Self::Compute120f
                | Self::Compute120a
                | Self::Compute121
                | Self::Compute121f
                | Self::Compute121a
        )
    }
}

impl Display for GpuArchitecture {
    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
        let value = match self {
            Self::Compute75 => "compute_75",
            Self::Compute80 => "compute_80",
            Self::Compute86 => "compute_86",
            Self::Compute87 => "compute_87",
            Self::Compute89 => "compute_89",
            Self::Compute90 => "compute_90",
            Self::Compute90a => "compute_90a",
            Self::Compute100 => "compute_100",
            Self::Compute100f => "compute_100f",
            Self::Compute100a => "compute_100a",
            Self::Compute101 => "compute_101",
            Self::Compute101f => "compute_101f",
            Self::Compute101a => "compute_101a",
            Self::Compute103 => "compute_103",
            Self::Compute103f => "compute_103f",
            Self::Compute103a => "compute_103a",
            Self::Compute110 => "compute_110",
            Self::Compute110f => "compute_110f",
            Self::Compute110a => "compute_110a",
            Self::Compute120 => "compute_120",
            Self::Compute120f => "compute_120f",
            Self::Compute120a => "compute_120a",
            Self::Compute121 => "compute_121",
            Self::Compute121f => "compute_121f",
            Self::Compute121a => "compute_121a",
            Self::Sm75 => "sm_75",
            Self::Sm80 => "sm_80",
            Self::Sm86 => "sm_86",
            Self::Sm87 => "sm_87",
            Self::Sm89 => "sm_89",
            Self::Sm90 => "sm_90",
            Self::Sm90a => "sm_90a",
            Self::Sm100 => "sm_100",
            Self::Sm100f => "sm_100f",
            Self::Sm100a => "sm_100a",
            Self::Sm101 => "sm_101",
            Self::Sm101f => "sm_101f",
            Self::Sm101a => "sm_101a",
            Self::Sm103 => "sm_103",
            Self::Sm103f => "sm_103f",
            Self::Sm103a => "sm_103a",
            Self::Sm110 => "sm_110",
            Self::Sm110f => "sm_110f",
            Self::Sm110a => "sm_110a",
            Self::Sm120 => "sm_120",
            Self::Sm120f => "sm_120f",
            Self::Sm120a => "sm_120a",
            Self::Sm121 => "sm_121",
            Self::Sm121f => "sm_121f",
            Self::Sm121a => "sm_121a",
        };
        write!(f, "{value}")
    }
}