code wiki / _hdl_build / nx_js_callcost_probe.nx
nx_js_callcost_probe.nx source
↩ module page · 48 lines · 2979 B
1// nx_js_callcost_probe.nx -- differential CALL-COST breakdown for the last >5x kernel (recursion 6.86x).
2// Kernels isolate: empty call (frame+env base) / 3-arg (arg-copy marginal) / method (receiver+IC) / fib
3// (recursion mix). V8 pins (node v22, warmed best-of-7, this box): T2=1115us T3=1078us T4=1817us T5=543us.
4// All result-verified. expect_exit: 0 license_tier: ORIGINAL
5import "nx_js_vm.nx"
6const K_MAGIC_1000000: i64 = 1000000
7const K_MAGIC_1115: i64 = 1115
8const K_MAGIC_6000000: i64 = 6000000
9const K_MAGIC_1078: i64 = 1078
10const K_MAGIC_2000000: i64 = 2000000
11const K_MAGIC_1817: i64 = 1817
12const K_MAGIC_75025: i64 = 75025
13func w(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
14func nn(v: i64) -> i64 { if v==0 { sys_write(1,"0" as *u8,1); return 0 } var m: i64=v; if m<0 { sys_write(1,"-" as *u8,1); m=0-m } let t: *u8=sys_mmap(24); var k: i64=0; while m>0 { t[k]=(48+(m%10)) as u8; m=m/10; k=k+1 } let o: *u8=sys_mmap(24); var q: i64=k-1; var x: i64=0; while q>=0 { o[x]=t[q]; x=x+1; q=q-1 } sys_write(1,o,x); return 0 }
15func kern(label: *u8, src: *u8, want: i64, v8us: i64) -> i64 {
16 let o: *i64 = sys_mmap(16) as *i64
17 var best: i64 = 0
18 var r: i64 = 0
19 while r < 3 {
20 let t0: i64 = sys_now_us()
21 compile_run(src, o)
22 let t1: i64 = sys_now_us()
23 var us: i64 = t1 - t0
24 if us < 1 { us = 1 }
25 if r == 0 { best = us }
26 if us < best { best = us }
27 r = r + 1
28 }
29 w(" " as *u8); w(label); w(": " as *u8); nn(best); w("us V8=" as *u8); nn(v8us)
30 w("us => " as *u8); nn(best * 100 / v8us / 100); w("." as *u8)
31 let fr: i64 = (best * 100 / v8us) - (best * 100 / v8us / 100) * 100
32 if fr < 10 { w("0" as *u8) }
33 nn(fr); w("x" as *u8)
34 if o[1] == want { w(" ok\n" as *u8); return 1 }
35 w(" WRONG (" as *u8); nn(o[1]); w(")\n" as *u8)
36 return 0
37}
38func main(argc: i64, argv: *i64) -> i64 {
39 w("=== nx_js_callcost_probe: where does the call overhead live? ===\n" as *u8)
40 var pass: i64 = 0
41 pass = pass + kern("T2 empty-call 1M " as *u8, "function f(){return 1;} var s=0; var i=0; while(i<1000000){ s=s+f(); i=i+1; } s" as *u8, K_MAGIC_1000000, K_MAGIC_1115)
42 pass = pass + kern("T3 3-arg call 1M " as *u8, "function g(a,b,c){return a+b+c;} var s=0; var i=0; while(i<1000000){ s=s+g(1,2,3); i=i+1; } s" as *u8, K_MAGIC_6000000, K_MAGIC_1078)
43 pass = pass + kern("T4 method call 1M" as *u8, "function P(){ this.v=2; } P.prototype.m=function(){ return this.v; }; var p=new P(); var s=0; var i=0; while(i<1000000){ s=s+p.m(); i=i+1; } s" as *u8, K_MAGIC_2000000, K_MAGIC_1817)
44 pass = pass + kern("T5 fib(25) " as *u8, "function fib(n){return n<2?n:fib(n-1)+fib(n-2);} fib(25)" as *u8, K_MAGIC_75025, 543)
45 if pass == 4 { w("=== GREEN: 4/4 verified (ratios above = the honest call-cost map) ===\n" as *u8); return 0 }
46 w("=== RED: a kernel returned a wrong value ===\n" as *u8)
47 return 1
48}