File size: 2,811 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
// 🌌 BioPhys μ‹€μ‹œκ°„ 연속 가동 톡합 μ‹œμŠ€ν…œ (src/bin/run_live_system.rs)
#[path="../korean_telemetry.rs"] mod korean_telemetry;
#[path="../parallel_engine.rs"] mod parallel_engine;

use std::time::Instant;
use parallel_engine::{LargeScaleEngine, PhaseState};
use korean_telemetry::TelemetryReporter;

fn main() {
    println!("============================================================");
    println!(" 🌌 [BioPhys 톡합 가동] μ‹€μ‹œκ°„ 슀트림 βž” ν—΅ ν•™μŠ΅ βž” 동역학 ν…”λ ˆλ©”νŠΈλ¦¬");
    println!("============================================================\n");

    let grid_size = 512; // 262,144 λ…Έλ“œ
    let total_nodes = grid_size * grid_size;
    let mut engine = LargeScaleEngine::new(grid_size);

    println!("βš™οΈ μ‹œμŠ€ν…œ μ΄ˆκΈ°ν™” μ™„λ£Œ (262,144개 8λŒ€ μœ„μƒ λ…Έλ“œ 가동 μ€€λΉ„)");
    println!("πŸš€ 연속 μ‹€μ‹œκ°„ 사이클 가동 μ‹œμž‘...\n");

    let num_cycles = 6;
    let start_all = Instant::now();

    for cycle in 1..=num_cycles {
        let t_cycle_start = Instant::now();

        // 1. μ™ΈλΆ€ μ‹€μ‹œκ°„ μ›Ή 슀트림 νŒŒλ™ 생성 및 μ£Όμž…
        let wave_freq = (cycle as f32) * 0.5;
        for (i, b) in engine.bedrock.iter_mut().enumerate() {
            let x = (i % grid_size) as f32 / grid_size as f32;
            let y = (i / grid_size) as f32 / grid_size as f32;
            let signal = ((x * wave_freq * 6.28).sin() + (y * wave_freq * 6.28).cos()) * 0.5;
            *b = (*b * 0.6) + (signal * 0.4); // ν—΅/동역학 μ‹ ν˜Έ μœ΅ν•©
        }

        // 2. 26만 λ…Έλ“œ 16μ½”μ–΄ λ©€ν‹°μŠ€λ ˆλ“œ 병렬 μƒνƒœ 전이 μ—°μ‚°
        let avg_energy = engine.step_parallel();

        // 3. ν•œκ΅­μ–΄ μ‹€μ‹œκ°„ ν…”λ ˆλ©”νŠΈλ¦¬ λ¦¬ν¬νŒ…
        let sample: Vec<f32> = engine.topsoil[0..10_000].iter().map(|p| p.value()).collect();
        let report = TelemetryReporter::analyze(&sample, avg_energy, cycle);

        let cycle_dur = t_cycle_start.elapsed().as_secs_f64() * 1000.0;
        print!("{}", report);
        println!("   └─ 사이클 처리 속도: {:.2} ms (μ΄ˆλ‹Ή {:.1}회 연속 사이클 κ°€λŠ₯)\n", cycle_dur, 1000.0 / cycle_dur);
    }

    let total_dur = start_all.elapsed().as_secs_f64();
    println!("============================================================");
    println!(" πŸ“Š 연속 μ‹œμŠ€ν…œ 가동 κ²°κ³Ό μš”μ•½");
    println!("============================================================");
    println!(" ⏱️ 총 가동 μ‹œκ°„      : {:.4} 초", total_dur);
    println!(" πŸ”„ 총 μ—°μ‚° λ…Έλ“œ 수   : {:.2} Million Nodes ({:?} nodes total)", (total_nodes * num_cycles) as f64 / 1e6, total_nodes * num_cycles);
    println!(" ⚑ μ•ˆμ •μ„± μƒνƒœ       : 정상 수렴 (Homeostasis ν‰ν˜• μœ μ§€)");
    println!("============================================================");
}