code wiki / _hdl_build / nx_f32_attn_charlm_gate.nx

nx_f32_attn_charlm_gate.nx

buildroot/runtime/_hdl_build/nx_f32_attn_charlm_gate.nx

20067 B260 linesdepth 6pulls 17 transitivereach 0 importersview sourcekind gate/prooftopic f32
docsdependenciesstructsconstsfunctions

dependencies 4 imports · 0 importers

nx_gate_gn.nx nx_gate_base.nx nx_autograd_tensor.nx nx_syscalls.nx nx_f32_attn_charlm_gate.nx

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

main gw sys_write nx_i32_to_f32 f32c nx_f32_div nx_f32_classify nx_f32_exp_field nx_f32_mant_field nx_f32_sign nx_f32_mant_field ↻ nx_f32_exp_field ↻ nx_i32_to_f32 ↻ sys_mmap sys_write ↻ gn det_fill f32c ↻ build_fwd nx_f32_add nx_f32_classify ↻ nx_f32_sign ↻ nx_f32_mant_field ↻ nx_f32_exp_field ↻ ta_leaf ta_new ta_matmul ta_new ↻ ta_matmul_nt ta_new ↻ ta_cmul ta_new ↻ nx_f32_mul nx_f32_classify ↻ nx_f32_sign ↻ nx_f32_mant_field ↻ nx_f32_exp_field ↻ ta_softmax_rows ta_new ↻ nx_f32_gt

structs

none

consts

22const VMAX: i64 = 40
23const DM: i64 = 16 // model dim
24const HF: i64 = 32 // FFN hidden
25const TMAX: i64 = 64 // max sequence (tape sizing)
26const EPOCHS: i64 = 1600
27const NODES: i64 = 64 // tape node cap
28const CELLS: i64 = 40000 // tape value-arena cap (cells)

functions

30func grow(name: *u8, ok: i64) -> i64 { if ok==1 { gw(" PASS " as *u8) } else { gw(" FAIL " as *u8) } gw(name); gw("
calls 1: gw
32func gm(x: i64) -> i64 { return gn(ta_f32_to_milli(x)) }
33func f32c(num: i64, den: i64) -> i64 { return nx_f32_div(nx_i32_to_f32(num), nx_i32_to_f32(den)) }
called by 1: main
34func f32_absx(x: i64) -> i64 { return x & 0x7FFFFFFF }
called by 1: main calls 1: nx_f32_gt
35func f32_lex(x: i64, y: i64) -> i64 { if nx_f32_gt(x,y)==1 { return 0 } return 1 }
36func 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 }
40func build_fwd(tape: *i64, vals: *i64, st: *i64, M: *i64, toks: *i64, T: i64, vv: i64, scale: i64, Xsrc: *i64) -> i64
72func loss_of(tape: *i64, vals: *i64, M: *i64, toks: *i64, tgt: *i64, T: i64, vv: i64, scale: i64, Xsrc: *i64) -> i64
79func det_fill(dst: *i64, n: i64, seed: i64) -> i64 { var i: i64=0; while i<n { let s: i64=(((i*2654435761)+seed) % 15) - 7; dst[i]=f32c(s, 90); i=i+1 } return 0 }
called by 1: main calls 1: nx_f32_gt
80func 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 }
83func 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
98func wr_f32(fd: i64, v: i64) -> i64 { let b: *u8=sys_mmap(8); b[0]=(v & 0xff) as u8; b[1]=((v>>8)&0xff) as u8; b[2]=((v>>16)&0xff) as u8; b[3]=((v>>24)&0xff) as u8; sys_write(fd, b, 4); return 0 }
called by 1: main calls 1: wr_f32
99func save_buf(fd: i64, P: *i64, n: i64) -> i64 { var i: i64=0; while i<n { wr_f32(fd, P[i]); i=i+1 } return 0 }
called by 1: main
100func load_buf(buf: *u8, off: i64, P: *i64, n: i64) -> i64 { var i: i64=0; var o: i64=off; while i<n { P[i]=(buf[o]&0xff)|((buf[o+1]&0xff)<<8)|((buf[o+2]&0xff)<<16)|((buf[o+3]&0xff)<<24); o=o+4; i=i+1 } return 0 }
102func main() -> i64