File size: 2,916 Bytes
be99550 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | // π 100λ§ λ
Έλ λκ·λͺ¨ λ³λ ¬ + μ€μκ° νλ μ£Όμ
ν΅ν© λ²€μΉλ§ν¬ (src/bin/run_large_scale.rs)
#[path="../live_streamer.rs"] mod live_streamer;
#[path="../parallel_engine.rs"] mod parallel_engine;
#[path="../korean_telemetry.rs"] mod korean_telemetry;
use std::time::Instant;
use live_streamer::LiveSignalStreamer;
use parallel_engine::LargeScaleEngine;
use korean_telemetry::TelemetryReporter;
fn main() {
println!("============================================================");
println!(" π BioPhys 100λ§ λ
Έλ(1024x1024) λκ·λͺ¨ λ³λ ¬ μμ§ κ΅¬λ");
println!("============================================================\n");
let grid_size = 1024; // 1,048,576 λ
Έλ
let total_nodes = grid_size * grid_size;
println!("βοΈ [μμ€ν
μ¬μ] μ΄ {}κ° 8λ μμ λ
Έλ ν λΉ μλ£ (1M Nodes)", total_nodes);
let mut engine = LargeScaleEngine::new(grid_size);
let mut streamer = LiveSignalStreamer::new(3.0); // 3Hz κ³ μ‘°ν νλ
println!("π [μ€μκ° μ νΈ] κ³ μ£Όν μΈλΆ νλ(Harmonic Wave) μ€μκ° μ£Όμ
μμ...\n");
let total_ticks = 10;
let start_time = Instant::now();
for tick in 1..=total_ticks {
// 1. μΈλΆ μ€μκ° νλ μ νΈ μμ± λ° μλ°μΈ΅ μ£Όμ
let external_wave = streamer.generate_harmonic_wave(grid_size);
for (b, w) in engine.bedrock.iter_mut().zip(external_wave.iter()) {
*b = (*b * 0.7) + (*w * 0.3); // μΈλΆ νλ μ΅ν©
}
// 2. 100λ§ λ
Έλ λ©ν°μ€λ λ λ³λ ¬ κ³μ° (Rayon)
let tick_start = Instant::now();
let avg_energy = engine.step_parallel();
let tick_dur = tick_start.elapsed();
// 3. νκ΅μ΄ ν
λ λ©νΈλ¦¬ 보κ³
let sample_phases: Vec<f32> = engine.topsoil[0..10_000].iter().map(|p| p.value()).collect();
let report = TelemetryReporter::analyze(&sample_phases, avg_energy, tick);
print!("{}", report);
println!(" ββ 100λ§ λ
Έλ 1-Tick μμ μκ°: {:.2} ms\n", tick_dur.as_secs_f64() * 1000.0);
}
let total_elapsed = start_time.elapsed().as_secs_f64();
let total_cell_updates = (total_nodes as f64) * (total_ticks as f64);
let mega_updates_per_sec = (total_cell_updates / total_elapsed) / 1_000_000.0;
println!("============================================================");
println!(" π λκ·λͺ¨ λ³λ ¬ μ€μΈ‘ λ²€μΉλ§ν¬ κ²°κ³Ό");
println!("============================================================");
println!(" β±οΈ μ΄ μ°μ° μκ° : {:.4} μ΄", total_elapsed);
println!(" π μ΄ κ°±μ μ
μ : {:.1} Million Cells", total_cell_updates / 1_000_000.0);
println!(" β‘ λ©ν°μ€λ λ μ²λ¦¬λ : {:.2} MCell/sec (μ΄λΉ μμ΅ κ° μ
)", mega_updates_per_sec);
println!("============================================================");
}
|