code wiki / _hdl_build / nx_f32_qwen2_train_gate.nx
nx_f32_qwen2_train_gate.nx
buildroot/runtime/_hdl_build/nx_f32_qwen2_train_gate.nx
dependencies 4 imports · 0 importers
imports: nx_gate_gn.nxnx_gate_base.nxnx_autograd_tensor.nxnx_syscalls.nx
imported by: nobody (leaf or entry point)
call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown
structs
| none |
consts
| 15 | const VMAX: i64 = 40 |
| 16 | const DM: i64 = 16 // perfect square -> trainer 1/sqrt(16)=0.25 EXACTLY equals inference 65536/isqrt(16) |
| 17 | const HF: i64 = 32 |
| 18 | const NLAYERS: i64 = 2 |
| 19 | const TMAX: i64 = 64 |
| 20 | const EPOCHS: i64 = 1800 |
| 21 | const NODES: i64 = 220 |
| 22 | const CELLS: i64 = 300000 |
functions
| 24 | func grow(name: *u8, ok: i64) -> i64 { if ok==1 { gw(" PASS " as *u8) } else { gw(" FAIL " as *u8) } gw(name); gw(" calls 1: gw |
| 26 | func gm(x: i64) -> i64 { return gn(ta_f32_to_milli(x)) } |
| 27 | func f32c(a: i64, b: i64) -> i64 { return nx_f32_div(nx_i32_to_f32(a), nx_i32_to_f32(b)) } called by 1: main |
| 28 | func f32_absx(x: i64) -> i64 { return x & 0x7FFFFFFF } |
| 29 | func f32_lex(x: i64, y: i64) -> i64 { if nx_f32_gt(x,y)==1 { return 0 } return 1 } |
| 30 | func f32_sqrtx(x: i64) -> i64 { if (x & 0x7FFFFFFF)==0 { return nx_i32_to_f32(0) } var y: i64=x; var i: i64=0; while i<16 { y=nx_f32_div(nx_f32_add(y, nx_f32_div(x,y)), nx_i32_to_f32(2)); i=i+1 } return y } |
| 33 | func build_rope(COS: *i64, SIN: *i64, ROT: *i64) -> i64 |
| 45 | func rope_node(tape: *i64, vals: *i64, st: *i64, xn: i64, COSn: i64, SINn: i64, ROTn: i64) -> i64 |
| 49 | func tile_leaf(tape: *i64, vals: *i64, st: *i64, param: *i64, T: i64, width: i64, scratch: *i64) -> i64 |
| 54 | func reduce_tiled(tape: *i64, grads: *i64, node: i64, T: i64, width: i64, dst: *i64) -> i64 |
| 61 | func rmsnorm_gamma(tape: *i64, vals: *i64, st: *i64, x: i64, gamma: *i64, T: i64, scratch: *i64, gv: *i64, gi: i64) -> i64 |
| 69 | func LB(L: i64) -> i64 { return 3+L*13 } |
| 71 | func build_fwd(tape: *i64, vals: *i64, st: *i64, M: *i64, toks: *i64, T: i64, vv: i64, scale: i64, Xsrc: *i64, COS: *i64, SIN: *i64, ROT: *i64, tsc: *i64, lv: *i64, gv: *i64, bvn: *i64) -> i64 |
| 105 | func loss_of(tape: *i64, vals: *i64, M: *i64, toks: *i64, tgt: *i64, T: i64, vv: i64, scale: i64, Xsrc: *i64, COS: *i64, SIN: *i64, ROT: *i64, tsc: *i64, lv: *i64, gv: *i64, bvn: *i64) -> i64 |
| 110 | func det_fill(dst: *i64, n: i64, seed: i64) -> i64 { var i: i64=0; while i<n { let s: i64=(((i*2654435761)+seed) % 13) - 6; dst[i]=f32c(s, 100); i=i+1 } return 0 } |
| 111 | func argmax_row(vals: *i64, tape: *i64, lg: i64, row: i64, vv: i64) -> i64 { let off: i64=tape[7*lg+5]+row*vv; var bi: i64=0; var o: i64=1; while o<vv { if nx_f32_gt(vals[off+o], vals[off+bi])==1 { bi=o } o=o+1 } return bi } |
| 112 | func adam_step(P: *i64, Gd: *i64, Mo: *i64, Vo: *i64, cnt: i64, lr: i64, b1: i64, b2: i64, bc1: i64, bc2: i64, aeps: i64) -> i64 |
| 120 | func w_u8(b: *u8, p: *i64, v: i64) -> i64 { b[p[0]]=(v & 0xff) as u8; p[0]=p[0]+1; return 0 } |
| 121 | func w_u32(b: *u8, p: *i64, v: i64) -> i64 { w_u8(b,p,v); w_u8(b,p,v>>8); w_u8(b,p,v>>16); w_u8(b,p,v>>24); return 0 } |
| 122 | func w_u64(b: *u8, p: *i64, v: i64) -> i64 { w_u32(b,p,v & 0xffffffff); w_u32(b,p,(v>>32) & 0xffffffff); return 0 } |
| 123 | func w_str(b: *u8, p: *i64, s: *u8, n: i64) -> i64 { w_u64(b,p,n); var i: i64=0; while i<n { b[p[0]]=s[i]; p[0]=p[0]+1; i=i+1 } return 0 } called by 1: export_gguf |
| 124 | func w_align(b: *u8, p: *i64) -> i64 { while (p[0] % 32)!=0 { b[p[0]]=0 as u8; p[0]=p[0]+1 } return 0 } |
| 125 | func w_meta_u32(b: *u8, p: *i64, key: *u8, kl: i64, v: i64) -> i64 { w_str(b,p,key,kl); w_u32(b,p,4); w_u32(b,p,v); return 0 } called by 1: setspec |
| 126 | func slen2(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n } |
| 128 | func transpose(src: *i64, dst: *i64, in_dim: i64, out_dim: i64) -> i64 { var i: i64=0; while i<in_dim { var j: i64=0; while j<out_dim { dst[j*in_dim+i]=src[i*out_dim+j]; j=j+1 } i=i+1 } return 0 } |
| 130 | func setspec(ts: *i64, idx: i64, name: *u8, ndims: i64, d0: i64, d1: i64, data: *i64, ncells: i64) -> i64 |
| 133 | func blkname(L: i64, suffix: *u8) -> *u8 { let o: *u8=sys_mmap(48); o[0]=98 as u8; o[1]=108 as u8; o[2]=107 as u8; o[3]=46 as u8; var p: i64=4; if L==0 { o[p]=48 as u8; p=p+1 } else { let t: *u8=sys_mmap(16); var k: i64=0; var m: i64=L; while m>0 { t[k]=(48+(m%10)) as u8; m=m/10; k=k+1 } var i: i64=k-1; while i>=0 { o[p]=t[i]; p=p+1; i=i-1 } } var j: i64=0; while suffix[j]!=(0 as u8) { o[p]=suffix[j]; p=p+1; j=j+1 } o[p]=0 as u8; return o } |
| 135 | func export_gguf(path: *u8, M: *i64, vv: i64) -> i64 |
| 186 | func main() -> i64 |