code wiki / _hdl_build / nx_frame_budget_gate.nx
nx_frame_budget_gate.nx source
↩ module page · 61 lines · 3729 B
1// nx_frame_budget_gate.nx -- proves P3 floor-device budget end-to-end: same 20-tri scene as nx_cull_lod,
2// run through culling to get real work-units, then checked against a FLOOR-DEVICE frame budget (30fps,
3// slow 500us/work-unit, 5000us sim overhead). Brute-force (80 units) BLOWS the budget; culled+LOD (24
4// units) FITS with headroom. NEG-CONTROL: an over-heavy workload must NOT fit (fb_fits not always 1).
5// GREEN only if all hold. license_tier: ORIGINAL expect_exit: 0
6import "nx_syscalls.nx"
7import "nx_cull_lod.nx"
8import "nx_frame_budget.nx"
9
10func bw(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
11func bn(v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m;sys_write(1,"-" as *u8,1)} let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48 as u8;k=1} while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1} var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1} sys_write(1,bb,k); return 0 }
12
13func main() -> i64 {
14 let W: i64 = 100
15 let FAR: i64 = 100
16 let MID: i64 = 50
17 let T: i64 = 20
18 let nz: *i64 = sys_mmap(8 * 24) as *i64
19 let dist: *i64 = sys_mmap(8 * 24) as *i64
20 let sx: *i64 = sys_mmap(8 * 24) as *i64
21 var i: i64 = 0
22 while i < T {
23 if i < 4 { nz[i]=1; dist[i]=10; sx[i]=50 }
24 else { if i < 8 { nz[i]=1; dist[i]=60; sx[i]=50 }
25 else { if i < 12{ nz[i]=1; dist[i]=200; sx[i]=50 }
26 else { if i < 16{ nz[i]=0 - 1; dist[i]=10; sx[i]=50 }
27 else { nz[i]=1; dist[i]=10; sx[i]=0 - 5 } } } }
28 i = i + 1
29 }
30
31 let work: i64 = cl_work(nz, dist, sx, T, FAR, W, MID) // culled+LOD = 24
32 let brute: i64 = cl_brute(T) // 80
33
34 // FLOOR DEVICE profile: 30 fps target, 500us per render work-unit, 5000us sim overhead
35 let FPS: i64 = 30
36 let PUC: i64 = 500
37 let OVR: i64 = 5000
38 let budget: i64 = fb_budget_us(FPS) // 33333 us
39 let brute_cost: i64 = fb_frame_cost_us(brute, PUC, OVR) // 80*500+5000 = 45000
40 let culled_cost: i64 = fb_frame_cost_us(work, PUC, OVR)// 24*500+5000 = 17000
41
42 var pass: i64 = 0
43 var total: i64 = 0
44
45 total=total+1; if work==24 { pass=pass+1 } else { bw("F0 FAIL work="); bn(work); bw("\n") }
46 total=total+1; if budget==33333 { pass=pass+1 } else { bw("F1 FAIL budget="); bn(budget); bw("\n") }
47 total=total+1; if fb_fits(brute_cost, budget)==0 { pass=pass+1 } else { bw("F2 FAIL brute should BLOW budget\n") } // brute does NOT fit
48 total=total+1; if fb_fits(culled_cost, budget)==1 { pass=pass+1 } else { bw("F3 FAIL culled should FIT\n") } // culled fits
49 total=total+1; if fb_headroom_us(culled_cost, budget) > 0 { pass=pass+1 } else { bw("F4 FAIL no headroom\n") }
50 // NEG-CONTROL: a heavy 200-unit workload must NOT fit -> proves fb_fits is honest
51 total=total+1; if fb_fits(fb_frame_cost_us(200, PUC, OVR), budget)==0 { pass=pass+1 } else { bw("F5 FAIL heavy workload wrongly fit\n") }
52
53 bw("=== FLOOR-DEVICE frame budget (30fps, 500us/unit, 5000us sim) ===\n")
54 bw(" budget="); bn(budget); bw("us\n")
55 bw(" brute work="); bn(brute); bw(" -> cost="); bn(brute_cost); bw("us FITS="); if fb_fits(brute_cost,budget)==1 { bw("yes") } else { bw("NO (blows budget)") } bw("\n")
56 bw(" culled work="); bn(work); bw(" -> cost="); bn(culled_cost); bw("us FITS="); if fb_fits(culled_cost,budget)==1 { bw("YES") } else { bw("no") } bw(" headroom="); bn(fb_headroom_us(culled_cost,budget)); bw("us\n")
57 bw("FRAME-BUDGET "); bn(pass); bw("/"); bn(total); bw("\n")
58 if pass == total { bw("FRAME-BUDGET ALL-PASS (culling brings the floor device under frame budget; measured)\n"); sys_exit(0) }
59 sys_exit(1)
60 return 1
61}