Files
VoxelForge/Standalone/Research/WorldAssemblerM3/Linux8/REPORT.md
T
Fr0zkaandClaude Opus 5.5 82813fb13b docs(assembler): round L8 report -- where the time goes after the shared cache
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
2026-10-19 22:10:05 +02:00

7.8 KiB
Raw Blame History

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.log failed after 27.608 s: the first print patch referenced local phase sets outside their scope. The corrected l8_build_clang_retry.log and l8_build_clang_retry2.log succeeded; the later phase-instrumented l8_build_clang_final.log and l8_build_gcc_final.log also succeeded.
  • The initial no-camera probes in l8_hash_clang_w1.log, l8_hash_clang_w8.log, l8_hash_clang_w12.log, and l8_baseline_l7_hash_w1.log generated 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.log and l8_profile_gate_final.log returned 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.cpp gates the 8-cell proof blocks to Step == 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.