use crate::gpu::GpuBackend;
#[derive(Debug, Clone)]
pub struct GpuDeviceInfo {
pub device_name: String,
pub device_type: String,
pub backend: GpuBackend,
pub compute_capability: String,
pub total_memory: u64,
pub available_memory: u64,
pub max_work_group_size: u32,
pub supports_fp64: bool,
pub supports_fp16: bool,
}
impl GpuDeviceInfo {
#[must_use]
pub fn for_backend(backend: GpuBackend) -> Self {
match backend {
GpuBackend::Cpu => Self {
device_name: "CPU".to_string(),
device_type: "CPU".to_string(),
backend,
compute_capability: "host".to_string(),
total_memory: 0,
available_memory: 0,
max_work_group_size: 1,
supports_fp64: true,
supports_fp16: true,
},
GpuBackend::Cuda => Self {
device_name: "CUDA Device".to_string(),
device_type: "Discrete GPU".to_string(),
backend,
compute_capability: "unknown".to_string(),
total_memory: 0,
available_memory: 0,
max_work_group_size: 1024,
supports_fp64: true,
supports_fp16: true,
},
GpuBackend::Rocm => Self {
device_name: "ROCm Device".to_string(),
device_type: "Discrete GPU".to_string(),
backend,
compute_capability: "unknown".to_string(),
total_memory: 0,
available_memory: 0,
max_work_group_size: 1024,
supports_fp64: true,
supports_fp16: true,
},
GpuBackend::Wgpu => Self {
device_name: "WebGPU Device".to_string(),
device_type: "GPU".to_string(),
backend,
compute_capability: "wgsl".to_string(),
total_memory: 0,
available_memory: 0,
max_work_group_size: 256,
supports_fp64: false,
supports_fp16: false,
},
GpuBackend::Metal => Self {
device_name: "Metal Device".to_string(),
device_type: "Integrated GPU".to_string(),
backend,
compute_capability: "msl".to_string(),
total_memory: 0,
available_memory: 0,
max_work_group_size: 1024,
supports_fp64: false,
supports_fp16: true,
},
GpuBackend::OpenCL => Self {
device_name: "OpenCL Device".to_string(),
device_type: "GPU".to_string(),
backend,
compute_capability: "unknown".to_string(),
total_memory: 0,
available_memory: 0,
max_work_group_size: 256,
supports_fp64: false,
supports_fp16: false,
},
}
}
}