Files
VoxelForge/Standalone/Research/WorldAssemblerM3/Linux104/REPORT.md
T
Fr0zkaandClaude Opus 5.5 6a80cb0ab3 far shells: 3D cell bins for HasDownwardHit/HasUpwardHit candidates (L104, exact)
Near tiles legitimately need floor/ceiling boundary patches, but every hit query scanned the
tile's whole XY column. Direction-specific 3D cell bins conservatively index triangle bounds; the
existing predicates still decide every hit. Candidate visits per query -88..-99%; identical query
and hit counts. Hit-function cost ~1.7-1.9 -> ~0.35 s per FI/TN run. Near-ready @W12: FI 1.63 ->
1.52, TN 1.51 -> 1.38, VS 1.00 -> 0.92 s. All tile/whole hashes equal L103 (Clang/GCC W1/W8/W12).
The 24-28% "idle" is in the serial base-shape (~0.24 s) and far-parent (~0.13 s) phases; the
LOD0-1 drain is >= 99.4% busy. Fast tier PASS; Linux UE builds; FI Unreal arrival 1.96-1.98 s.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
2026-10-28 20:34:24 +01:00

6.3 KiB
Raw Blame History

Linux104 results

Final source stamp: b23900c9d2ee10b0ee29bec1b1b7f74ee3fa697f5c66682e808b19ad9c334780.

Far-shell refinement

Near tiles still need floor and ceiling boundary patches: an owner tile can have an open stratum boundary, and the coverage checks preserve existing faces while filling only gaps. LOD is not a safe skip condition. The waste was candidate search: each HasDownwardHit / HasUpwardHit query scanned the tile’s full XY column, including triangles at unrelated heights. Exact-key/per-column memoization reused too few LOD0–1 queries, so it was replaced with direction-specific 3D cell bins in FarShellsInternal.h. The bins conservatively index triangle bounds; the existing normal, barycentric and tolerance predicates still decide every hit.

Cache-off and indexed runs had identical query and hit-result counts in all four views. FI made 1,915,890 LOD0–2 hit queries; TN made 2,037,135. Candidate triangle visits per query were:

View LOD Queries Before Indexed Fewer visits
FI 0 1,308,990 182.56 21.87 88.0%
FI 1 484,020 179.38 5.51 96.9%
FI 2 122,880 4.76 0.07 98.6%
TN 0 1,260,650 203.96 19.16 90.6%
TN 1 490,390 178.66 4.34 97.6%
TN 2 286,095 4.91 0.04 99.1%

Weighted symbol samples over three W12 census runs put the hit functions at about 0.37 s FI / 0.34 s TN per run, versus L103’s 1.73 / 1.85 s. L80 paired readiness also improved FI/TN near-ready time by 6.7–8.3% and whole-view time by 5.5–7.0% at W8/W12.

Worker idle

The reported 24–28% is full-pipeline idle, not idle in the LOD0–1 tile drain. All 960 requested LOD0–1 tiles were admitted, started and finished. The drain kept workers 99.4% busy or better; the last dispatch preceded drain completion by only 8–14 ms. The idle is concentrated in the serial base-shape phase and the later far-parent phase, after or before the near tile drain. Near-first gating therefore does not starve the critical near drain, and changing admission or heavy-tile splits would not fill a materially idle pool there. Scheduling is unchanged.

View Workers Full-pipeline idle LOD0–1 drain idle LOD0–1 tiles
FI 8 24.2% 0.38% 960/960
FI 12 26.5% 0.60% 960/960
TN 8 24.8% 0.60% 960/960
TN 12 28.3% 0.57% 960/960

The timeline’s base-shape phase left workers idle for 232–251 ms; the far-parent phase left them idle for 110–144 ms. See Saved/Linux/l104/timeline/utilization.csv and analysis.json.

Census closure

Medians; L103 has three W12 runs per stratum. L104 has three per stratum, with six additional FI runs to check closure. All L104 runs had zero lost samples and analyzer validation passed.

