passages: contiguous BVH node ranges + child-bound reuse (L83); scaling and serial floor measured
Exact through LOD2 (all near tile hashes equal L82). W8 LOD0-2: SW 1.09->1.06, FI 2.47->2.34, TN 2.39->2.43 (noise), VS 1.20->1.18 s. Fast tier PASS. Scaling W4/W8/W12/W16 (LOD0-2, FI): 3.59 / 2.48 / 2.33 / 2.34 s - flattens past W8-W12. Estimated infinite-worker floor ~1.0 s FI/TN = shape compile (0.35-0.41 s, not overlapped: no shape-free tiles in these views) + slowest single LOD0 tile service (0.51-0.59 s). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
This commit is contained in:
1 parent
f572108dc4
commit
a81b5b7d06
8 files changed
+800
-22
No files matched your search
@@ -0,0 +1,75 @@
|
||||
# Linux L83 — passage CPU and worker scaling
|
||||
|
||||
Base was L82 (`f572108`); the retained code is the exact L83 candidate. Logs and machine-readable results are under `Saved/Linux/l83/`. Every benchmark/headless process used CPUs 0–11; headless runs had a 6 GiB address-space cap and a 1,740 s timeout. This Intel i9-12900H host exposes six P cores / twelve P-core threads on that mask, so W16 is oversubscription. The Ryzen 5800X3D target was not measured directly.
|
||||
|
||||
## L77 near-LOD census
|
||||
|
||||
Three L77 samples per world and version. Passage phase is the share of all near-LOD0–2 samples. Term shares use passage plus support-phase samples; these are PC/source-line attribution estimates, not subroutine wall-clock timers. `unresolved` is code without a resolved source-line term.
|
||||
|
||||
| Term share | FI before → after | TN before → after |
|
||||
|---|---:|---:|
|
||||
| Carve distance evaluation | 45.1% → 41.5% | 43.5% → 39.2% |
|
||||
| Support restoration / columns | 16.6% → 14.9% | 16.2% → 13.5% |
|
||||
| Mouth shaping | 4.3% → 4.2% | 4.0% → 4.5% |
|
||||
| Smooth joins / Catmull–Rom | 0.7% → 0.8% | 1.2% → 1.3% |
|
||||
| Remaining relief | 18.9% → 21.3% | 19.7% → 23.7% |
|
||||
| Other passage work | 9.3% → 11.5% | 10.2% → 11.5% |
|
||||
| Unresolved passage body | 5.1% → 5.8% | 5.1% → 6.3% |
|
||||
|
||||
Passage phase itself was FI 58.76% → 58.75%, TN 58.51% → 59.11% of near-LOD samples. Top exclusive symbols (% of passage-phase samples):
|
||||
|
||||
| World/version | Top symbols |
|
||||
|---|---|
|
||||
| FI before | `VisitNearestPassageSpatialNode` 24.3%; `ApplyResolvedStratePassageCarves` 21.4%; `VF_FieldCachedValueNoise` 18.7%; `PassagePotentialWithinNode` 17.5%; carve lambda 10.2% |
|
||||
| FI after | `ApplyResolvedStratePassageCarves` 21.3%; `VF_FieldCachedValueNoise` 20.8%; `VisitNearestPassageSpatialNode` 20.3%; `PassagePotentialWithinNode` 12.7%; carve lambda 11.8% |
|
||||
| TN before | `VisitNearestPassageSpatialNode` 25.9%; `ApplyResolvedStratePassageCarves` 21.3%; `VF_FieldCachedValueNoise` 19.2%; `PassagePotentialWithinNode` 14.2%; carve lambda 12.3% |
|
||||
| TN after | `VF_FieldCachedValueNoise` 22.8%; `ApplyResolvedStratePassageCarves` 21.8%; `VisitNearestPassageSpatialNode` 20.8%; carve lambda 13.1%; `PassagePotentialWithinNode` 10.5% |
|
||||
|
||||
## Exact cut and W8 readiness
|
||||
|
||||
Marked BVH nodes whose segment indices form a contiguous range, then skipped repeated `lower_bound`/membership work for those nodes. The nearest-node traversal now passes each already-computed child distance bound into recursion instead of calculating that bound again. A mask-only reachability trial was exact but showed mixed timing, so it was discarded.
|
||||
|
||||
L80 protocol: one warmup, then three interleaved L82/L83 pairs per stratum at W8. Cells show L82 → L83 median seconds; parentheses show the median of paired deltas.
|
||||
|
||||
| Strate | LOD0–2 ready | Whole view |
|
||||
|---|---:|---:|
|
||||
| SW | 1.088 → 1.058 (−0.021) | 2.323 → 2.249 (−0.074) |
|
||||
| FI | 2.474 → 2.341 (−0.133) | 3.756 → 3.591 (−0.165) |
|
||||
| TN | 2.386 → 2.431 (+0.058) | 3.542 → 3.534 (−0.008) |
|
||||
| VS | 1.197 → 1.181 (−0.043) | 2.233 → 2.171 (−0.109) |
|
||||
|
||||
The cut is exact through LOD2: every near tile hash and the aggregate hash matched L82, with zero mismatches. Whole hashes (density / mesh / payload / topology):
|
||||
|
||||
| Strate | L82 = L83 whole hash |
|
||||
|---|---|
|
||||
| SW (1,408 tiles) | `4889b882f274930e / cafd187b455569f1 / 09e265430de5d9c8 / 498dc21d1fb4100e` |
|
||||
| FI (1,216 tiles) | `3175bceb00bfc76c / d1dabfba70a95d8a / b23900f97cfbb2cf / 3967a02b7c1ae1c8` |
|
||||
| TN (1,344 tiles) | `6b3e9f38209c1d8f / efa0d7b993928cbc / ede5b7bf3a771552 / 798dc428930aa2e2` |
|
||||
| VS (1,344 tiles) | `e0c51b07a9a2016c / 99f2772314f721c5 / 922b324240786f79 / 6f8a836e0a17895c` |
|
||||
|
||||
## Scaling
|
||||
|
||||
Final L83, L80 protocol: one warmup and three interleaved measured runs for each W4/W8/W12/W16 setting and stratum. Entries are median `LOD0–2 / whole-view` seconds; individual runs are in `Saved/Linux/l83/scaling/summary.json`.
|
||||
|
||||
| Strate | W4 | W8 | W12 | W16 |
|
||||
|---|---:|---:|---:|---:|
|
||||
| SW | 1.464 / 3.493 | 1.455 / 3.023 | 1.210 / 2.427 | 1.087 / 2.309 |
|
||||
| FI | 3.592 / 5.341 | 2.478 / 3.791 | 2.328 / 3.566 | 2.342 / 3.608 |
|
||||
| TN | 3.625 / 5.398 | 2.475 / 3.631 | 2.327 / 3.384 | 2.295 / 3.368 |
|
||||
| VS | 1.540 / 3.160 | 1.205 / 2.242 | 1.274 / 2.254 | 1.158 / 2.218 |
|
||||
|
||||
FI/TN scale well from W4 to W8 and gain about 0.15 s near-ready at W12; W16 is essentially flat for FI and slightly better for TN. Whole-view results mostly flatten by W12. W16 does not consistently help across all strata. Three-run variance is material in some cells: SW W4 near-ready ranged 1.400–2.322 s (shape compile 0.413–1.027 s), and FI W12 near-ready ranged 2.286–2.634 s (shape 0.344–0.594 s).
|
||||
|
||||
## Serial floor
|
||||
|
||||
At W16, the FI/TN timeline had `shape_free_desired=0` and `near_ring=0/27`. Shape compilation ran asynchronously, but there were no tiles to generate during it, so it is on the critical path and did not overlap tile generation in these views. Shape-free tiles could overlap compilation in views that actually contain them.
|
||||
|
||||
An instrumented W16 pass estimates the infinite-worker floor as the maximum, over near tiles, of enqueue time plus that tile's measured service time: FI 1.014 s (last enqueue 0.430 s; maximum LOD0 service 0.587 s), TN 0.974 s (0.470 s; 0.506 s). This is an estimate from W16 service times, not a measured W∞ run. Shape compile in these passes was 0.347 s FI and 0.408 s TN; queue wait reached about 1.8 s, so the actual W16 runs still have substantial parallel backlog beyond that floor.
|
||||
|
||||
## Verification and failed runs
|
||||
|
||||
- Fast tier passed in 299.8 s; source stamp `08af4e98c86a69477cc79e21463d8c93bcd11ebe0f077d7c11519031d9141fa9`.
|
||||
- No Unreal build was needed: no Unreal `Source/` files changed.
|
||||
- The first L77 parser attempt failed on a census regex unpack error; the parser was corrected and all six before/after FI/TN captures completed.
|
||||
- The first fast-tier invocation stopped immediately because its output directory had no verification binary. After building that binary, the full tier passed.
|
||||
- No timed-out benchmark or verification run. No commit, push, or stash.
|
||||
Reference in new issue
Block a user