use super::{
detection::{detect_arm_microarchitecture, detect_x86_microarchitecture},
features::{detect_cpu_features, CpuFeatures},
microarchitecture::{ArmMicroarchitecture, X86Microarchitecture},
operations::PlatformOptimizedOps,
};
use crate::error::BackendResult;
#[derive(Debug)]
pub struct PlatformOptimizer {
pub features: CpuFeatures,
pub x86_arch: Option<X86Microarchitecture>,
pub arm_arch: Option<ArmMicroarchitecture>,
pub optimized_ops: PlatformOptimizedOps,
}
pub struct CpuOptimizer;
pub struct OptimizedOperations;
pub struct OptimizationCache;
impl PlatformOptimizer {
pub fn new() -> BackendResult<Self> {
let features = detect_cpu_features()?;
let x86_arch = detect_x86_microarchitecture();
let arm_arch = detect_arm_microarchitecture();
let optimized_ops = PlatformOptimizedOps::new();
Ok(Self {
features,
x86_arch,
arm_arch,
optimized_ops,
})
}
pub fn get_cpu_info(&self) -> String {
format!(
"CPU Features: AVX={}, AVX2={}, AVX512F={}, NEON={}, x86_arch={:?}, arm_arch={:?}",
self.features.avx,
self.features.avx2,
self.features.avx512f,
self.features.neon,
self.x86_arch,
self.arm_arch
)
}
}
impl Default for PlatformOptimizer {
fn default() -> Self {
Self::new().unwrap_or_else(|_| Self {
features: CpuFeatures::default(),
x86_arch: None,
arm_arch: None,
optimized_ops: PlatformOptimizedOps::new(),
})
}
}
impl CpuOptimizer {
pub fn new() -> Self {
Self
}
}
impl Default for CpuOptimizer {
fn default() -> Self {
Self::new()
}
}
impl OptimizedOperations {
pub fn new() -> Self {
Self
}
}
impl Default for OptimizedOperations {
fn default() -> Self {
Self::new()
}
}
impl OptimizationCache {
pub fn new() -> Self {
Self
}
}
impl Default for OptimizationCache {
fn default() -> Self {
Self::new()
}
}