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}