Files
VoxelForge/Standalone/Research/WorldAssemblerM3/Linux117/REPORT.md
T
Fr0zkaandClaude Opus 5.5 c2b8d39573 research: smooth-tunnel regression census L109 vs L115 (L117, measurement only)
Near +18..+32% is ~95% in passage-feature tiles (12-17% of tiles): sweep pairs 2.3-2.6x, exact
fallbacks +71..+101%, segment visits 3-4x, plus an untagged cache/prepare/smooth-min bucket
(+0.47 s/view). Skips, triangle counts (-0.1..-1.4%), skirts, normals, far shells ruled out.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
2026-10-30 03:40:37 +01:00

70 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# L117 — L109 vs L115 smooth tunnel
## Run and closure
Compared snapshot binaries from L109 commit `5ea01988` and L115 commit `f403af1f`; the worktree remained on `wip/l111-halfpipe-spline` at `89504ecc`. Direct readiness used five interleaved measured runs per camera, binary, and worker setting (8 and 12 workers), after one warm-up. L77 sampling was off during these runs; direct LOD timers and mesh coverage were on. Four fixed cameras were reused throughout.
The L77 route-by-phase census used one worker so its grid-fill estimate could close against direct `mc_grid_ms` timers. Each binary has 16 SW runs and 4 runs per other stratum. Pooled closure was 99.87–104.44%:
| L77 grid-fill closure | SW | FI | TN | VS |
| --- | ---: | ---: | ---: | ---: |
| L109 | 100.66% | 104.44% | 102.31% | 102.24% |
| L115 | 100.89% | 101.19% | 100.57% | 99.87% |
The W8 L77 sampler passed its health check, but its grid-fill closure missed 99% in FI, TN, and VS, plus one SW/L109 replicate at 98.6%, because helper grid-fill threads were not tagged. I use the closed W1 census for phase seconds and the W8 runs for direct per-tile timers and the L87 tile timeline. Timeline events were present in all 16 W8 profiles. Start gates recorded one-minute load below 0.9 and about 97–99% CPU idle; snapshots are in `Saved/Linux/l117`. Every headless command used `taskset -c 0-11 prlimit --as=6442450944` and a 29-minute timeout. No run reached the timeout.
## Readiness
Five-run medians, in seconds. Near is LOD0–2 readiness; whole is full-view readiness.
| Stratum | W8 near | W8 whole | W12 near | W12 whole |
| --- | --- | --- | --- | --- |
| SW | 0.705→0.864 (+22.6%) | 1.666→1.882 (+13.0%) | 0.729→0.886 (+21.4%) | 1.664→1.838 (+10.5%) |
| FI | 0.951→1.256 (+32.1%) | 1.844→2.154 (+16.8%) | 0.938→1.186 (+26.5%) | 1.812→2.077 (+14.6%) |
| TN | 1.013→1.256 (+24.0%) | 1.916→2.189 (+14.2%) | 1.003→1.178 (+17.5%) | 1.828→2.038 (+11.5%) |
| VS | 0.854→1.031 (+20.8%) | 1.818→2.016 (+10.9%) | 0.788→0.930 (+18.0%) | 1.665→1.824 (+9.6%) |
## Where the extra worker time lands
The closed W1 census measured a mean LOD0–2 worker-CPU increase of **0.873 s/view**. The three largest, disjoint L77 route×phase buckets are:
| Route | Phase | Added worker CPU | Share of net increase | Evidence and best next fix |
| --- | --- | ---: | ---: | --- |
| `unknown` | `other` | +0.473 s/view | 54% | This is the largest unresolved bucket. Samples include cache `TryRead`, `prepareSweptTubeBase`, `SmoothMinDistance`, `CachedColumn`, and `Heightfield2D::point`. Add finer timers/tags around those calls, then optimize the confirmed hot path. |
| `packed_scalar` | `passages` | +0.296 s/view | 34% | Mostly FI (+0.634 s) and TN (+0.481 s). Target sweep misses and costly exact route fallbacks/segment visits; pair pruning alone was not enough in L116. |
| `native` | `passages` | +0.095 s/view | 11% | Concentrated in SW (+0.382 s). Check native-route sweep coverage and avoid repeated exact segment visits on misses. |
`analytic_scalar|passages` adds another 0.079 s/view, while other phase changes mostly offset it. At phase level, `passages` is +0.470 s/view and `other` is +0.473; `base_field` is −0.018, dispatch is −0.052, composition bands are +0.001, and support is exactly zero in both builds. The top-three shares are rounded; do not add these to the separate tile-region measurements below.
W8 passage-composer counters support the route-sweep diagnosis. Values are mean counts per view for LOD0–2, averaged over two profiles:
| Stratum | Sweep pairs L109→L115 | Exact fallbacks | Segment visits |
| --- | ---: | ---: | ---: |
| SW | 3.36M→7.56M (2.25×) | 0.241M→0.413M | 1.19M→3.41M |
| FI | 6.19M→16.22M (2.62×) | 0.369M→0.719M | 1.91M→7.60M |
| TN | 6.15M→15.52M (2.52×) | 0.315M→0.634M | 1.66M→6.88M |
| VS | 4.09M→9.63M (2.35×) | 0.074M→0.131M | 0.48M→1.41M |
Exact fallbacks rose 71–101% and segment visits 185–314%. By comparison, detail/shell samples stayed within −4% to +4%, base samples fell 11–26%, and grid samples ranged from −2% to +3%. The `sweep_lookups` counter is prepared-sweep cache access, not an h(s) lookup count; it fell 3–27%. L77 does not separately count or time floor-profile h(s) lookups, nor does it time the half-pipe shell terms. Detail-shell sample counts were flat while `relief_field_calls` rose 15–49%, so their seconds cannot be separated here.
## Tile, meshing, and bounds checks
The W8 tile timeline localizes the slowdown. Passage/route-feature tiles are 174/212/200/182 of 1,408/1,216/1,344/1,344 matched LOD0–2 tiles (SW/FI/TN/VS). Their summed worker time rose by **1.087/1.902/1.678/0.937 s/view**; the non-passage tiles rose only **0.075/0.063/0.035/0.109 s/view**. Across strata, passage-feature tiles account for about 95% of the +1.47 s/view W8 tile-worker delta. Direct `mc_grid_ms` rose by 0.543 s/view on average, about 91% of that increase landing in passage-feature tiles. Cell-class time was flat, gradient/normal time fell by about 0.094 s/view, interpolation rose about 0.069 s/view, and skirt time rose about 0.036 s/view on average.
Uniform-proof skip counts changed little (LOD0: SW 367→374, FI 255→265, TN 276→286, VS 233→223; LOD1: 295→295, 229→229, 298→297, 296→291; LOD2 unchanged at 266, 106, 152, 128). There is no across-the-board shift to more fully sampled tiles. L77's separate W1 stage estimate shows grid fill +0.355 worker-s/view, marching cubes −0.009, skirts +0.022, and refine +0.020.
Triangle counts also rule out extra output work. Each cell is L109→L115:
| Stratum | LOD0 triangles | LOD1 triangles | LOD2 triangles | All-LOD triangles |
| --- | ---: | ---: | ---: | ---: |
| SW | 389,676→360,833 | 364,242→341,110 | 131,750→131,194 | 3,890,601→3,837,772 (−1.36%) |
| FI | 834,490→794,062 | 359,970→342,432 | 71,166→70,830 | 4,186,439→4,127,159 (−1.42%) |
| TN | 822,010→792,156 | 340,124→333,178 | 152,672→152,636 | 4,089,688→4,052,874 (−0.90%) |
| VS | 670,794→668,454 | 304,140→304,164 | 170,766→170,442 | 3,779,040→3,776,400 (−0.07%) |
LOD0–2 skirt triangles fell in every stratum: SW 196,602→162,004; FI 141,980→97,126; TN 133,534→101,044; VS 85,132→82,414. In the max-level-8 cost pass, LOD3–8 far-shell triangles were 9,274 in both versions for every camera; shell timer changes ranged from −22 to +17 ms with no consistent increase.
**Conclusion:** the 20–30% near-readiness regression is concentrated in passage-feature tile field work. The strongest internal signal is more exact fallback and segment-visit work, plus a large unresolved cache/preparation bucket. Skips, surface/ skirt output, normals, and far shells do not account for it. No generation code was changed in L117; the suggested work above is diagnostic/fix direction only.
Logs, profiles, and summaries are under `Saved/Linux/l117/`.