use super::types::*;
use crate::error::FFTResult;
use std::collections::HashMap;
#[derive(Debug)]
#[allow(dead_code)]
pub struct HardwareAdaptiveOptimizer {
pub hardware_capabilities: HardwareCapabilities,
pub(crate) optimization_profiles: HashMap<HardwareProfile, OptimizationProfile>,
pub(crate) active_profile: Option<HardwareProfile>,
}
#[derive(Debug, Clone)]
pub struct HardwareCapabilities {
pub cpu_info: CpuInfo,
pub gpu_info: Option<GpuInfo>,
pub memory_info: MemoryInfo,
pub simd_support: SimdSupport,
}
#[derive(Debug, Clone)]
pub struct CpuInfo {
pub core_count: usize,
pub cache_sizes: Vec<usize>,
pub frequency_mhz: u32,
pub architecture: String,
}
#[derive(Debug, Clone)]
pub struct GpuInfo {
pub memory_mb: usize,
pub compute_capability: String,
pub sm_count: usize,
pub memory_bandwidth: f64,
}
#[derive(Debug, Clone)]
pub struct MemoryInfo {
pub total_mb: usize,
pub available_mb: usize,
pub bandwidth_gbs: f64,
}
#[derive(Debug, Clone)]
pub struct OptimizationProfile {
pub preferred_algorithms: Vec<FftAlgorithmType>,
pub memory_strategy: MemoryAllocationStrategy,
pub parallelism_config: ParallelismConfig,
pub simd_config: SimdConfig,
}
impl HardwareAdaptiveOptimizer {
pub fn new() -> FFTResult<Self> {
Ok(Self {
hardware_capabilities: HardwareCapabilities::detect()?,
optimization_profiles: HashMap::new(),
active_profile: None,
})
}
}
impl HardwareCapabilities {
pub fn detect() -> FFTResult<Self> {
Ok(Self {
cpu_info: CpuInfo::detect()?,
gpu_info: GpuInfo::detect(),
memory_info: MemoryInfo::detect()?,
simd_support: SimdSupport::detect()?,
})
}
}
impl CpuInfo {
pub fn detect() -> FFTResult<Self> {
Ok(Self {
core_count: num_cpus::get(),
cache_sizes: vec![32768, 262144, 8388608], frequency_mhz: 2400, architecture: "x86_64".to_string(),
})
}
}
impl GpuInfo {
pub fn detect() -> Option<Self> {
None
}
}
impl MemoryInfo {
pub fn detect() -> FFTResult<Self> {
Ok(Self {
total_mb: 8192, available_mb: 4096, bandwidth_gbs: 25.6, })
}
}
impl SimdSupport {
pub fn detect() -> FFTResult<Self> {
Ok(SimdSupport::AVX2)
}
}