Files
VoxelForge/Standalone/Research/WorldAssemblerM3/Linux94/REPORT.md
T
Fr0zkaandClaude Opus 5.5 35f0a67fe3 unreal: parallel sign-edge repair + cheap SW route prefilter (L94); SW startup 2.75 -> 0.43 s
- Unreal requests Core's deterministic parallel sign-edge repair (UE ParallelFor, capped at
  10 workers); headless defaults to parallel (--serial-sign-edge-repair for A/B). SW
  sign_edge_distances 1,942 -> 37 ms, ShapeStage 2,156 -> 198 ms.
- SW fallback route planner checks the exact mouth-radius endpoint constraints before sampling
  terrain (58,480 of 78,408 candidates skip heightfield work); same 35 eligible, same chosen route.
  SerializeResolvedWorld 468 -> 115 ms; BeginPlay block 0.58 -> 0.22 s.
- Unreal SW: first admission 2.75 -> 0.43 s, LOD0-2 settled 5.20 -> 2.81 s; FI 3.40 -> 3.12 s.
- World identical: assembly/recipe/plan hashes unchanged; serial vs parallel per-tile hashes equal.
  Fast tier PASS; Linux UE host builds.

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

46 lines
4.7 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.
# Linux 94 — Unreal startup
## Before and after
Medians are from L92's final serial-repair `after-direct-json` traces and L94's parallel-repair traces. Times start at `BeginPlay`, except export duration and `core_compile_start` → `bReady`. LOD0–2 means every currently desired key was settled before the scripted movement at 20 s.
| Arrival | Measure | Before | After | Runs |
|---|---|---:|---:|---:|
| SW | `SerializeResolvedWorld` | 468.0 ms | 115.2 ms | 3 / 4 |
| SW | Core compile → `bReady` | 2.157 s | 0.198 s | 3 / 4 |
| SW | `bReady` | 2.738 s | 0.421 s | 3 / 4 |
| SW | First admission | 2.747 s | 0.434 s | 3 / 4 |
| SW | LOD0–2 settled | 5.198 s | 2.813 s | 3 / 3 of 4 |
| SW | `BeginPlay` game-thread block | 0.582 s | 0.224 s | 3 / 4 |
| FI | `SerializeResolvedWorld` | 465.6 ms | 115.4 ms | 3 / 3 |
| FI | Core compile → `bReady` | 0.184 s | 0.180 s | 3 / 3 |
| FI | `bReady` | 0.750 s | 0.408 s | 3 / 3 |
| FI | First admission | 0.762 s | 0.422 s | 3 / 3 |
| FI | LOD0–2 settled | 3.396 s | 3.119 s | 3 / 3 |
| FI | `BeginPlay` game-thread block | 0.570 s | 0.229 s | 3 / 3 |
Export, compile, `bReady`, admission and residency values are direct trace measurements. The SW route candidate log window fell from a 451 ms median to 96 ms (timestamps rounded to 1 ms); the enclosing export timer fell by 353 ms. The route window is a boundary measurement, not an internal function timer.
## Changes and hashes
- Unreal now requests parallel sign-edge repair through its existing Unreal `ParallelFor` scheduler. The request remains capped at 10 workers on this 12-logical-core host; it creates no separate worker pool. Traces show compile launch queue delays of 0.04–0.18 ms. The first two seconds' sampled frame maximum was 28.7 ms in SW; FI had one 45.9 ms sample and two samples below 27.2 ms. The direct synchronous `BeginPlay` block is measured above.
- The SW fallback route planner checks its exact mouth-radius endpoint constraints before allocating route points or sampling terrain. It still visits 78,408 candidates, but skips heightfield work for the 58,480 placement rejects. Eligible candidates remain 35; the selected route remains center `(32,80)`, direction 6, half-length 16, lift 128, with three sweep attempts.
- Headless sign-edge repair now defaults to parallel, with `--serial-sign-edge-repair` retained for A/B runs. The passage composer was not changed.
- Unreal `world_assembly_hash=1ecc162755ab83ac`, `recipe_hash=52b010081ad4b550`, and `plan_hash=a06d76fd11d7a08e` match L92 in every FI/SW run.
- Unreal SW `sign_edge_distances` fell from 1,942.2 ms to 36.5 ms median; `ShapeStage` fell from 2,156.3 ms to 198.1 ms. FI stayed effectively level: 8.8 → 9.5 ms and 183.5 → 179.8 ms.
- A serial/parallel Core hash A/B at the SW and FI spawn coordinates produced identical per-key tile hashes, full-detail hashes, whole-view hashes and per-LOD hashes. SW matched for 1,408 tiles (whole-view density/mesh/payload/topology: `ba04e6da1010c52f / 93555a2b969b16a5 / 339eba0fad4f79a5 / c2edafbec2fa9305`); FI matched for 1,216 tiles (`3175bceb00bfc76c / d1dabfba70a95d8a / b23900f97cfbb2cf / 3967a02b7c1ae1c8`). This focused headless A/B used the current owner-export manifest `bcc0d0d33ea39435`; the separate Unreal transient manifest is the `1ecc…` hash above.
- In that headless A/B, SW `sign_edge_distances` was 1,753.9 ms serial and 86.4 ms parallel. The FI input had zero endpoint corrections in both modes.
## Verification and failed runs
- Fast tier: **PASS**, 274 checks (269 PASS, 5 diagnostics), 297.1 s; source stamp `03a8fce1a9067edb8a83461a836292686d74abd8ea84b8014d8006296da8428d`. Headless build and tier were pinned to CPUs 0–11 and capped at 6 GiB. Unreal Linux build succeeded with `-NoUBA -MaxParallelActions=4`, pinned to CPUs 0–11, without `--as`; it was not run during timing. The build emitted three existing RealtimeMesh deprecation warnings.
- SW repeat 3 exited Unreal successfully but missed three desired LOD0–2 tiles at the 20 s stationary boundary. They settled after movement began, at 25.36 s, so this run is excluded from the LOD median; repeat 4 completed the three-run residency sample.
- An auxiliary full `CoreWorldTest` without trace-only mode stopped before hashing: the host project's staged first-person Blueprint failed its `MaxWalkSpeed` pin preflight. The trace-only startup runs and the separate headless hash A/B completed.
- Logs and traces are under `Saved/Linux/l94/`; baseline traces are under `Saved/Linux/l92/unreal-arrival/`. `RunL94UnrealArrival.py` reproduces an individual Unreal trace run. No run exceeded 30 minutes. No commit, push or stash was made.
## Source files
- `Source/VoxelForge/Private/VoxelWorld.cpp`
- `Source/VoxelForge/Private/VoxelForgeCoreAdapter.cpp`
- `Standalone/Source/StreamBenchmarkHeadless.cpp`