code wiki / _hdl_build / nx_nofloat_k3stack_gate.nx

nx_nofloat_k3stack_gate.nx source

↩ module page · 81 lines · 3679 B

1// nx_nofloat_k3stack_gate.nx -- gate: N-layer K3 stack with Attention Residuals, deterministic AT DEPTH. 2// T1 a 4-layer stack RUNS end-to-end and transforms the input 3// T2 CROSS-LAYER (AttnRes): perturbing the INPUT (layer 0) changes the deep output -- early layers stay 4// reachable through the stack (the AttnRes property; a plain-residual stack would too, but here we also 5// verify the layer-0 contribution is WEIGHTED IN, not washed out, by comparing vs a stack that starts deeper) 6// T3 DEPTH-STABLE: output bounded through 4 layers (no overflow blowup) 7// T4 DETERMINISTIC bit-identical at depth (the exceed: float stacks drift per-layer + compound) 8// license_tier: ORIGINAL No hw writes (Rule 26). expect_exit: 0 9import "nx_nofloat_k3stack.nx" 10import "nx_gate_verdict.nx" 11import "nx_syscalls.nx" 12 13const SG_T: i64 = 4 14const SG_D: i64 = 4 15const SG_DFF: i64 = 8 16const SG_L: i64 = 4 17const SG_Q: i64 = 65536 18 19func sg_fill(m: *i64, rows: i64, cols: i64, seed: i64) -> i64 { 20 var i: i64 = 0 21 while i < rows*cols { m[i] = (((i + seed) % 5) + 1) * (SG_Q / 10); i = i + 1 } 22 return 0 23} 24 25func main() -> i64 { 26 let ctr: *i64 = gv_ctr() 27 gv_head("nx_nofloat_k3stack gate -- N-layer K3 stack + Attention Residuals, deterministic at depth" as *u8) 28 let t: i64 = SG_T 29 let d: i64 = SG_D 30 let dff: i64 = SG_DFF 31 let x: *i64 = sys_mmap(64*8) as *i64 32 let wq: *i64 = sys_mmap(64*8) as *i64 33 let wk: *i64 = sys_mmap(64*8) as *i64 34 let wv: *i64 = sys_mmap(64*8) as *i64 35 let wo: *i64 = sys_mmap(64*8) as *i64 36 let w1: *i64 = sys_mmap(64*8) as *i64 37 let w2: *i64 = sys_mmap(64*8) as *i64 38 sg_fill(x, t, d, 1) 39 sg_fill(wq,d,d,2); sg_fill(wk,d,d,3); sg_fill(wv,d,d,4); sg_fill(wo,d,d,5); sg_fill(w1,d,dff,6); sg_fill(w2,dff,d,7) 40 41 let out: *i64 = sys_mmap(64*8) as *i64 42 k3_stack(x, wq, wk, wv, wo, w1, w2, SG_L, t, d, dff, out) 43 44 // T1: 4-layer stack transforms input 45 var t1: i64 = 1 46 var i: i64 = 0 47 while i < t*d { if out[i] == x[i] { t1 = 0 } i = i + 1 } 48 gv_check("T1 4-layer K3 stack runs end-to-end + transforms input" as *u8, t1, ctr) 49 50 // T2: cross-layer AttnRes -- perturb the input, the deep output changes (early layers reachable) 51 let x2: *i64 = sys_mmap(64*8) as *i64 52 i = 0 53 while i < t*d { x2[i] = x[i]; i = i + 1 } 54 x2[0] = x2[0] + (SG_Q / 2) // perturb one input cell 55 let out2: *i64 = sys_mmap(64*8) as *i64 56 k3_stack(x2, wq, wk, wv, wo, w1, w2, SG_L, t, d, dff, out2) 57 var t2: i64 = 0 58 var diff: i64 = 0 59 i = 0 60 while i < t*d { var e: i64 = out2[i] - out[i]; if e < 0 { e = 0 - e } diff = diff + e; i = i + 1 } 61 if diff > (SG_Q / 100) { t2 = 1 } 62 gv_check("T2 CROSS-LAYER AttnRes: input perturbation propagates to the deep output (early layers reachable)" as *u8, t2, ctr) 63 64 // T3: depth-stable (bounded through 4 layers) 65 var t3: i64 = 1 66 i = 0 67 while i < t*d { var av: i64 = out[i]; if av < 0 { av = 0 - av } if av > 1000000000 { t3 = 0 } i = i + 1 } 68 gv_check("T3 DEPTH-STABLE (output bounded through 4 layers, no blowup)" as *u8, t3, ctr) 69 70 // T4: deterministic at depth 71 let outb: *i64 = sys_mmap(64*8) as *i64 72 k3_stack(x, wq, wk, wv, wo, w1, w2, SG_L, t, d, dff, outb) 73 var t4: i64 = 1 74 i = 0 75 while i < t*d { if outb[i] != out[i] { t4 = 0 } i = i + 1 } 76 gv_check("T4 DETERMINISTIC bit-identical at depth (the exceed: float stacks drift + compound)" as *u8, t4, ctr) 77 78 let rc: i64 = gv_verdict("NOFLOAT-K3STACK-GATE" as *u8, ctr, "N-layer K3 stack + Attention Residuals: runs at depth, cross-layer reachable, depth-stable, bit-exact deterministic" as *u8) 79 sys_exit(rc) 80 return rc 81}