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
93 lines
6.3 KiB
Markdown
93 lines
6.3 KiB
Markdown
# 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](../../../Core/src/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/`.
|