use scirs2_core::Complex64;
use scirs2_fft::planning_adaptive::{AdaptiveExecutor, AdaptivePlanningConfig};
use std::time::{Duration, Instant};
#[allow(dead_code)]
fn main() {
println!("Adaptive FFT Planning Example");
println!("============================\n");
let config = AdaptivePlanningConfig {
enabled: true,
min_samples: 3, evaluation_interval: Duration::from_millis(100), max_strategy_switches: 10, enable_backend_switching: false, improvement_threshold: 1.05, };
let size = 1024;
let adaptive_executor = AdaptiveExecutor::new(&[size], true, Some(config));
println!("Running FFT operations and adapting to performance...");
let mut input = vec![Complex64::default(); size];
for (i, item) in input.iter_mut().enumerate().take(size) {
let phase = 2.0 * std::f64::consts::PI * (i as f64) / 100.0;
*item = Complex64::new(phase.cos(), phase.sin());
}
let mut output = vec![Complex64::default(); size];
let iterations = 20;
let mut total_time = Duration::from_nanos(0);
for i in 1..=iterations {
let start = Instant::now();
adaptive_executor
.execute(&input, &mut output)
.expect("Operation failed");
let elapsed = start.elapsed();
total_time += elapsed;
if i % 5 == 0 || i == 1 {
println!("\nIteration {}/{}", i, iterations);
println!(
" Current strategy: {:?}",
adaptive_executor.current_strategy()
);
println!(" Execution time: {:?}", elapsed);
println!(" Average time: {:?}", total_time / i as u32);
println!("\n Strategy performance:");
for (strategy, (avg_time, count)) in adaptive_executor.get_statistics() {
if count > 0 {
println!(" {:?}: {:?} avg ({} samples)", strategy, avg_time, count);
}
}
}
if i == 10 {
println!("\nSimulating increased system load...");
for _ in 0..10_000_000 {
std::hint::black_box(1 + 1);
}
}
}
println!(
"\nFinal Strategy: {:?}",
adaptive_executor.current_strategy()
);
println!(
"Overall average execution time: {:?}",
total_time / iterations as u32
);
println!("\nFinal Strategy Statistics:");
for (strategy, (avg_time, count)) in adaptive_executor.get_statistics() {
if count > 0 {
println!(" {:?}: {:?} avg ({} samples)", strategy, avg_time, count);
}
}
}