View Runs L103 → L104 Whole near-worker closure L103 → L104 Grid-fill closure L103 → L104
SW 3 → 3 95.32% → 98.18% 104.06% → 100.54%
FI 3 → 9 99.17% → 98.84% 100.04% → 99.41%
TN 3 → 3 99.11% → 99.60% 99.76% → 100.09%
VS 3 → 3 99.12% → 99.19% 100.28% → 100.00%

FI grid-fill closure clears 99%; its broader whole near-worker sample closure is 98.84%, 0.16 percentage points below 99% after nine runs. This remains the census shortfall.

L80 readiness

Three measured interleaved before/after pairs per cell; medians in seconds. Each run completed the full near and whole tile sets.

View Workers Near LOD0–2 before → after (change) Whole view before → after (change)
SW 8 0.858 → 0.845 (−1.4%) 2.046 → 2.012 (−1.7%)
SW 12 0.844 → 0.845 (+0.1%) 1.922 → 1.882 (−2.1%)
FI 8 1.751 → 1.607 (−8.2%) 2.809 → 2.650 (−5.7%)
FI 12 1.633 → 1.524 (−6.7%) 2.603 → 2.461 (−5.5%)
TN 8 1.669 → 1.538 (−7.9%) 2.661 → 2.482 (−6.7%)
TN 12 1.505 → 1.380 (−8.3%) 2.402 → 2.233 (−7.0%)
VS 8 1.156 → 1.092 (−5.5%) 2.164 → 2.069 (−4.4%)
VS 12 0.995 → 0.920 (−7.6%) 1.900 → 1.783 (−6.2%)

Hashes

Every tile and whole-view hash matched the L103 peer for all 24 stratum/compiler/worker combinations (Clang and GCC, W1/W8/W12). The current 20 cross-compiler/worker comparisons also matched. The table gives the shared whole-view hashes; order is density, mesh, payload, topology.

View Tiles Density Mesh Payload Topology
SW 2,850 0x8723d8c61348bf31 0xfe1c3e410373a343 0xbf111bbc45e2f017 0xc9c562b100b51f7f
FI 2,249 0x6bb633f756e2b8be 0xfe930e83b0dc6bf3 0x5298602285b6892c 0xe306f87ae432a4fc
TN 2,233 0x612b2d11fc6bd946 0xc026a40c6127d649 0x0f9036914e28fe46 0x94b36e5f73694eff
VS 2,329 0x99c93f4c7155ffb3 0x488d421c6438f529 0x249b5afc12be4540 0x9c5e22f6dc1e44b8

Verification and Unreal

  • Fast tier: PASS, 275.5 s (Saved/Linux/l104/fast-summary.json). Its deliberate negative controls were rejected as expected.
  • Linux Unreal build: Succeeded with -NoUBA -MaxParallelActions=4; UBT compiled VFCore_Core_src_VoxelForgeCore_cpp.cpp. The build and three FI arrival traces used CPU affinity only, with no prlimit.
FI arrival Near settle from first admission Full LOD0–2 settled Near tiles Exit
1 1.572 s 1.978 s 1,216 0
2 1.549 s 1.964 s 1,216 0
3 1.554 s 1.974 s 1,216 0

Failed or retired runs

  • The first exact-key/per-column memo passed parity but did not improve readiness; the one-slot variant cut only about 1% of LOD0–1 candidate visits. Both were replaced by the 3D index.
  • One GCC build was rejected by the source-stamp guard because the source changed during that build. Its binary was discarded; the final GCC build passed on the final stamp.
  • The first Unreal build stopped before compilation because UBT could not rotate its log in read-only ~/.config/Epic. Retrying with -Log under Saved/Linux/l104/logs succeeded.
  • The final FI whole near-worker sample closure remains below the requested 99% threshold as shown above; the added six runs did not lift its median to 99%.

All run logs and machine-readable summaries are under Saved/Linux/l104/.