nx_zimage_outproj_verify.nx source
↩ module page · 81 lines · 3089 B
1// nx_zimage_outproj_verify.nx -- SOVEREIGN Z-Image attention sub-piece 2d: output projection, verified.
2// ao_out = ao_pre @ out_w.T ([4,3840] x [3840,3840] -> [4,3840]). Local accumulator (no scratch). Verifies vs oracle.
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
11
12func zop_load(name: *u8, nl: i64, n_floats: i64) -> *u8 {
13 let base: *u8 = "/mnt/c/Users/elder/AppData/Local/Temp/claude/C--Users-elder/7be78b15-304c-449e-afe8-4d5bd7ddaa9c/scratchpad/zblk/" as *u8
14 let path: *u8 = sys_mmap(256)
15 var p: i64 = 0
16 var i: i64 = 0
17 while base[i] != 0 { path[p] = base[i]; p = p + 1; i = i + 1 }
18 i = 0
19 while i < nl { path[p] = name[i]; p = p + 1; i = i + 1 }
20 path[p] = 0x2E; p = p + 1
21 path[p] = 0x66; p = p + 1
22 path[p] = 0x33; p = p + 1
23 path[p] = 0x32; p = p + 1
24 path[p] = 0
25 let fd: i64 = sys_openat_rd(path)
26 if fd < 0 { return 0 as *u8 }
27 let bytes: i64 = n_floats * 4
28 let buf: *u8 = sys_mmap(bytes + 64)
29 var tot: i64 = 0
30 var go: i64 = 1
31 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 } } }
32 sys_close(fd)
33 return buf
34}
35
36func main() -> i64 {
37 let D: i64 = K_MAGIC_3840
38 let NT: i64 = 4
39 let aop: *u8 = zop_load("ao_pre" as *u8, 6, NT * D)
40 let ow: *u8 = zop_load("out_w" as *u8, 5, D * D)
41 let aog: *u8 = zop_load("ao_out" as *u8, 6, NT * D)
42 if (aop as i64) == 0 { return 30 }
43 if (ow as i64) == 0 { return 32 }
44 if (aog as i64) == 0 { return 31 }
45
46 let tolc: i64 = nx_f32_div(nx_i32_to_f32(3), nx_i32_to_f32(100))
47 var fails: i64 = 0
48 var first_bad: i64 = 0 - 1
49
50 var t: i64 = 0
51 while t < NT {
52 var o: i64 = 0
53 while o < D {
54 var sum: i64 = 0
55 let rowb: i64 = o * D * 4
56 let tb: i64 = t * D * 4
57 var i: i64 = 0
58 while i < D {
59 sum = nx_f32_add(sum, nx_f32_mul(nx_le_read_u32(aop, tb + i * 4), nx_le_read_u32(ow, rowb + i * 4)))
60 i = i + 1
61 }
62 let g: i64 = nx_le_read_u32(aog, (t * D + o) * 4)
63 var thr: i64 = tolc
64 let ag: i64 = g & 0x7FFFFFFF
65 if nx_f32_lt(thr, nx_f32_mul(tolc, ag)) == 1 { thr = nx_f32_mul(tolc, ag) }
66 if (nx_f32_sub(sum, g) & 0x7FFFFFFF) >= thr { fails = fails + 1; if first_bad < 0 { first_bad = t * D + o } }
67 o = o + 1
68 }
69 t = t + 1
70 }
71
72 let ofd: i64 = sys_openat_wr("/tmp/zop.txt" as *u8, 0x1a4)
73 if ofd >= 0 {
74 let dec: *u8 = sys_mmap(32)
75 sys_write(ofd, "fails=" as *u8, 6); let n1: i64 = nx_strconv_format_i64(fails, dec); sys_write(ofd, dec, n1)
76 sys_write(ofd, " first_bad=" as *u8, 11); let n2: i64 = nx_strconv_format_i64(first_bad, dec); sys_write(ofd, dec, n2)
77 sys_write(ofd, "\n" as *u8, 1); sys_close(ofd)
78 }
79 if fails > 0 { return 20 }
80 return 0
81}