use std::collections::HashMap;
use std::time::Duration;
#[derive(Debug, Clone)]
pub struct PerformanceOptimizationConfig {
pub memory_config: MemoryOptimizationConfig,
pub parallel_config: ParallelProcessingConfig,
pub algorithm_config: AlgorithmOptimizationConfig,
pub distributed_config: DistributedComputingConfig,
pub profiling_config: ProfilingConfig,
pub gpu_config: GPUAccelerationConfig,
}
impl Default for PerformanceOptimizationConfig {
fn default() -> Self {
Self {
memory_config: MemoryOptimizationConfig::default(),
parallel_config: ParallelProcessingConfig::default(),
algorithm_config: AlgorithmOptimizationConfig::default(),
distributed_config: DistributedComputingConfig::default(),
profiling_config: ProfilingConfig::default(),
gpu_config: GPUAccelerationConfig::default(),
}
}
}
#[derive(Debug, Clone)]
pub struct MemoryOptimizationConfig {
pub enable_hierarchical_memory: bool,
pub cache_size_limit: usize,
pub memory_pool_config: MemoryPoolConfig,
pub enable_memory_mapping: bool,
pub compression_config: CompressionConfig,
pub gc_strategy: GarbageCollectionStrategy,
}
impl Default for MemoryOptimizationConfig {
fn default() -> Self {
Self {
enable_hierarchical_memory: true,
cache_size_limit: 8192, memory_pool_config: MemoryPoolConfig::default(),
enable_memory_mapping: true,
compression_config: CompressionConfig::default(),
gc_strategy: GarbageCollectionStrategy::Adaptive,
}
}
}
#[derive(Debug, Clone)]
pub struct MemoryPoolConfig {
pub pool_size: usize,
pub block_sizes: Vec<usize>,
pub enable_preallocation: bool,
pub growth_strategy: PoolGrowthStrategy,
}
impl Default for MemoryPoolConfig {
fn default() -> Self {
Self {
pool_size: 4096, block_sizes: vec![64, 256, 1024, 4096, 16_384], enable_preallocation: true,
growth_strategy: PoolGrowthStrategy::Exponential,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum PoolGrowthStrategy {
Fixed,
Linear(usize),
Exponential,
Adaptive,
}
#[derive(Debug, Clone)]
pub struct CompressionConfig {
pub enable_compression: bool,
pub algorithm: CompressionAlgorithm,
pub compression_level: u8,
pub compression_threshold: usize,
}
impl Default for CompressionConfig {
fn default() -> Self {
Self {
enable_compression: true,
algorithm: CompressionAlgorithm::LZ4,
compression_level: 6,
compression_threshold: 1024, }
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CompressionAlgorithm {
LZ4,
ZSTD,
GZIP,
Snappy,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum GarbageCollectionStrategy {
Manual,
Automatic,
Adaptive,
Generational,
}
#[derive(Debug, Clone)]
pub struct ParallelProcessingConfig {
pub num_threads: usize,
pub thread_pool_config: ThreadPoolConfig,
pub numa_config: NUMAConfig,
pub scheduling_strategy: TaskSchedulingStrategy,
pub load_balancing: LoadBalancingConfig,
}
impl Default for ParallelProcessingConfig {
fn default() -> Self {
Self {
num_threads: num_cpus::get(),
thread_pool_config: ThreadPoolConfig::default(),
numa_config: NUMAConfig::default(),
scheduling_strategy: TaskSchedulingStrategy::WorkStealing,
load_balancing: LoadBalancingConfig::default(),
}
}
}
#[derive(Debug, Clone)]
pub struct ThreadPoolConfig {
pub core_pool_size: usize,
pub max_pool_size: usize,
pub keep_alive_time: Duration,
pub queue_size: usize,
pub thread_priority: ThreadPriority,
}
impl Default for ThreadPoolConfig {
fn default() -> Self {
Self {
core_pool_size: num_cpus::get(),
max_pool_size: num_cpus::get() * 2,
keep_alive_time: Duration::from_secs(60),
queue_size: 10_000,
thread_priority: ThreadPriority::Normal,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ThreadPriority {
Low,
Normal,
High,
RealTime,
}
#[derive(Debug, Clone)]
pub struct NUMAConfig {
pub enable_numa_awareness: bool,
pub memory_binding: NUMAMemoryBinding,
pub thread_affinity: NUMAThreadAffinity,
}
impl Default for NUMAConfig {
fn default() -> Self {
Self {
enable_numa_awareness: true,
memory_binding: NUMAMemoryBinding::LocalPreferred,
thread_affinity: NUMAThreadAffinity::Soft,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum NUMAMemoryBinding {
None,
LocalPreferred,
LocalStrict,
Interleaved,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum NUMAThreadAffinity {
None,
Soft,
Hard,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum TaskSchedulingStrategy {
FIFO,
Priority,
WorkStealing,
Adaptive,
}
#[derive(Debug, Clone)]
pub struct LoadBalancingConfig {
pub enable_dynamic_balancing: bool,
pub measurement_interval: Duration,
pub rebalancing_threshold: f64,
pub balancing_strategy: LoadBalancingStrategy,
}
impl Default for LoadBalancingConfig {
fn default() -> Self {
Self {
enable_dynamic_balancing: true,
measurement_interval: Duration::from_secs(5),
rebalancing_threshold: 0.2, balancing_strategy: LoadBalancingStrategy::RoundRobin,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum LoadBalancingStrategy {
RoundRobin,
LeastLoaded,
Weighted,
Adaptive,
}
#[derive(Debug, Clone)]
pub struct AlgorithmOptimizationConfig {
pub enable_algorithmic_improvements: bool,
pub decomposition_config: DecompositionConfig,
pub caching_config: CachingConfig,
pub approximation_config: ApproximationConfig,
pub streaming_config: StreamingConfig,
}
impl Default for AlgorithmOptimizationConfig {
fn default() -> Self {
Self {
enable_algorithmic_improvements: true,
decomposition_config: DecompositionConfig::default(),
caching_config: CachingConfig::default(),
approximation_config: ApproximationConfig::default(),
streaming_config: StreamingConfig::default(),
}
}
}
#[derive(Debug, Clone)]
pub struct DecompositionConfig {
pub enable_hierarchical_decomposition: bool,
pub max_subproblem_size: usize,
pub decomposition_strategy: DecompositionStrategy,
pub overlap_strategy: OverlapStrategy,
}
impl Default for DecompositionConfig {
fn default() -> Self {
Self {
enable_hierarchical_decomposition: true,
max_subproblem_size: 10_000,
decomposition_strategy: DecompositionStrategy::Adaptive,
overlap_strategy: OverlapStrategy::MinimalOverlap,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DecompositionStrategy {
Uniform,
Adaptive,
GraphBased,
Hierarchical,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum OverlapStrategy {
NoOverlap,
MinimalOverlap,
SubstantialOverlap,
AdaptiveOverlap,
}
#[derive(Debug, Clone)]
pub struct CachingConfig {
pub enable_result_caching: bool,
pub cache_size_limit: usize,
pub eviction_policy: CacheEvictionPolicy,
pub enable_cache_compression: bool,
pub enable_cache_persistence: bool,
}
impl Default for CachingConfig {
fn default() -> Self {
Self {
enable_result_caching: true,
cache_size_limit: 2048, eviction_policy: CacheEvictionPolicy::LRU,
enable_cache_compression: true,
enable_cache_persistence: false,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CacheEvictionPolicy {
LRU,
LFU,
FIFO,
ARC,
}
#[derive(Debug, Clone)]
pub struct ApproximationConfig {
pub enable_approximations: bool,
pub quality_threshold: f64,
pub max_approximation_error: f64,
pub approximation_strategies: Vec<ApproximationStrategy>,
}
impl Default for ApproximationConfig {
fn default() -> Self {
Self {
enable_approximations: true,
quality_threshold: 0.95,
max_approximation_error: 0.05,
approximation_strategies: vec![
ApproximationStrategy::Sampling,
ApproximationStrategy::Clustering,
ApproximationStrategy::DimensionalityReduction,
],
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum ApproximationStrategy {
Sampling,
Clustering,
DimensionalityReduction,
Hierarchical,
MachineLearning,
}
#[derive(Debug, Clone)]
pub struct StreamingConfig {
pub enable_streaming: bool,
pub buffer_size: usize,
pub window_size: usize,
pub sliding_strategy: SlidingWindowStrategy,
}
impl Default for StreamingConfig {
fn default() -> Self {
Self {
enable_streaming: true,
buffer_size: 10_000,
window_size: 1000,
sliding_strategy: SlidingWindowStrategy::Tumbling,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SlidingWindowStrategy {
Tumbling,
Sliding,
Session,
Custom,
}
#[derive(Debug, Clone)]
pub struct DistributedComputingConfig {
pub enable_distributed: bool,
pub cluster_config: ClusterConfig,
pub communication_protocol: CommunicationProtocol,
pub fault_tolerance: DistributedFaultTolerance,
}
impl Default for DistributedComputingConfig {
fn default() -> Self {
Self {
enable_distributed: false,
cluster_config: ClusterConfig::default(),
communication_protocol: CommunicationProtocol::TCP,
fault_tolerance: DistributedFaultTolerance::default(),
}
}
}
#[derive(Debug, Clone)]
pub struct ClusterConfig {
pub master_address: String,
pub worker_addresses: Vec<String>,
pub node_resources: HashMap<String, NodeResources>,
pub network_topology: NetworkTopology,
}
impl Default for ClusterConfig {
fn default() -> Self {
Self {
master_address: "localhost:8000".to_string(),
worker_addresses: vec![],
node_resources: HashMap::new(),
network_topology: NetworkTopology::StarTopology,
}
}
}
#[derive(Debug, Clone)]
pub struct NodeResources {
pub cpu_cores: usize,
pub memory_mb: usize,
pub gpu_count: usize,
pub network_bandwidth: f64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum NetworkTopology {
StarTopology,
RingTopology,
MeshTopology,
TreeTopology,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CommunicationProtocol {
TCP,
UDP,
MPI,
GRPC,
Custom(String),
}
#[derive(Debug, Clone)]
pub struct DistributedFaultTolerance {
pub enable_failover: bool,
pub replication_factor: usize,
pub heartbeat_interval: Duration,
pub recovery_strategy: RecoveryStrategy,
}
impl Default for DistributedFaultTolerance {
fn default() -> Self {
Self {
enable_failover: true,
replication_factor: 2,
heartbeat_interval: Duration::from_secs(5),
recovery_strategy: RecoveryStrategy::Restart,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum RecoveryStrategy {
Restart,
Migrate,
CheckpointRestore,
Adaptive,
}
#[derive(Debug, Clone)]
pub struct ProfilingConfig {
pub enable_profiling: bool,
pub profiling_granularity: ProfilingGranularity,
pub collection_interval: Duration,
pub enable_memory_profiling: bool,
pub enable_cpu_profiling: bool,
pub enable_io_profiling: bool,
}
impl Default for ProfilingConfig {
fn default() -> Self {
Self {
enable_profiling: true,
profiling_granularity: ProfilingGranularity::Function,
collection_interval: Duration::from_millis(100),
enable_memory_profiling: true,
enable_cpu_profiling: true,
enable_io_profiling: true,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ProfilingGranularity {
Line,
Function,
Module,
Application,
}
#[derive(Debug, Clone)]
pub struct GPUAccelerationConfig {
pub enable_gpu: bool,
pub device_selection: GPUDeviceSelection,
pub memory_strategy: GPUMemoryStrategy,
pub kernel_config: GPUKernelConfig,
}
impl Default for GPUAccelerationConfig {
fn default() -> Self {
Self {
enable_gpu: false, device_selection: GPUDeviceSelection::Automatic,
memory_strategy: GPUMemoryStrategy::Unified,
kernel_config: GPUKernelConfig::default(),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum GPUDeviceSelection {
Automatic,
Specific(usize),
Multiple(Vec<usize>),
All,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum GPUMemoryStrategy {
Unified,
Explicit,
Streaming,
Pooled,
}
#[derive(Debug, Clone)]
pub struct GPUKernelConfig {
pub block_size: usize,
pub grid_size: usize,
pub enable_kernel_fusion: bool,
pub optimization_level: GPUOptimizationLevel,
}
impl Default for GPUKernelConfig {
fn default() -> Self {
Self {
block_size: 256,
grid_size: 1024,
enable_kernel_fusion: true,
optimization_level: GPUOptimizationLevel::Aggressive,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum GPUOptimizationLevel {
None,
Basic,
Aggressive,
Maximum,
}