use std::collections::{BTreeMap, HashMap};
#[derive(Debug, Clone)]
pub struct MemoryInfo {
pub total_memory: usize,
pub available_memory: usize,
pub used_memory: usize,
}
pub struct HardwareBackend {
backend_type: BackendType,
}
#[derive(Debug, Clone, Copy)]
enum BackendType {
CPU,
#[allow(dead_code)]
GPU,
}
impl HardwareBackend {
pub fn cpu() -> Self {
Self {
backend_type: BackendType::CPU,
}
}
pub fn is_available(&self) -> bool {
match self.backend_type {
BackendType::CPU => true,
BackendType::GPU => false, }
}
pub fn name(&self) -> &str {
match self.backend_type {
BackendType::CPU => "CPU Backend",
BackendType::GPU => "GPU Backend",
}
}
pub fn memory_info(&self) -> MemoryInfo {
MemoryInfo {
total_memory: 16 * 1024 * 1024 * 1024, available_memory: 8 * 1024 * 1024 * 1024, used_memory: 8 * 1024 * 1024 * 1024,
}
}
pub fn optimal_batch_size(&self, model_size: usize) -> usize {
let available: _ = self.memory_info().available_memory;
let usable: _ = available / 2;
let per_sample: _ = model_size * 4; let batch_size: _ = usable / per_sample;
batch_size.max(1).min(1024)
}
}