W12 L1 view: tile work 17.3 worker-s finishes 4 ms from ideal 12-way scaling; the remaining ~0.28 s is startup (shape compile 215 ms). Largest lever: LOD1 density-grid fill (3.35 worker-s; proof blocks are gated to steps 1 and 8). LOD6's 4x columns = far connector-shell repair (1.38 worker-s). No code committed: the diagnostic instrumentation stays uncommitted for L9. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CSFYgsdW8ejZSyiMf4qRSX
7.8 KiB
Linux8: work remaining after the shared cache
Per-LOD profile
W12 work and stage times below are medians of five interleaved timing runs. Cache columns are call counts (worker-local hit / shared hit / shared miss); cache outcomes were not timed separately. Unique XY per tile is the median across three W12 coordinate-capture runs. Skirt time needs the optional mesher timer, so those values come from the final gated profile; mesh assembly is the five-run median. Stage timers do not add exactly to worker time because they omit classification and other work, and some are inclusive of column computation.
| LOD | Tiles | Work (s) | Columns (ms) | MC (ms) | Ground/cap (ms) | Far shell (ms) | Skirt/assembly (ms) | Samples/tile | Local/shared/miss calls | Unique XY/tile |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 512 | 2.649 | 462 | 1,348 | 0/0 | 0.09 | 281/80 | 10,383.8 | 9.400M/405k/136k | 265 |
| 1 | 448 | 4.064 | 309 | 3,487 | 0/0 | 0.08 | 186/76 | 42,875.0 | 19.354M/357k/86k | 191 |
| 2 | 448 | 0.781 | 133 | 575 | 0/0 | 0.08 | 99/35 | 4,133.8 | 1.743M/115k/28k | 63 |
| 3 | 384 | 0.730 | 89 | 591 | 0/0 | 0.07 | 108/33 | 6,859.0 | 2.130M/73k/16k | 42 |
| 4 | 320 | 1.640 | 508 | 651 | 0/372 | 0.06 | 187/102 | 6,859.0 | 1.718M/182k/90k | 282 |
| 5 | 144 | 1.419 | 397 | 275 | 650/22 | 0.03 | 157/72 | 6,859.0 | 698k/109k/71k | 493 |
| 6 | 96 | 2.551 | 1,569 | 237 | 409/58 | 1,379 | 161/71 | 6,859.0 | 418k/63k/279k | 2,909 |
| 7 | 48 | 1.201 | 393 | 200 | 294/208 | 0.00 | 149/99 | 6,859.0 | 258k/9k/70k | 1,469 |
| 8 | 153 | 2.186 | 584 | 661 | 447/308 | 0.01 | 263/182 | 6,859.0 | 508k/30k/106k | 694 |
LOD6 and LOD1
LOD6 generated 279,207 distinct XY columns across 96 tiles (2,909 per tile), close to the 280,334 L7 count. A bracket around AppendFarConnectorShells measured 206,849 formula evaluations there, about 74% of LOD6's column evaluations, and 1.379 worker-seconds; MC used about 35k evaluations, ground refinement about 37k, and cap none. The repair runs at LOD6 while stratum-shell repair starts at LOD7. The final gate profile recorded 13,291 halo/normal probes and only 16 repeated halo columns, so they do not explain the spike. The gate samples native terrain and does not certify dropping connector-shell geometry; no connector-shell work was shown to be screen-inert.
LOD1 has zero feature-refined tiles: it uses the normal 32-cell lattice at step 2. Its 448 tiles each consumed 42,875 density samples (35³); LOD0 averaged 10,383.8, or 5.32M total versus LOD1's 19.21M. The mesher's 8-cell proof-block early-outs are enabled at step 1 and step 8, but deliberately disabled at step 2, so LOD0 can skip uniform blocks while LOD1 fills each tile's grid. MC is LOD1's cost: 3.487 worker-seconds, with 3.345 seconds in density-grid fill in the detailed run. Cell classification was 123 ms, normals 13 ms, interpolation 8 ms, and dedup/stream 59 ms. Column computation was 309 ms; halo/normal work is not the cause.
Wall time and levers
The median W12 tile work was 17.299 worker-seconds, or 1.442 seconds at ideal use of 12 workers. Measured stream wall was 1.446 seconds, only 4 ms above that estimate. Whole-view readiness was 1.727 seconds: shape compilation was 215 ms and another 67 ms elapsed before stream work began in owner/plan/setup. The residual is startup, not an idle worker or a long tile tail.
The largest lever is LOD1 density-grid filling: 3.345 worker-seconds, a theoretical ceiling of 279 ms (16.2% of a 1.72-second view) if eliminated at perfect 12-way scaling. Next are LOD6 connector-shell repair at 1.379 worker-seconds (115 ms, 6.7%), LOD0 MC at 1.348 (112 ms, 6.5%), then LOD4 MC and LOD5 ground refinement at about 0.65 each (54 ms, 3.1%). These are upper bounds, not expected savings, and the work overlaps other stages. No product optimization was built: the candidates above threshold either produce required geometry or need an exact, output-preserving kernel change that this count round did not prove.
The L6 gate on the final W12 profile passed same-LOD regeneration at LOD3–8 and rejected all negative controls. The existing far mesh still fails its direct-field 1 px comparison at every LOD3–8 (maxima: 6.00, 7.93, 92.02, 70.34, 42.36, 47.18 px); this round changes no geometry. No recipe bump is needed.
Interleaved W12 timing and hashes
linux8 is the Clang 19 -ffp-contract=off measurement build; linux8gcc is GCC 14 default. Neither changes geometry. SHA256: L7 baseline fbbd468e351c8a0e00c903a7988a3765158e9400ed6a0111898da4d7f5ae6c85; Clang linux8 82b159359a754fb33c38a93c8b7cafe5d4cfc08c41582cbfd21328307f5e3c19; GCC linux8gcc 5614db5158a3f404383eea27c3748d7cf05b3a0c545b9e95f272e09bed0ee300.
| Pair | L7 linux7shared (s) |
Clang linux8 (s) |
Delta |
|---|---|---|---|
| 1 | 1.733 | 1.677 | −56 ms |
| 2 | 1.670 | 1.702 | +32 ms |
| 3 | 1.685 | 1.727 | +42 ms |
| 4 | 1.692 | 1.727 | +35 ms |
| 5 | 1.725 | 1.741 | +16 ms |
| Median | 1.692 | 1.727 | +35 ms (+2.1%) |
Pair deltas range from −56 to +42 ms, so this diagnostic build shows no separable speed change. Every W12 pair had the same whole-view hashes: density 0xc10697a8f48380c7, mesh 0xe75c9119a1498cd5, payload 0x49a9a8d1835a6c8c, topology 0xedcb23288b5e8724. W1/W8/W12 and Clang/GCC also agreed on all nine per-LOD hashes and exact-query hashes: density/unclamped 0xe4d4a8eb95b35933, detail 0xefcba20c0c70c415, collision 0xe604823a249029bf. Thus LOD0–2 and exact queries are unchanged from L7.
The final Clang and GCC builds took 29.876 s and 45.562 s; peak build RSS was 437,844 KiB and 901,892 KiB. Highest measured runtime RSS was 587,344 KiB. Runs used CPUs 0–11, -j12, a 6 GiB address-space limit, normal priority, and the unchanged powersave governor.
Failed or retried runs
l8_build_clang.logfailed after 27.608 s: the first print patch referenced local phase sets outside their scope. The correctedl8_build_clang_retry.logandl8_build_clang_retry2.logsucceeded; the later phase-instrumentedl8_build_clang_final.logandl8_build_gcc_final.logalso succeeded.- The initial no-camera probes in
l8_hash_clang_w1.log,l8_hash_clang_w8.log,l8_hash_clang_w12.log, andl8_baseline_l7_hash_w1.loggenerated 2,370 tiles, not this 2,553-tile fixture. They were discarded and rerun with--camera=0,-35,-487.94,0,-22. l8_profile_gate_w12.logandl8_profile_gate_final.logreturned exit 6 because the gate correctly rejects the existing far-mesh field error. Same-LOD checks passed and all fault/negative controls were rejected as required. All corrected hash, profile-repeat, and speed runs exited 0; none timed out.
Build and runtime logs are in Saved/Linux/l8_*.log. No commit, push, or stash was made.
Owner note: LOD6's extra columns are predominantly connector-shell repair work, while LOD1 is expensive because all 448 tiles fill the normal density grid; neither points to wasted halo or normal work. The next useful experiment is a bit-exact LOD1 density-grid optimization, while any LOD6 resolution change needs a connector-specific screen gate first.
Orchestrator review (Claude)
- Why LOD1 fills every sample:
VoxelMarchingCubesMesher.cppgates the 8-cell proof blocks toStep == 1 || Step == 8, and its comment says steps 2/16/32 skip them because "their meshing work is already smaller than repeating a full tile classifier per block" and to keep "the established coarse-LOD latency profile". That tuning predates the Core heightfield path; on the owner's SurfaceWorld view, LOD1's grid fill is now the largest single cost (3.35 worker-s). Next round: L9. - Only this report is committed. Luna's L8 instrumentation (Core and pipeline diffs) stays uncommitted in the tree for L9 to reuse or remove; its cost against L7 was +2.1% median with pair deltas from -56 to +42 ms, which is not separable, so it doesn't go in until proven free.