1use std::time::Duration;
4
5#[cfg(feature = "serialize")]
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Clone)]
13pub struct EagerExecutionConfig {
14 pub enable_op_cache: bool,
16 pub enable_memory_pool: bool,
18 pub enable_async_execution: bool,
20 pub max_cache_size: usize,
22 pub memory_pool_size: usize,
24 pub target_overhead_ns: u64,
26 pub enable_context_optimization: bool,
28 pub enable_kernel_fusion: bool,
30
31 pub simd_config: SimdExecutionConfig,
34 pub parallel_config: ParallelExecutionConfig,
36 pub memory_config: MemoryOptimizationConfig,
38 pub monitoring_config: PerformanceMonitoringConfig,
40 pub adaptive_config: AdaptiveTuningConfig,
42 pub gpu_config: GpuAccelerationConfig,
44 pub ultra_latency_config: UltraLatencyConfig,
46}
47
48#[derive(Debug, Clone)]
50pub struct SimdExecutionConfig {
51 pub enable_simd: bool,
53 pub simd_width: u32,
55 pub enable_auto_vectorization: bool,
57 pub enable_target_features: bool,
59 pub simd_threshold: usize,
61 pub simd_elementwise: bool,
63 pub simd_matrix_ops: bool,
65 pub memory_alignment: usize,
67}
68
69#[derive(Debug, Clone)]
71pub struct ParallelExecutionConfig {
72 pub enable_parallel: bool,
74 pub num_threads: usize,
76 pub parallel_threshold: usize,
78 pub thread_strategy: ThreadPoolStrategy,
80 pub enable_work_stealing: bool,
82 pub chunk_strategy: ChunkStrategy,
84 pub numa_aware: bool,
86 pub cpu_affinity: bool,
88}
89
90#[derive(Debug, Clone)]
92pub enum ThreadPoolStrategy {
93 Global,
95 PerDevice,
97 Adaptive,
99 Custom {
101 core_threads: usize,
102 max_threads: usize,
103 },
104}
105
106#[derive(Debug, Clone)]
108pub enum ChunkStrategy {
109 Fixed(usize),
111 Adaptive,
113 WorkStealing,
115 CacheAware,
117}
118
119#[derive(Debug, Clone)]
121pub struct MemoryOptimizationConfig {
122 pub enable_pooling: bool,
124 pub pool_strategy: PoolStrategy,
126 pub enable_memory_mapping: bool,
128 pub mmap_threshold: usize,
130 pub enable_adaptive_chunking: bool,
132 pub adaptive_chunk_size: usize,
134 pub enable_zero_copy: bool,
136 pub bandwidth_optimization: bool,
138 pub cache_optimization: bool,
140 pub preallocation_strategy: PreallocationStrategy,
142}
143
144#[derive(Debug, Clone)]
146pub enum PoolStrategy {
147 FixedSize {
149 block_size: usize,
150 num_blocks: usize,
151 },
152 MultiSize { sizes: Vec<usize> },
154 Adaptive {
156 initial_size: usize,
157 growth_factor: f64,
158 },
159 Segregated,
161}
162
163#[derive(Debug, Clone)]
165pub enum PreallocationStrategy {
166 None,
168 Historical,
170 Fixed(usize),
172 Adaptive,
174}
175
176#[derive(Debug, Clone)]
178pub struct PerformanceMonitoringConfig {
179 pub enable_monitoring: bool,
181 pub collection_frequency: Duration,
183 pub enable_profiling: bool,
185 pub enable_benchmarking: bool,
187 pub benchmark_frequency: Duration,
189 pub track_memory_usage: bool,
191 pub enable_timing: bool,
193 pub track_cache_performance: bool,
195 pub enable_hardware_counters: bool,
197 pub history_retention: usize,
199 pub enable_alerts: bool,
201 pub alert_threshold: Duration,
203}
204
205#[derive(Debug, Clone)]
207pub struct AdaptiveTuningConfig {
208 pub enable_adaptive: bool,
210 pub learning_rate: f64,
212 pub adaptation_frequency: Duration,
214 pub enable_prediction: bool,
216 pub prediction_algorithm: PredictionAlgorithm,
218 pub tune_simd: bool,
220 pub tune_parallel: bool,
222 pub tune_memory: bool,
224 pub min_confidence: f64,
226 pub enable_ab_testing: bool,
228 pub sample_size: usize,
230}
231
232#[derive(Debug, Clone)]
234pub enum PredictionAlgorithm {
235 MovingAverage { window_size: usize },
237 ExponentialSmoothing { alpha: f64 },
239 LinearRegression,
241 MachineLearning { model_complexity: ModelComplexity },
243}
244
245#[derive(Debug, Clone)]
247pub enum ModelComplexity {
248 Simple,
250 Polynomial { degree: u32 },
252 NeuralNetwork { hidden_layers: Vec<usize> },
254}
255
256#[derive(Debug, Clone)]
258pub struct GpuAccelerationConfig {
259 pub enable_gpu: bool,
261 pub gpu_memory_pool: usize,
263 pub enable_async_gpu: bool,
265 pub enable_kernel_fusion: bool,
267 pub enable_tensor_cores: bool,
269 pub mixed_precision: bool,
271 pub optimize_transfers: bool,
273 pub enable_multi_gpu: bool,
275 pub scheduling_strategy: GpuSchedulingStrategy,
277}
278
279#[derive(Debug, Clone)]
281pub enum GpuSchedulingStrategy {
282 RoundRobin,
284 LoadBased,
286 MemoryAware,
288 LatencyOptimized,
290}
291
292#[derive(Debug, Clone)]
294pub struct UltraLatencyConfig {
295 pub enable_ultra_latency: bool,
297 pub cpu_isolation: bool,
299 pub realtime_priority: bool,
301 pub disable_cpu_scaling: bool,
303 pub prefault_memory: bool,
305 pub disable_swap: bool,
307 pub enable_lockfree: bool,
309 pub optimize_cache_residency: bool,
311 pub optimize_branch_prediction: bool,
313}
314
315impl Default for EagerExecutionConfig {
316 fn default() -> Self {
317 Self {
318 enable_op_cache: true,
319 enable_memory_pool: true,
320 enable_async_execution: true,
321 max_cache_size: 1000,
322 memory_pool_size: 128 * 1024 * 1024, target_overhead_ns: 1_000_000, enable_context_optimization: true,
325 enable_kernel_fusion: true,
326
327 simd_config: SimdExecutionConfig::default(),
329 parallel_config: ParallelExecutionConfig::default(),
330 memory_config: MemoryOptimizationConfig::default(),
331 monitoring_config: PerformanceMonitoringConfig::default(),
332 adaptive_config: AdaptiveTuningConfig::default(),
333 gpu_config: GpuAccelerationConfig::default(),
334 ultra_latency_config: UltraLatencyConfig::default(),
335 }
336 }
337}
338
339impl Default for SimdExecutionConfig {
340 fn default() -> Self {
341 Self {
342 enable_simd: true,
343 simd_width: 256, enable_auto_vectorization: true,
345 enable_target_features: true,
346 simd_threshold: 1024, simd_elementwise: true,
348 simd_matrix_ops: true,
349 memory_alignment: 32, }
351 }
352}
353
354impl Default for ParallelExecutionConfig {
355 fn default() -> Self {
356 Self {
357 enable_parallel: true,
358 num_threads: 0, parallel_threshold: 10_000, thread_strategy: ThreadPoolStrategy::Adaptive,
361 enable_work_stealing: true,
362 chunk_strategy: ChunkStrategy::Adaptive,
363 numa_aware: true,
364 cpu_affinity: false, }
366 }
367}
368
369impl Default for MemoryOptimizationConfig {
370 fn default() -> Self {
371 Self {
372 enable_pooling: true,
373 pool_strategy: PoolStrategy::Adaptive {
374 initial_size: 64 * 1024 * 1024, growth_factor: 1.5,
376 },
377 enable_memory_mapping: true,
378 mmap_threshold: 100 * 1024 * 1024, enable_adaptive_chunking: true,
380 adaptive_chunk_size: 1024 * 1024, enable_zero_copy: true,
382 bandwidth_optimization: true,
383 cache_optimization: true,
384 preallocation_strategy: PreallocationStrategy::Historical,
385 }
386 }
387}
388
389impl Default for PerformanceMonitoringConfig {
390 fn default() -> Self {
391 Self {
392 enable_monitoring: true,
393 collection_frequency: Duration::from_millis(100), enable_profiling: true,
395 enable_benchmarking: false, benchmark_frequency: Duration::from_secs(60), track_memory_usage: true,
398 enable_timing: true,
399 track_cache_performance: true,
400 enable_hardware_counters: false, history_retention: 1000, enable_alerts: true,
403 alert_threshold: Duration::from_millis(5), }
405 }
406}
407
408impl Default for AdaptiveTuningConfig {
409 fn default() -> Self {
410 Self {
411 enable_adaptive: true,
412 learning_rate: 0.01, adaptation_frequency: Duration::from_secs(30), enable_prediction: true,
415 prediction_algorithm: PredictionAlgorithm::ExponentialSmoothing { alpha: 0.3 },
416 tune_simd: true,
417 tune_parallel: true,
418 tune_memory: true,
419 min_confidence: 0.8, enable_ab_testing: false, sample_size: 100, }
423 }
424}
425
426impl Default for GpuAccelerationConfig {
427 fn default() -> Self {
428 Self {
429 enable_gpu: true,
430 gpu_memory_pool: 512 * 1024 * 1024, enable_async_gpu: true,
432 enable_kernel_fusion: true,
433 enable_tensor_cores: true,
434 mixed_precision: true,
435 optimize_transfers: true,
436 enable_multi_gpu: true,
437 scheduling_strategy: GpuSchedulingStrategy::LoadBased,
438 }
439 }
440}
441
442impl Default for UltraLatencyConfig {
443 fn default() -> Self {
444 Self {
445 enable_ultra_latency: false, cpu_isolation: false,
447 realtime_priority: false,
448 disable_cpu_scaling: false,
449 prefault_memory: true, disable_swap: false,
451 enable_lockfree: true, optimize_cache_residency: true,
453 optimize_branch_prediction: true,
454 }
455 }
456}
457
458#[derive(Debug, Clone, Hash, PartialEq, Eq)]
460pub struct OpSignature {
461 pub operation: String,
462 pub input_shapes: Vec<Vec<usize>>,
463 pub dtype: crate::DType,
464 pub device: crate::Device,
465 pub params: Vec<(String, String)>, }
467
468#[derive(Debug, Clone)]
470pub struct CachedOperation {
471 pub signature: OpSignature,
472 pub result_shape: Vec<usize>,
473 pub execution_time: std::time::Duration,
474 pub memory_usage: usize,
475 pub created_at: std::time::Instant,
476 pub last_used: std::time::Instant,
477 pub use_count: usize,
478}
479
480#[derive(Debug, Clone)]
482#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
483pub struct ExecutionMetrics {
484 pub operation: String,
485 pub device: crate::Device,
486 pub setup_time: std::time::Duration,
487 pub execution_time: std::time::Duration,
488 pub teardown_time: std::time::Duration,
489 pub total_overhead: std::time::Duration,
490 pub memory_allocation_time: std::time::Duration,
491 pub cache_hit: bool,
492 pub meets_target: bool,
493}