nx_zimage_ffn_norm_verify.nx source
↩ module page · 82 lines · 3348 B
1// nx_zimage_ffn_norm_verify.nx -- SOVEREIGN Z-Image FFN sub-piece a: pre-FFN norm, verified vs oracle.
2// h = rmsnorm(x_after_attn, fn1) * (1 + sl) [per-token over 3840]. Verifies vs dumped h_ff.
3// license_tier: ORIGINAL
4import "nx_syscalls.nx"
5import "nx_le.nx"
6import "nx_f32.nx"
7import "nx_f32_div.nx"
8import "nx_f32_cvt.nx"
9import "nx_strconv.nx"
10const K_MAGIC_3840: i64 = 3840
11const K_MAGIC_100000: i64 = 100000
12
13func zfn_load(name: *u8, nl: i64, n_floats: i64) -> *u8 {
14 let base: *u8 = "/mnt/c/Users/elder/AppData/Local/Temp/claude/C--Users-elder/7be78b15-304c-449e-afe8-4d5bd7ddaa9c/scratchpad/zblk/" as *u8
15 let path: *u8 = sys_mmap(256)
16 var p: i64 = 0
17 var i: i64 = 0
18 while base[i] != 0 { path[p] = base[i]; p = p + 1; i = i + 1 }
19 i = 0
20 while i < nl { path[p] = name[i]; p = p + 1; i = i + 1 }
21 path[p] = 0x2E; p = p + 1
22 path[p] = 0x66; p = p + 1
23 path[p] = 0x33; p = p + 1
24 path[p] = 0x32; p = p + 1
25 path[p] = 0
26 let fd: i64 = sys_openat_rd(path)
27 if fd < 0 { return 0 as *u8 }
28 let bytes: i64 = n_floats * 4
29 let buf: *u8 = sys_mmap(bytes + 64)
30 var tot: i64 = 0
31 var go: i64 = 1
32 while go == 1 { let r: i64 = sys_read(fd, ((buf as i64) + tot) as *u8, bytes - tot); if r <= 0 { go = 0 } else { tot = tot + r; if tot >= bytes { go = 0 } } }
33 sys_close(fd)
34 return buf
35}
36
37func main() -> i64 {
38 let D: i64 = K_MAGIC_3840
39 let NT: i64 = 4
40 let x: *u8 = zfn_load("x_after_attn" as *u8, 12, NT * D)
41 let fn1: *u8 = zfn_load("fn1" as *u8, 3, D)
42 let sl: *u8 = zfn_load("sl" as *u8, 2, D)
43 let hg: *u8 = zfn_load("h_ff" as *u8, 4, NT * D)
44 if (x as i64) == 0 { return 30 }
45 if (hg as i64) == 0 { return 31 }
46
47 let eps: i64 = nx_f32_div(nx_i32_to_f32(1), nx_i32_to_f32(K_MAGIC_100000))
48 let one: i64 = nx_i32_to_f32(1)
49 let tolc: i64 = nx_f32_div(nx_i32_to_f32(3), nx_i32_to_f32(100))
50 var fails: i64 = 0
51 var first_bad: i64 = 0 - 1
52
53 var t: i64 = 0
54 while t < NT {
55 var ss: i64 = 0
56 var i: i64 = 0
57 while i < D { let v: i64 = nx_le_read_u32(x, (t * D + i) * 4); ss = nx_f32_add(ss, nx_f32_mul(v, v)); i = i + 1 }
58 let rms: i64 = nx_f32_sqrt(nx_f32_add(nx_f32_div(ss, nx_i32_to_f32(D)), eps))
59 i = 0
60 while i < D {
61 let xv: i64 = nx_le_read_u32(x, (t * D + i) * 4)
62 let hv: i64 = nx_f32_mul(nx_f32_mul(nx_f32_div(xv, rms), nx_le_read_u32(fn1, i * 4)), nx_f32_add(one, nx_le_read_u32(sl, i * 4)))
63 let g: i64 = nx_le_read_u32(hg, (t * D + i) * 4)
64 var thr: i64 = tolc
65 let ag: i64 = g & 0x7FFFFFFF
66 if nx_f32_lt(thr, nx_f32_mul(tolc, ag)) == 1 { thr = nx_f32_mul(tolc, ag) }
67 if (nx_f32_sub(hv, g) & 0x7FFFFFFF) >= thr { fails = fails + 1; if first_bad < 0 { first_bad = t * D + i } }
68 i = i + 1
69 }
70 t = t + 1
71 }
72
73 let ofd: i64 = sys_openat_wr("/tmp/zfn.txt" as *u8, 0x1a4)
74 if ofd >= 0 {
75 let dec: *u8 = sys_mmap(32)
76 sys_write(ofd, "fails=" as *u8, 6); let n1: i64 = nx_strconv_format_i64(fails, dec); sys_write(ofd, dec, n1)
77 sys_write(ofd, " first_bad=" as *u8, 11); let n2: i64 = nx_strconv_format_i64(first_bad, dec); sys_write(ofd, dec, n2)
78 sys_write(ofd, "\n" as *u8, 1); sys_close(ofd)
79 }
80 if fails > 0 { return 20 }
81 return 0
82}