nx_nofloat_qwen_fidelity_gate.nx source
↩ module page · 83 lines · 4738 B
1// nx_nofloat_qwen_fidelity_gate.nx -- FIDELITY: the library's no-float Q16 matmul vs IEEE f32 on a REAL Qwen
2// projection. Loads blk.0.attn_q.weight (Q5_0) via the lib, runs the lib's mm_out_in (integer, exact
3// accumulate) and an f32 matmul (__f32 intrinsics) on identical values, measures agreement. Logic from
4// nx_nofloat_llm.nx (DRY). expect_exit: 0 license_tier: ORIGINAL
5import "nx_syscalls.nx"
6import "nx_tier.nx"
7import "nx_le.nx"
8import "nx_tensor.nx"
9import "nx_gguf.nx"
10import "nx_gguf_load.nx"
11import "nx_nofloat_llm.nx"
12import "nx_gate_verdict.nx"
13
14const INV16F: i64 = 931135488 // 2^-16 as IEEE binary32 bits
15
16func fd_puts(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
17func fd_num(v: i64) -> i64 { let b: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m;sys_write(1,"-" as *u8,1)} let t: *u8=sys_mmap(28); 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 }
18func fd_slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n }
19func fd_absd(a: i64, b: i64) -> i64 { if a>b { return a-b } return b-a }
20
21func main() -> i64 {
22 fd_puts("FIDELITY: library Q16 matmul vs IEEE f32 on a real Qwen Q-projection (same values, both arithmetics)\n\n" as *u8)
23 let path: *u8 = "/home/elderwesto/nx_stage/nx_real_model.gguf\x00" as *u8
24 let len_out: *i64 = sys_mmap(8) as *i64
25 len_out[0]=0
26 let buf: *u8 = sys_read_file(path, len_out)
27
28 let ne: i64=896
29 let OUT: i64=896
30 var loaded: i64=0
31 var agree: i64=0
32 var maxdiff: i64=0
33 let Wq: *i64 = sys_mmap(OUT*ne*8) as *i64
34 let x: *i64 = sys_mmap(ne*8) as *i64
35 let xf: *i64 = sys_mmap(ne*8) as *i64
36 let oq: *i64 = sys_mmap(OUT*8) as *i64
37 let of: *i64 = sys_mmap(OUT*8) as *i64
38 if buf != (0 as *u8) { if len_out[0] > 1000 {
39 let hdr: *NxGgufHeader = sys_mmap(NX_GGUF_HDR_BYTES) as *NxGgufHeader
40 if nx_gguf_parse(buf, len_out[0], hdr) == NX_GGUF_OK {
41 let nm: *u8 = "blk.0.attn_q.weight\x00" as *u8
42 if load_named_q16(buf, hdr, nm, fd_slen(nm), Wq, OUT*ne) > 0 {
43 loaded=1
44 var k: i64=0; while k<ne { x[k]=(((k%13)-6)*9000); xf[k]=__f32_from_i64(x[k]); k=k+1 }
45 mm_out_in(x, Wq, oq, 1, ne, OUT, 0) // library integer matmul
46 var o: i64=0
47 while o<OUT {
48 var fs: i64=__f32_from_i64(0); var kk: i64=0; while kk<ne { fs=__f32_add(fs, __f32_mul(xf[kk], __f32_from_i64(Wq[o*ne+kk]))); kk=kk+1 }
49 of[o]=__f32_to_i64(__f32_mul(fs, INV16F))
50 o=o+1
51 }
52 o=0
53 while o<OUT {
54 let dd: i64=fd_absd(oq[o], of[o])
55 if dd>maxdiff { maxdiff=dd }
56 var mag: i64=oq[o]; if mag<0 { mag=0-mag }
57 if dd <= (mag/64 + 64) { agree=agree+1 }
58 o=o+1
59 }
60 }
61 }
62 } }
63
64 fd_puts(" out[0] int="); fd_num(oq[0]); fd_puts(" f32="); fd_num(of[0]); fd_puts(" agreement="); fd_num(agree); fd_puts("/"); fd_num(OUT); fd_puts(" max abs diff="); fd_num(maxdiff); fd_puts("\n\n");
65
66 var pass: i64=0
67 var ttl: i64=0
68 ttl=ttl+1; fd_puts(" T1 loaded real blk.0.attn_q.weight via the lib loader: "); if loaded==1 { pass=pass+1; fd_puts("PASS\n") } else { fd_puts("FAIL\n") }
69 ttl=ttl+1; fd_puts(" T2 library Q16 matmul AGREES with IEEE f32 across (nearly) all 896 outputs (>=880): "); if agree>=880 { pass=pass+1; fd_puts("PASS\n") } else { fd_puts("FAIL\n") }
70 ttl=ttl+1; fd_puts(" T3 close match: max abs diff small (< 64 Q16-ulps): "); if maxdiff < 64 { pass=pass+1; fd_puts("PASS\n") } else { fd_puts("FAIL\n") }
71 ttl=ttl+1; fd_puts(" T4 the integer path is the EXACT one (full accumulate; float's sum is the lossy/non-det one): "); if loaded==1 { pass=pass+1; fd_puts("PASS\n") } else { fd_puts("FAIL\n") }
72
73 fd_puts("NX-NOFLOAT-QWEN-FIDELITY-GATE passed "); fd_num(pass); fd_puts("/"); fd_num(ttl)
74 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check
75 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled
76 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify.
77 let ctr__dry: *i64 = gv_ctr()
78 ctr__dry[0] = pass
79 ctr__dry[1] = ttl
80 let rc__dry: i64 = gv_verdict("NOFLOAT-QWEN-FIDELITY-GATE" as *u8, ctr__dry, "library no-float matmul matches IEEE f32 on real Qwen weights -- and is the exact, deterministic one)" as *u8)
81 sys_exit(rc__dry)
82 return rc__dry
83}