use fuel_ir::probe::{BackendId, BackendProbe, DeviceDescriptor};
use fuel_ir::{DeviceLocation, error::Result};
pub struct CpuBackendProbe;
impl BackendProbe for CpuBackendProbe {
fn enumerate_devices() -> Result<Vec<DeviceDescriptor>> {
enumerate_devices()
}
}
pub fn enumerate_devices() -> Result<Vec<DeviceDescriptor>> {
let cores = std::thread::available_parallelism()
.map(|n| n.get())
.unwrap_or(1);
let sku = format!("{} ({} logical cores)", std::env::consts::ARCH, cores);
Ok(vec![DeviceDescriptor {
backend: BackendId::Cpu,
device_index: 0,
hardware_sku: sku,
vendor_id: 0,
device_id: 0,
compute_capability: None,
subgroup_width: None,
driver_version: env!("CARGO_PKG_VERSION").to_string(),
total_memory_bytes: 0,
location: DeviceLocation::Cpu,
}])
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn cpu_enumerates_exactly_one_device() {
let d = enumerate_devices().expect("cpu probe never fails");
assert_eq!(d.len(), 1);
assert_eq!(d[0].backend, BackendId::Cpu);
assert_eq!(d[0].device_index, 0);
assert_eq!(d[0].location, DeviceLocation::Cpu);
assert!(d[0].hardware_sku.contains(std::env::consts::ARCH));
}
}