1use crate::{profiler::ProfilingSession, ComputationGraph, NodeId};
4use std::collections::HashMap;
5use std::time::{Duration, SystemTime};
6
7#[derive(Debug, Clone)]
9pub struct AdvisorConfig {
10 pub version: String,
11 pub max_recommendations: usize,
12 pub min_confidence_threshold: f64,
13 pub min_benefit_threshold: f64,
14 pub enable_learning: bool,
15 pub analysis_depth: AnalysisDepth,
16 pub optimization_goals: OptimizationGoals,
17}
18
19impl Default for AdvisorConfig {
20 fn default() -> Self {
21 Self {
22 version: "1.0.0".to_string(),
23 max_recommendations: 10,
24 min_confidence_threshold: 0.5,
25 min_benefit_threshold: 0.1,
26 enable_learning: true,
27 analysis_depth: AnalysisDepth::Standard,
28 optimization_goals: OptimizationGoals::default(),
29 }
30 }
31}
32
33#[derive(Debug, Clone, PartialEq)]
34pub enum AnalysisDepth {
35 Quick,
36 Standard,
37 Comprehensive,
38}
39
40#[derive(Debug, Clone)]
41pub struct OptimizationGoals {
42 pub prioritize_speed: bool,
43 pub prioritize_memory: bool,
44 pub prioritize_energy: bool,
45 pub enable_aggressive_optimizations: bool,
46}
47
48impl Default for OptimizationGoals {
49 fn default() -> Self {
50 Self {
51 prioritize_speed: true,
52 prioritize_memory: true,
53 prioritize_energy: false,
54 enable_aggressive_optimizations: false,
55 }
56 }
57}
58
59#[derive(Debug, Clone)]
61pub struct AnalysisInput {
62 pub computation_graph: Option<ComputationGraph>,
63 pub benchmark_results: Option<BenchmarkResults>,
64 pub profiling_data: Option<ProfilingSession>,
65 pub system_constraints: SystemConstraints,
66 pub user_preferences: UserPreferences,
67 pub previous_optimizations: Vec<OptimizationRecommendation>,
68 pub abstract_analysis: Option<crate::abstract_interpretation::AbstractAnalysisResult>,
69 pub symbolic_execution: Option<crate::symbolic_execution::SymbolicExecutionResult>,
70}
71
72#[derive(Debug, Clone)]
73pub struct SystemConstraints {
74 pub memory_gb: usize,
75 pub cpu_cores: usize,
76 pub has_gpu: bool,
77 pub target_platform: TargetPlatform,
78}
79
80impl Default for SystemConstraints {
81 fn default() -> Self {
82 Self {
83 memory_gb: 8,
84 cpu_cores: 4,
85 has_gpu: false,
86 target_platform: TargetPlatform::Desktop,
87 }
88 }
89}
90
91#[derive(Debug, Clone, PartialEq)]
92pub enum TargetPlatform {
93 Desktop,
94 Server,
95 Mobile,
96 Embedded,
97}
98
99#[derive(Debug, Clone)]
100pub struct UserPreferences {
101 pub optimization_aggressiveness: f64,
102 pub risk_tolerance: f64,
103 pub time_constraints: TimeConstraints,
104}
105
106impl Default for UserPreferences {
107 fn default() -> Self {
108 Self {
109 optimization_aggressiveness: 0.5,
110 risk_tolerance: 0.5,
111 time_constraints: TimeConstraints::Unlimited,
112 }
113 }
114}
115
116#[derive(Debug)]
118pub struct OptimizationReport {
119 pub recommendations: Vec<OptimizationRecommendation>,
120 pub pattern_analysis: PatternAnalysis,
121 pub performance_analysis: PerformanceAnalysis,
122 pub cost_analysis: CostBenefitAnalysis,
123 pub explanations: Vec<OptimizationExplanation>,
124 pub confidence_scores: ConfidenceScores,
125 pub implementation_complexity: ImplementationComplexity,
126 pub expected_improvements: ExpectedImprovements,
127 pub analysis_metadata: AnalysisMetadata,
128}
129
130#[derive(Debug, Clone)]
132pub struct OptimizationRecommendation {
133 pub id: String,
134 pub optimization_type: OptimizationType,
135 pub title: String,
136 pub description: String,
137 pub expected_speedup: f64,
138 pub expected_memory_reduction: f64,
139 pub implementation_complexity: f64,
140 pub confidence: f64,
141 pub risk_level: f64,
142 pub priority_score: f64,
143 pub affected_components: Vec<String>,
144 pub prerequisites: Vec<String>,
145 pub estimated_implementation_time: Duration,
146}
147
148#[derive(Debug, Clone, PartialEq, Eq, Hash)]
150pub enum OptimizationType {
151 FusionOptimization,
152 MemoryOptimization,
153 ParallelizationOptimization,
154 VectorizationOptimization,
155 ConstantFoldingOptimization,
156 DeadCodeEliminationOptimization,
157 ComputationOptimization,
158 IOOptimization,
159 CompilationOptimization,
160 ArchitectureOptimization,
161}
162
163impl OptimizationType {
164 pub fn description(&self) -> &'static str {
165 match self {
166 OptimizationType::FusionOptimization => "Fusion",
167 OptimizationType::MemoryOptimization => "Memory",
168 OptimizationType::ParallelizationOptimization => "Parallelization",
169 OptimizationType::VectorizationOptimization => "Vectorization",
170 OptimizationType::ConstantFoldingOptimization => "Constant Folding",
171 OptimizationType::DeadCodeEliminationOptimization => "Dead Code Elimination",
172 OptimizationType::ComputationOptimization => "Computation",
173 OptimizationType::IOOptimization => "I/O",
174 OptimizationType::CompilationOptimization => "Compilation",
175 OptimizationType::ArchitectureOptimization => "Architecture",
176 }
177 }
178}
179
180#[derive(Debug)]
182pub struct PatternAnalysis {
183 pub detected_patterns: Vec<DetectedPattern>,
184 pub antipatterns: Vec<DetectedAntipattern>,
185 pub optimization_opportunities: Vec<OptimizationOpportunity>,
186 pub pattern_frequency: HashMap<String, f64>,
187 pub complexity_metrics: ComplexityMetrics,
188}
189
190#[derive(Debug)]
192pub struct DetectedPattern {
193 pub pattern_type: PatternType,
194 pub location: PatternLocation,
195 pub confidence: f64,
196 pub description: String,
197 pub estimated_benefit: f64,
198}
199
200#[derive(Debug, Clone)]
201pub enum PatternType {
202 FusionOpportunity,
203 MemoryInefficiency,
204 ParallelizationOpportunity,
205 VectorizationOpportunity,
206 ComputationPattern,
207}
208
209#[derive(Debug)]
211pub struct DetectedAntipattern {
212 pub antipattern_type: AntipatternType,
213 pub location: PatternLocation,
214 pub severity: f64,
215 pub description: String,
216 pub fix_suggestion: String,
217}
218
219#[derive(Debug, Clone)]
220pub enum AntipatternType {
221 RedundantComputation,
222 PoorMemoryLocality,
223 InefficientAlgorithm,
224 ExcessiveAllocation,
225}
226
227impl AntipatternType {
228 pub fn description(&self) -> &'static str {
229 match self {
230 AntipatternType::RedundantComputation => "Redundant Computation",
231 AntipatternType::PoorMemoryLocality => "Poor Memory Locality",
232 AntipatternType::InefficientAlgorithm => "Inefficient Algorithm",
233 AntipatternType::ExcessiveAllocation => "Excessive Allocation",
234 }
235 }
236}
237
238#[derive(Debug)]
240pub enum PatternLocation {
241 Node(NodeId),
242 Nodes(Vec<NodeId>),
243 Subgraph(Vec<Vec<NodeId>>),
244 Global,
245}
246
247#[derive(Debug)]
249pub struct OptimizationOpportunity {
250 pub opportunity_type: OpportunityType,
251 pub location: PatternLocation,
252 pub estimated_benefit: f64,
253 pub implementation_complexity: f64,
254 pub prerequisites: Vec<String>,
255 pub description: String,
256}
257
258impl OptimizationOpportunity {
259 pub fn can_be_combined_with(&self, other: &Self) -> bool {
260 use OptimizationType::*;
261
262 matches!(
263 (
264 self.opportunity_type.to_optimization_type(),
265 other.opportunity_type.to_optimization_type()
266 ),
267 (FusionOptimization, VectorizationOptimization)
268 | (MemoryOptimization, ComputationOptimization)
269 | (ConstantFoldingOptimization, FusionOptimization)
270 )
271 }
272}
273
274#[derive(Debug)]
275pub enum OpportunityType {
276 FusionOptimization,
277 MemoryOptimization,
278 ParallelizationOptimization,
279 VectorizationOptimization,
280 ConstantFolding,
281 DeadCodeElimination,
282 ComputationOptimization,
283}
284
285impl OpportunityType {
286 pub fn to_optimization_type(&self) -> OptimizationType {
287 match self {
288 OpportunityType::FusionOptimization => OptimizationType::FusionOptimization,
289 OpportunityType::MemoryOptimization => OptimizationType::MemoryOptimization,
290 OpportunityType::ParallelizationOptimization => {
291 OptimizationType::ParallelizationOptimization
292 }
293 OpportunityType::VectorizationOptimization => {
294 OptimizationType::VectorizationOptimization
295 }
296 OpportunityType::ConstantFolding => OptimizationType::ConstantFoldingOptimization,
297 OpportunityType::DeadCodeElimination => {
298 OptimizationType::DeadCodeEliminationOptimization
299 }
300 OpportunityType::ComputationOptimization => OptimizationType::ComputationOptimization,
301 }
302 }
303}
304
305#[derive(Debug, Clone)]
307pub struct PerformanceAnalysis {
308 pub bottlenecks: Vec<PerformanceBottleneck>,
309 pub hotspots: Vec<PerformanceHotspot>,
310 pub execution_profile: ExecutionProfile,
311 pub resource_utilization: ResourceUtilization,
312 pub scalability_analysis: ScalabilityAnalysis,
313}
314
315#[derive(Debug, Clone)]
317pub struct PerformanceBottleneck {
318 pub bottleneck_type: BottleneckType,
319 pub location: String,
320 pub severity: f64,
321 pub description: String,
322 pub suggested_fixes: Vec<String>,
323}
324
325#[derive(Debug, Clone)]
326pub enum BottleneckType {
327 Memory,
328 Computation,
329 IO,
330 Synchronization,
331}
332
333impl BottleneckType {
334 pub fn description(&self) -> &'static str {
335 match self {
336 BottleneckType::Memory => "Memory",
337 BottleneckType::Computation => "Computation",
338 BottleneckType::IO => "I/O",
339 BottleneckType::Synchronization => "Synchronization",
340 }
341 }
342}
343
344#[derive(Debug, Clone)]
346pub struct PerformanceHotspot {
347 pub location: String,
348 pub execution_time_percent: f64,
349 pub memory_usage_percent: f64,
350 pub frequency: usize,
351 pub optimization_potential: f64,
352}
353
354#[derive(Debug)]
356pub struct CostBenefitAnalysis {
357 pub implementation_costs: HashMap<String, f64>,
358 pub expected_benefits: HashMap<String, f64>,
359 pub risk_assessments: HashMap<String, f64>,
360 pub roi_estimates: HashMap<String, f64>,
361 pub priority_rankings: Vec<(String, f64)>,
362}
363
364#[derive(Debug, Clone)]
366pub struct OptimizationExplanation {
367 pub recommendation_id: String,
368 pub why_beneficial: String,
369 pub how_to_implement: String,
370 pub potential_risks: Vec<String>,
371 pub verification_steps: Vec<String>,
372 pub expected_timeline: Duration,
373}
374
375#[derive(Debug)]
377pub struct AnalysisMetadata {
378 pub analysis_time: Duration,
379 pub advisor_version: String,
380 pub input_characteristics: String,
381 pub recommendations_count: usize,
382 pub timestamp: SystemTime,
383}
384
385#[derive(Debug)]
387pub struct ConfidenceScores {
388 pub overall_confidence: f64,
389 pub pattern_detection_confidence: f64,
390 pub performance_analysis_confidence: f64,
391 pub cost_estimation_confidence: f64,
392 pub implementation_assessment_confidence: f64,
393}
394
395#[derive(Debug)]
397pub struct ImplementationComplexity {
398 pub overall_complexity: f64,
399 pub technical_complexity: f64,
400 pub coordination_complexity: f64,
401 pub testing_complexity: f64,
402 pub deployment_complexity: f64,
403}
404
405#[derive(Debug)]
407pub struct ExpectedImprovements {
408 pub performance_improvement: f64,
409 pub memory_reduction: f64,
410 pub energy_savings: f64,
411 pub development_time_impact: Duration,
412 pub maintenance_impact: f64,
413}
414
415#[derive(Debug, Clone)]
417pub struct ExecutionProfile {
418 pub total_execution_time: Duration,
419 pub memory_peak_usage: usize,
420 pub cpu_utilization: f64,
421 pub io_operations: usize,
422 pub cache_miss_rate: f64,
423}
424
425#[derive(Debug, Clone)]
427pub struct ResourceUtilization {
428 pub cpu_usage: f64,
429 pub memory_usage: f64,
430 pub io_bandwidth_usage: f64,
431 pub network_usage: f64,
432 pub gpu_usage: Option<f64>,
433}
434
435#[derive(Debug, Clone)]
437pub struct ScalabilityAnalysis {
438 pub parallelization_potential: f64,
439 pub memory_scalability: f64,
440 pub io_scalability: f64,
441 pub algorithmic_complexity: String,
442 pub bottleneck_scalability: HashMap<String, f64>,
443}
444
445#[derive(Debug)]
447pub struct ComplexityMetrics {
448 pub cyclomatic_complexity: usize,
449 pub data_flow_complexity: usize,
450 pub control_flow_complexity: usize,
451 pub computational_complexity: String,
452 pub memory_complexity: String,
453}
454
455#[derive(Debug)]
457pub struct LoopInfo {
458 pub nodes: Vec<NodeId>,
459 pub iteration_bound: Option<usize>,
460 pub optimization_potential: f64,
461}
462
463#[derive(Debug)]
465pub struct KnownPattern {
466 pub name: String,
467 pub description: String,
468 pub detection_criteria: String,
469 pub optimization_potential: f64,
470}
471
472#[derive(Debug)]
474pub struct KnownOptimization {
475 pub name: String,
476 pub description: String,
477 pub applicability_conditions: Vec<String>,
478 pub expected_benefit: f64,
479 pub implementation_complexity: f64,
480}
481
482#[derive(Debug)]
484pub struct OptimizationHeuristic {
485 pub name: String,
486 pub condition: String,
487 pub recommendation: String,
488 pub confidence: f64,
489}
490
491#[derive(Debug)]
493pub struct AnalysisRecord {
494 pub timestamp: SystemTime,
495 pub input_characteristics: String,
496 pub recommendations_count: usize,
497 pub avg_confidence: f64,
498}
499
500#[derive(Debug, Clone, PartialEq)]
502pub enum TimeConstraints {
503 Unlimited,
504 Hours(u32),
505 Days(u32),
506 Weeks(u32),
507}
508
509#[derive(Debug, Clone)]
511pub struct OverallAnalysis {
512 pub total_opportunities: usize,
513 pub estimated_speedup: f64,
514 pub estimated_memory_reduction: f64,
515 pub implementation_complexity: f64,
516 pub confidence: f64,
517 pub risk_assessment: RiskAssessment,
518 pub priority_distribution: PriorityDistribution,
519}
520
521#[derive(Debug, Clone)]
523pub struct DetailedExplanation {
524 pub recommendation_id: String,
525 pub rationale: String,
526 pub implementation_steps: Vec<String>,
527 pub potential_issues: Vec<String>,
528 pub success_indicators: Vec<String>,
529}
530
531#[derive(Debug, Clone)]
533pub struct ConfidenceAnalysis {
534 pub overall_confidence: f64,
535 pub data_quality_score: f64,
536 pub analysis_completeness: f64,
537 pub recommendation_reliability: f64,
538}
539
540#[derive(Debug, Clone)]
542pub struct RiskAssessment {
543 pub overall_risk_level: f64,
544 pub high_risk_recommendations: usize,
545 pub risk_factors: Vec<String>,
546 pub mitigation_strategies: Vec<String>,
547}
548
549#[derive(Debug, Clone)]
551pub struct PriorityDistribution {
552 pub high_priority: usize,
553 pub medium_priority: usize,
554 pub low_priority: usize,
555}
556
557impl Default for RiskAssessment {
558 fn default() -> Self {
559 Self {
560 overall_risk_level: 0.5,
561 high_risk_recommendations: 0,
562 risk_factors: Vec::new(),
563 mitigation_strategies: Vec::new(),
564 }
565 }
566}
567
568#[derive(Debug, Clone)]
570pub struct BenchmarkResults {
571 pub total_execution_time: Duration,
572 pub operation_timings: HashMap<String, OperationTiming>,
573 pub memory_statistics: Option<MemoryStatistics>,
574 pub resource_usage: Option<ResourceStats>,
575}
576
577#[derive(Debug, Clone)]
579pub struct OperationTiming {
580 pub average_duration: Duration,
581 pub sample_count: usize,
582}
583
584#[derive(Debug, Clone)]
586pub struct MemoryStatistics {
587 pub peak_usage: usize,
588 pub allocated: usize,
589}
590
591#[derive(Debug, Clone)]
593pub struct ResourceStats {
594 pub cpu_utilization: f64,
595 pub memory_utilization: f64,
596 pub io_utilization: f64,
597}