code wiki / _hdl_build / _ixprof.nx

_ixprof.nx source

↩ module page · 126 lines · 4040 B

1// _ixprof.nx -- one-shot index-phase profiler for the IM6b index loss 2// (localize-before-optimizing law). Builds the same writer the race worker 3// builds, then times ss_build_keys / ss_build_terms / full ss_commit 4// separately. license_tier: ORIGINAL 5import "nx_syscalls.nx" 6import "nx_seg_store.nx" 7 8func xp_p(s: *u8) -> i64 { 9 var n: i64 = 0 10 while s[n] != (0 as u8) { n = n + 1 } 11 sys_write(1, s, n) 12 return 0 13} 14 15func xp_pn(v: i64) -> i64 { 16 let bb: *u8 = sys_mmap(28) 17 var m: i64 = v 18 if m < 0 { m = 0 - m; sys_write(1, "-" as *u8, 1) } 19 let t: *u8 = sys_mmap(28) 20 var k: i64 = 0 21 if m == 0 { t[0] = 48 as u8; k = 1 } 22 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 23 var i: i64 = 0 24 while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } 25 sys_write(1, bb, k) 26 return 0 27} 28 29func xp_parse(path: *u8, pool: *u8, pooloff: *i64, ptrs: *i64, lens: *i64, n0: i64) -> i64 { 30 let szp: *i64 = sys_mmap(16) as *i64 31 let b: *u8 = ss_readall(path, szp) 32 let sz: i64 = szp[0] 33 if sz <= 0 { return 0 - 1 } 34 var n: i64 = n0 35 var i: i64 = 0 36 while i < sz { 37 var e: i64 = i 38 while e < sz { 39 if b[e] == (10 as u8) { e = e + 1000000000 } else { e = e + 1 } 40 } 41 var lend: i64 = e 42 if e >= 1000000000 { lend = e - 1000000000 } 43 let llen: i64 = lend - i 44 if llen > 0 { 45 var dup: i64 = 0 46 var s: i64 = 0 47 while s < n { 48 if dup == 0 { if lens[s] == llen { 49 var eq: i64 = 1 50 let sp: *u8 = ptrs[s] as *u8 51 var x: i64 = 0 52 while x < llen { 53 if eq == 1 { if sp[x] != b[i + x] { eq = 0; x = llen } } 54 x = x + 1 55 } 56 if eq == 1 { dup = 1 } 57 } } 58 s = s + 1 59 } 60 if dup == 0 { 61 if n >= 4000 { return 0 - 2 } 62 let dst: *u8 = (pool as i64 + pooloff[0]) as *u8 63 var t: i64 = 0 64 while t < llen { dst[t] = b[i + t]; t = t + 1 } 65 ptrs[n] = dst as i64 66 lens[n] = llen 67 pooloff[0] = pooloff[0] + llen 68 n = n + 1 69 } 70 } 71 i = lend + 1 72 } 73 return n 74} 75 76func main() -> i64 { 77 let pool: *u8 = sys_mmap(2097152) 78 let pooloff: *i64 = sys_mmap(16) as *i64 79 let ptrs: *i64 = sys_mmap(8 * 4008) as *i64 80 let lens: *i64 = sys_mmap(8 * 4008) as *i64 81 var n: i64 = xp_parse("knowledge/status/pm_plan_durable.log" as *u8, pool, pooloff, ptrs, lens, 0) 82 n = xp_parse("knowledge/status/cap_registry_durable.log" as *u8, pool, pooloff, ptrs, lens, n) 83 let kbuf: *u8 = sys_mmap(64) 84 let w: *i64 = ss_begin() 85 var d: i64 = 0 86 let ta: i64 = sys_now_us() 87 while d < n { 88 var ko: i64 = 0 89 ko = ss_cat(kbuf, ko, "d:" as *u8) 90 ko = ss_catn(kbuf, ko, d) 91 kbuf[ko] = 0 as u8 92 if ss_add(w, 1, kbuf, ptrs[d] as *u8, lens[d]) != 0 { return 1 } 93 d = d + 1 94 } 95 let tb: i64 = sys_now_us() 96 let kblob: *u8 = sys_mmap(w[1] * 3 + 65536) 97 let kn: i64 = ss_build_keys(w, kblob) 98 let tc: i64 = sys_now_us() 99 let tblob: *u8 = sys_mmap(w[1] * 8 + 65536) 100 let pblob: *u8 = sys_mmap(w[1] * 8 + 65536) 101 let louts: *i64 = sys_mmap(16) as *i64 102 let tr: i64 = ss_build_terms(w, tblob, pblob, louts) 103 let td: i64 = sys_now_us() 104 let crc: i64 = ss_commit("/tmp/ixprof-" as *u8, w, sys_now_us()) 105 let te: i64 = sys_now_us() 106 xp_p("IXPROF docs=" as *u8) 107 xp_pn(n) 108 xp_p(" wbytes=" as *u8) 109 xp_pn(w[1]) 110 xp_p(" add_us=" as *u8) 111 xp_pn(tb - ta) 112 xp_p(" keys_us=" as *u8) 113 xp_pn(tc - tb) 114 xp_p(" terms_us=" as *u8) 115 xp_pn(td - tc) 116 xp_p(" commit_us=" as *u8) 117 xp_pn(te - td) 118 xp_p(" klen=" as *u8) 119 xp_pn(kn) 120 xp_p(" trc=" as *u8) 121 xp_pn(tr) 122 xp_p(" crc=" as *u8) 123 xp_pn(crc) 124 xp_p("\n" as *u8) 125 return 0 126}