use std::sync::OnceLock;
use candle_core::Device;
static DEVICE: OnceLock<Device> = OnceLock::new();
pub fn default_device() -> &'static Device {
DEVICE.get_or_init(select_device)
}
fn select_device() -> Device {
#[cfg(feature = "cuda")]
{
if let Ok(dev) = Device::new_cuda(0) {
return dev;
}
}
Device::Cpu
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_device_is_stable_across_calls() {
let a = default_device();
let b = default_device();
assert!(std::ptr::eq(a, b));
}
#[test]
fn default_device_is_cpu_without_cuda_feature() {
#[cfg(not(feature = "cuda"))]
{
assert!(matches!(default_device(), Device::Cpu));
}
}
}