1use std::collections::HashMap;
8use std::time::Duration;
9
10#[derive(Debug, Clone)]
12pub struct PerformanceOptimizationConfig {
13 pub memory_config: MemoryOptimizationConfig,
15 pub parallel_config: ParallelProcessingConfig,
17 pub algorithm_config: AlgorithmOptimizationConfig,
19 pub distributed_config: DistributedComputingConfig,
21 pub profiling_config: ProfilingConfig,
23 pub gpu_config: GPUAccelerationConfig,
25}
26
27impl Default for PerformanceOptimizationConfig {
28 fn default() -> Self {
29 Self {
30 memory_config: MemoryOptimizationConfig::default(),
31 parallel_config: ParallelProcessingConfig::default(),
32 algorithm_config: AlgorithmOptimizationConfig::default(),
33 distributed_config: DistributedComputingConfig::default(),
34 profiling_config: ProfilingConfig::default(),
35 gpu_config: GPUAccelerationConfig::default(),
36 }
37 }
38}
39
40#[derive(Debug, Clone)]
42pub struct MemoryOptimizationConfig {
43 pub enable_hierarchical_memory: bool,
45 pub cache_size_limit: usize,
47 pub memory_pool_config: MemoryPoolConfig,
49 pub enable_memory_mapping: bool,
51 pub compression_config: CompressionConfig,
53 pub gc_strategy: GarbageCollectionStrategy,
55}
56
57impl Default for MemoryOptimizationConfig {
58 fn default() -> Self {
59 Self {
60 enable_hierarchical_memory: true,
61 cache_size_limit: 8192, memory_pool_config: MemoryPoolConfig::default(),
63 enable_memory_mapping: true,
64 compression_config: CompressionConfig::default(),
65 gc_strategy: GarbageCollectionStrategy::Adaptive,
66 }
67 }
68}
69
70#[derive(Debug, Clone)]
72pub struct MemoryPoolConfig {
73 pub pool_size: usize,
75 pub block_sizes: Vec<usize>,
77 pub enable_preallocation: bool,
79 pub growth_strategy: PoolGrowthStrategy,
81}
82
83impl Default for MemoryPoolConfig {
84 fn default() -> Self {
85 Self {
86 pool_size: 4096, block_sizes: vec![64, 256, 1024, 4096, 16_384], enable_preallocation: true,
89 growth_strategy: PoolGrowthStrategy::Exponential,
90 }
91 }
92}
93
94#[derive(Debug, Clone, PartialEq, Eq)]
96pub enum PoolGrowthStrategy {
97 Fixed,
99 Linear(usize),
101 Exponential,
103 Adaptive,
105}
106
107#[derive(Debug, Clone)]
109pub struct CompressionConfig {
110 pub enable_compression: bool,
112 pub algorithm: CompressionAlgorithm,
114 pub compression_level: u8,
116 pub compression_threshold: usize,
118}
119
120impl Default for CompressionConfig {
121 fn default() -> Self {
122 Self {
123 enable_compression: true,
124 algorithm: CompressionAlgorithm::LZ4,
125 compression_level: 6,
126 compression_threshold: 1024, }
128 }
129}
130
131#[derive(Debug, Clone, PartialEq, Eq)]
133pub enum CompressionAlgorithm {
134 LZ4,
136 ZSTD,
138 GZIP,
140 Snappy,
142}
143
144#[derive(Debug, Clone, PartialEq, Eq)]
146pub enum GarbageCollectionStrategy {
147 Manual,
149 Automatic,
151 Adaptive,
153 Generational,
155}
156
157#[derive(Debug, Clone)]
159pub struct ParallelProcessingConfig {
160 pub num_threads: usize,
162 pub thread_pool_config: ThreadPoolConfig,
164 pub numa_config: NUMAConfig,
166 pub scheduling_strategy: TaskSchedulingStrategy,
168 pub load_balancing: LoadBalancingConfig,
170}
171
172impl Default for ParallelProcessingConfig {
173 fn default() -> Self {
174 Self {
175 num_threads: num_cpus::get(),
176 thread_pool_config: ThreadPoolConfig::default(),
177 numa_config: NUMAConfig::default(),
178 scheduling_strategy: TaskSchedulingStrategy::WorkStealing,
179 load_balancing: LoadBalancingConfig::default(),
180 }
181 }
182}
183
184#[derive(Debug, Clone)]
186pub struct ThreadPoolConfig {
187 pub core_pool_size: usize,
189 pub max_pool_size: usize,
191 pub keep_alive_time: Duration,
193 pub queue_size: usize,
195 pub thread_priority: ThreadPriority,
197}
198
199impl Default for ThreadPoolConfig {
200 fn default() -> Self {
201 Self {
202 core_pool_size: num_cpus::get(),
203 max_pool_size: num_cpus::get() * 2,
204 keep_alive_time: Duration::from_secs(60),
205 queue_size: 10_000,
206 thread_priority: ThreadPriority::Normal,
207 }
208 }
209}
210
211#[derive(Debug, Clone, PartialEq, Eq)]
213pub enum ThreadPriority {
214 Low,
215 Normal,
216 High,
217 RealTime,
218}
219
220#[derive(Debug, Clone)]
222pub struct NUMAConfig {
223 pub enable_numa_awareness: bool,
225 pub memory_binding: NUMAMemoryBinding,
227 pub thread_affinity: NUMAThreadAffinity,
229}
230
231impl Default for NUMAConfig {
232 fn default() -> Self {
233 Self {
234 enable_numa_awareness: true,
235 memory_binding: NUMAMemoryBinding::LocalPreferred,
236 thread_affinity: NUMAThreadAffinity::Soft,
237 }
238 }
239}
240
241#[derive(Debug, Clone, PartialEq, Eq)]
243pub enum NUMAMemoryBinding {
244 None,
246 LocalPreferred,
248 LocalStrict,
250 Interleaved,
252}
253
254#[derive(Debug, Clone, PartialEq, Eq)]
256pub enum NUMAThreadAffinity {
257 None,
259 Soft,
261 Hard,
263}
264
265#[derive(Debug, Clone, PartialEq, Eq)]
267pub enum TaskSchedulingStrategy {
268 FIFO,
270 Priority,
272 WorkStealing,
274 Adaptive,
276}
277
278#[derive(Debug, Clone)]
280pub struct LoadBalancingConfig {
281 pub enable_dynamic_balancing: bool,
283 pub measurement_interval: Duration,
285 pub rebalancing_threshold: f64,
287 pub balancing_strategy: LoadBalancingStrategy,
289}
290
291impl Default for LoadBalancingConfig {
292 fn default() -> Self {
293 Self {
294 enable_dynamic_balancing: true,
295 measurement_interval: Duration::from_secs(5),
296 rebalancing_threshold: 0.2, balancing_strategy: LoadBalancingStrategy::RoundRobin,
298 }
299 }
300}
301
302#[derive(Debug, Clone, PartialEq, Eq)]
304pub enum LoadBalancingStrategy {
305 RoundRobin,
307 LeastLoaded,
309 Weighted,
311 Adaptive,
313}
314
315#[derive(Debug, Clone)]
317pub struct AlgorithmOptimizationConfig {
318 pub enable_algorithmic_improvements: bool,
320 pub decomposition_config: DecompositionConfig,
322 pub caching_config: CachingConfig,
324 pub approximation_config: ApproximationConfig,
326 pub streaming_config: StreamingConfig,
328}
329
330impl Default for AlgorithmOptimizationConfig {
331 fn default() -> Self {
332 Self {
333 enable_algorithmic_improvements: true,
334 decomposition_config: DecompositionConfig::default(),
335 caching_config: CachingConfig::default(),
336 approximation_config: ApproximationConfig::default(),
337 streaming_config: StreamingConfig::default(),
338 }
339 }
340}
341
342#[derive(Debug, Clone)]
344pub struct DecompositionConfig {
345 pub enable_hierarchical_decomposition: bool,
347 pub max_subproblem_size: usize,
349 pub decomposition_strategy: DecompositionStrategy,
351 pub overlap_strategy: OverlapStrategy,
353}
354
355impl Default for DecompositionConfig {
356 fn default() -> Self {
357 Self {
358 enable_hierarchical_decomposition: true,
359 max_subproblem_size: 10_000,
360 decomposition_strategy: DecompositionStrategy::Adaptive,
361 overlap_strategy: OverlapStrategy::MinimalOverlap,
362 }
363 }
364}
365
366#[derive(Debug, Clone, PartialEq, Eq)]
368pub enum DecompositionStrategy {
369 Uniform,
371 Adaptive,
373 GraphBased,
375 Hierarchical,
377}
378
379#[derive(Debug, Clone, PartialEq, Eq)]
381pub enum OverlapStrategy {
382 NoOverlap,
384 MinimalOverlap,
386 SubstantialOverlap,
388 AdaptiveOverlap,
390}
391
392#[derive(Debug, Clone)]
394pub struct CachingConfig {
395 pub enable_result_caching: bool,
397 pub cache_size_limit: usize,
399 pub eviction_policy: CacheEvictionPolicy,
401 pub enable_cache_compression: bool,
403 pub enable_cache_persistence: bool,
405}
406
407impl Default for CachingConfig {
408 fn default() -> Self {
409 Self {
410 enable_result_caching: true,
411 cache_size_limit: 2048, eviction_policy: CacheEvictionPolicy::LRU,
413 enable_cache_compression: true,
414 enable_cache_persistence: false,
415 }
416 }
417}
418
419#[derive(Debug, Clone, PartialEq, Eq)]
421pub enum CacheEvictionPolicy {
422 LRU,
424 LFU,
426 FIFO,
428 ARC,
430}
431
432#[derive(Debug, Clone)]
434pub struct ApproximationConfig {
435 pub enable_approximations: bool,
437 pub quality_threshold: f64,
439 pub max_approximation_error: f64,
441 pub approximation_strategies: Vec<ApproximationStrategy>,
443}
444
445impl Default for ApproximationConfig {
446 fn default() -> Self {
447 Self {
448 enable_approximations: true,
449 quality_threshold: 0.95,
450 max_approximation_error: 0.05,
451 approximation_strategies: vec![
452 ApproximationStrategy::Sampling,
453 ApproximationStrategy::Clustering,
454 ApproximationStrategy::DimensionalityReduction,
455 ],
456 }
457 }
458}
459
460#[derive(Debug, Clone, PartialEq, Eq, Hash)]
462pub enum ApproximationStrategy {
463 Sampling,
465 Clustering,
467 DimensionalityReduction,
469 Hierarchical,
471 MachineLearning,
473}
474
475#[derive(Debug, Clone)]
477pub struct StreamingConfig {
478 pub enable_streaming: bool,
480 pub buffer_size: usize,
482 pub window_size: usize,
484 pub sliding_strategy: SlidingWindowStrategy,
486}
487
488impl Default for StreamingConfig {
489 fn default() -> Self {
490 Self {
491 enable_streaming: true,
492 buffer_size: 10_000,
493 window_size: 1000,
494 sliding_strategy: SlidingWindowStrategy::Tumbling,
495 }
496 }
497}
498
499#[derive(Debug, Clone, PartialEq, Eq)]
501pub enum SlidingWindowStrategy {
502 Tumbling,
504 Sliding,
506 Session,
508 Custom,
510}
511
512#[derive(Debug, Clone)]
514pub struct DistributedComputingConfig {
515 pub enable_distributed: bool,
517 pub cluster_config: ClusterConfig,
519 pub communication_protocol: CommunicationProtocol,
521 pub fault_tolerance: DistributedFaultTolerance,
523}
524
525impl Default for DistributedComputingConfig {
526 fn default() -> Self {
527 Self {
528 enable_distributed: false,
529 cluster_config: ClusterConfig::default(),
530 communication_protocol: CommunicationProtocol::TCP,
531 fault_tolerance: DistributedFaultTolerance::default(),
532 }
533 }
534}
535
536#[derive(Debug, Clone)]
538pub struct ClusterConfig {
539 pub master_address: String,
541 pub worker_addresses: Vec<String>,
543 pub node_resources: HashMap<String, NodeResources>,
545 pub network_topology: NetworkTopology,
547}
548
549impl Default for ClusterConfig {
550 fn default() -> Self {
551 Self {
552 master_address: "localhost:8000".to_string(),
553 worker_addresses: vec![],
554 node_resources: HashMap::new(),
555 network_topology: NetworkTopology::StarTopology,
556 }
557 }
558}
559
560#[derive(Debug, Clone)]
562pub struct NodeResources {
563 pub cpu_cores: usize,
565 pub memory_mb: usize,
567 pub gpu_count: usize,
569 pub network_bandwidth: f64,
571}
572
573#[derive(Debug, Clone, PartialEq, Eq)]
575pub enum NetworkTopology {
576 StarTopology,
578 RingTopology,
580 MeshTopology,
582 TreeTopology,
584}
585
586#[derive(Debug, Clone, PartialEq, Eq)]
588pub enum CommunicationProtocol {
589 TCP,
591 UDP,
593 MPI,
595 GRPC,
597 Custom(String),
599}
600
601#[derive(Debug, Clone)]
603pub struct DistributedFaultTolerance {
604 pub enable_failover: bool,
606 pub replication_factor: usize,
608 pub heartbeat_interval: Duration,
610 pub recovery_strategy: RecoveryStrategy,
612}
613
614impl Default for DistributedFaultTolerance {
615 fn default() -> Self {
616 Self {
617 enable_failover: true,
618 replication_factor: 2,
619 heartbeat_interval: Duration::from_secs(5),
620 recovery_strategy: RecoveryStrategy::Restart,
621 }
622 }
623}
624
625#[derive(Debug, Clone, PartialEq, Eq)]
627pub enum RecoveryStrategy {
628 Restart,
630 Migrate,
632 CheckpointRestore,
634 Adaptive,
636}
637
638#[derive(Debug, Clone)]
640pub struct ProfilingConfig {
641 pub enable_profiling: bool,
643 pub profiling_granularity: ProfilingGranularity,
645 pub collection_interval: Duration,
647 pub enable_memory_profiling: bool,
649 pub enable_cpu_profiling: bool,
651 pub enable_io_profiling: bool,
653}
654
655impl Default for ProfilingConfig {
656 fn default() -> Self {
657 Self {
658 enable_profiling: true,
659 profiling_granularity: ProfilingGranularity::Function,
660 collection_interval: Duration::from_millis(100),
661 enable_memory_profiling: true,
662 enable_cpu_profiling: true,
663 enable_io_profiling: true,
664 }
665 }
666}
667
668#[derive(Debug, Clone, PartialEq, Eq)]
670pub enum ProfilingGranularity {
671 Line,
673 Function,
675 Module,
677 Application,
679}
680
681#[derive(Debug, Clone)]
683pub struct GPUAccelerationConfig {
684 pub enable_gpu: bool,
686 pub device_selection: GPUDeviceSelection,
688 pub memory_strategy: GPUMemoryStrategy,
690 pub kernel_config: GPUKernelConfig,
692}
693
694impl Default for GPUAccelerationConfig {
695 fn default() -> Self {
696 Self {
697 enable_gpu: false, device_selection: GPUDeviceSelection::Automatic,
699 memory_strategy: GPUMemoryStrategy::Unified,
700 kernel_config: GPUKernelConfig::default(),
701 }
702 }
703}
704
705#[derive(Debug, Clone, PartialEq, Eq)]
707pub enum GPUDeviceSelection {
708 Automatic,
710 Specific(usize),
712 Multiple(Vec<usize>),
714 All,
716}
717
718#[derive(Debug, Clone, PartialEq, Eq)]
720pub enum GPUMemoryStrategy {
721 Unified,
723 Explicit,
725 Streaming,
727 Pooled,
729}
730
731#[derive(Debug, Clone)]
733pub struct GPUKernelConfig {
734 pub block_size: usize,
736 pub grid_size: usize,
738 pub enable_kernel_fusion: bool,
740 pub optimization_level: GPUOptimizationLevel,
742}
743
744impl Default for GPUKernelConfig {
745 fn default() -> Self {
746 Self {
747 block_size: 256,
748 grid_size: 1024,
749 enable_kernel_fusion: true,
750 optimization_level: GPUOptimizationLevel::Aggressive,
751 }
752 }
753}
754
755#[derive(Debug, Clone, PartialEq, Eq)]
757pub enum GPUOptimizationLevel {
758 None,
760 Basic,
762 Aggressive,
764 Maximum,
766}