code wiki / _hdl_build / nx_pardl_gate.nx
nx_pardl_gate.nx source
↩ module page · 55 lines · 3268 B
1import "nx_gate_base.nx"
2// nx_pardl_gate.nx -- proves PARALLEL download AND MEASURES it (the performance axis, not a checkbox): time
3// the same 12-fragment download serial (concurrency=1) vs parallel (concurrency=4) and REPORT the speedup;
4// assert >=2x (real parallelism) AND that every fragment is downloaded + integrity-verified either way. This
5// is what "capturing performance as an axis" looks like: a measured number, and a regression bound. license_tier: ORIGINAL expect_exit: 0
6import "nx_syscalls.nx"
7import "nx_robust_dl.nx"
8import "nx_pardl.nx"
9
10func grow(name: *u8, ok: i64) -> i64 { if ok==1 { gw(" PASS " as *u8) } else { gw(" FAIL " as *u8) } gw(name); gw("
11" as *u8); return ok }
12func gn(v: i64) -> i64 { let b: *u8=sys_mmap(24); var m: i64=v; if m<0{gw("-" as *u8);m=0-m} let t: *u8=sys_mmap(24); var k: i64=0; if m==0{t[0]=48 as u8;k=1} while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1} var i: i64=0; while i<k{b[i]=t[k-1-i];i=i+1} sys_write(1,b,k); return 0 }
13
14func main() -> i64 {
15 gw("pardl SOVEREIGN gate (parallel fragment download -- MEASURED serial vs 4-way speedup + integrity)\n" as *u8)
16 var pass: i64 = 0
17 var ttl: i64 = 0
18
19 let nfrags: i64 = 12
20 let fragcap: i64 = 512
21 let latency: i64 = 50
22 let sharedbuf: *u8 = sys_mmap_shared(nfrags * fragcap) // children write here (MAP_SHARED)
23 let state1: *u8 = sys_mmap(64)
24 let state2: *u8 = sys_mmap(64)
25 var z: i64 = 0; while z < 64 { state1[z] = 0 as u8; state2[z] = 0 as u8; z = z + 1 }
26
27 // SERIAL (concurrency 1)
28 let t0: i64 = sys_clock_now_us()
29 let d1: i64 = pdl_download(nfrags, fragcap, 1, latency, sharedbuf, state1)
30 let t1: i64 = sys_clock_now_us()
31 let serial_us: i64 = t1 - t0
32
33 // PARALLEL (concurrency 4)
34 let t2: i64 = sys_clock_now_us()
35 let d2: i64 = pdl_download(nfrags, fragcap, 4, latency, sharedbuf, state2)
36 let t3: i64 = sys_clock_now_us()
37 let par_us: i64 = t3 - t2
38
39 gw(" MEASURED: serial=" as *u8); gn(serial_us / 1000); gw("ms parallel(4)=" as *u8); gn(par_us / 1000); gw("ms\n" as *u8)
40 var sx: i64 = 0
41 if par_us > 0 { sx = (serial_us * 100) / par_us }
42 gw(" SPEEDUP = " as *u8); gn(sx / 100); gw("." as *u8); let frac: i64 = sx - (sx/100)*100; if frac < 10 { gw("0" as *u8) } gn(frac); gw("x (12 frags @ " as *u8); gn(latency); gw("ms, 4-way)\n" as *u8)
43
44 ttl=ttl+1; pass=pass+grow("C1 serial downloaded all 12 (integrity-ok)\x00" as *u8, (d1 == 12) as i64)
45 ttl=ttl+1; pass=pass+grow("C2 parallel downloaded all 12 (integrity-ok)\x00" as *u8, (d2 == 12) as i64)
46 ttl=ttl+1; pass=pass+grow("C3 parallel >= 2x faster than serial (real parallelism)\x00" as *u8, ((par_us * 2) < serial_us) as i64)
47 // C4: resume-state fully marked under parallelism (composes with resume)
48 var s4: i64 = 1; var i4: i64 = 0
49 while i4 < nfrags { if (state2[i4] & 0xff) != 1 { s4 = 0 } i4 = i4 + 1 }
50 ttl=ttl+1; pass=pass+grow("C4 resume-state all 12 marked (parallel + resume compose)\x00" as *u8, s4)
51
52 gw("pass=" as *u8); gn(pass); gw("/" as *u8); gn(ttl); gw("\n" as *u8)
53 if pass == ttl { gw("verdict=GREEN (parallelism MEASURED as a speedup axis; integrity+resume intact)\n" as *u8); sys_exit(0); return 0 }
54 gw("verdict=RED\n" as *u8); sys_exit(1); return 1
55}