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}