wip(assembler): round S8 -- region rebuilds no longer stall admission; result backlog capped
voxel.CoreRegionConcurrentAdmission (default on): tiles independent of the entering region keep submitting while a region page compiles; pages are immutable shared_ptr owners so running readers survive eviction. 6 m/s: 11 whole-pass skips -> 0, walkable ring ready at every centre change. voxel.StreamingResultBacklogCap=256 bounds finished results (slow-apply worst case 125 -> 76 MB). Spawn unchanged at ~7.7 s: LOD8 is 46% of worker time. At 60 m/s + teleport the collision ring is outrun (102/113 centres). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
This commit is contained in:
1 parent
5eb9ee76ff
commit
8440adc742
10 files changed
+1011
-78
No files matched your search
+25
@@ -331,6 +331,11 @@ game-thread `PendingTileCancellation` map whose per-request atomic flags are rea
|
||||
S5 assigns request and worker-start ordinals to each tile, preserving epoch, resident-at-request,
|
||||
priority, queue-wait and build timing in the opt-in startup trace. All four result queues remain MPSC;
|
||||
EndPlay still waits for workers and drains every queue.
|
||||
S8 adds `StartPendingCoreRegionCompile`: by default `voxel.CoreRegionConcurrentAdmission=1` lets
|
||||
`LoadCoreTile` admit keys independent of a pending region page; `0` restores the global compile gate.
|
||||
`voxel.StreamingResultBacklogCap=256` limits queued result payloads + active tile tasks + held
|
||||
prequeue results without folding completed results back into worker-slot admission; `0` disables it.
|
||||
Core region pages are immutable shared owners while readers are active. See §8.29 and §3.15.
|
||||
|
||||
**⭐ Espace ACTEUR / ACTOR SPACE (2026-08-17).** Le champ de densite est defini en espace **acteur** :
|
||||
`(0,0)` est l origine de l acteur `AVoxelWorld`, pas celle du monde Unreal. `WorldToLocalCm` /
|
||||
@@ -352,6 +357,8 @@ casse cette arithmetique *structurellement* — `BeginPlay` loggue une **Error**
|
||||
| `ValidateDeterminism()` | — | **F2 CallInEditor button (PIE)**: re-samples boundary points under left- vs right-chunk cache warm-ups + a same-alignment repeat; any non-zero delta = window-invariance regression (§8.4). Run after every "bit-identical" hot-path refactor. |
|
||||
| `GetMaxConcurrentTasks()` | — | T2.d — asset `MaxConcurrentTasks` capped to logical cores − 2 (all three budget checks use it). |
|
||||
| `GetActiveGenerationTaskCount()` | — | Normal mode returns the existing pending count. With `voxel.Step1PrequeueVisibleLOD0>0`, completed held results are excluded from active worker admission so a full render corpus can be generated before the upload release. |
|
||||
| `StartPendingCoreRegionCompile()` / `LoadCoreTile()` | — | Background Core region-page compile. `voxel.CoreRegionConcurrentAdmission=0` is the global-stop control; default `1` withholds only keys in the pending/in-flight region sets. Independent tiles can proceed. Core pages use immutable `shared_ptr` ownership under a separate shared mutex. §8.29. |
|
||||
| `EnqueueStreamingResult()` / `IsStreamingResultBacklogCapped()` | — | Central result accounting for all four MPSC queues. `voxel.StreamingResultBacklogCap=256` caps queued results + active tile tasks + held prequeue results; `0` disables the cap. This bounds result-payload growth separately from worker-slot admission. §8.29. |
|
||||
| `PostEditChangeProperty` | 1000 | Editor live-edit hook. |
|
||||
| `OnObjectModifiedInEditor` | 1022 | Regenerates when a strate asset is edited (if `bLiveEditStrates`). |
|
||||
| `EndPlay` | 1118 | Sets `bShuttingDown`, **waits for `ActiveTaskCount`→0**, unbinds delegate. |
|
||||
@@ -1016,6 +1023,24 @@ cumulative task intervals for worker-seconds. `VoxelForgeExploreCommandlet.cpp`
|
||||
owner-plan trace and moving actor check. See ARCHITECTURE §8.27–8.28 and
|
||||
[`Standalone/Research/WorldAssemblerM3/Round11/REPORT.md`](Standalone/Research/WorldAssemblerM3/Round11/REPORT.md).
|
||||
|
||||
### 3.15 Moving region admission and result-backlog safety trace — World Assembler S8 / M3 Round 12
|
||||
|
||||
`core_region_compile_request/start/complete` record why the desired region is being built (initial
|
||||
set, player-center move, or same-center desired-set change), center delta, pending tiles, compile wall
|
||||
time, accumulated pending interval, independent submissions and dependent-key declines. While a
|
||||
compile is pending, `scheduler_skip.reason=core_region_compile_pending` records per-LOD missing
|
||||
counts, motion and speed. The default concurrent mode should have no global region-pending skip;
|
||||
its negative control is `voxel.CoreRegionConcurrentAdmission=0`.
|
||||
|
||||
`walkable_gate` logs every support-center change and whether all nine required LOD0 collision tiles
|
||||
are ready there. `result_queue_frame` samples queued results, payload bytes, active tile tasks and
|
||||
the cap; `result_queue_summary` stores peak queue length/bytes and admission stops. These counters
|
||||
include slow-apply, teleport and high-speed controls added to `VoxelForgeExploreCommandlet.cpp` and
|
||||
`Tools/TestVoxelForgeCoreWorldHost.ps1`. Keep the cap negative control (`voxel.StreamingResultBacklogCap=0`)
|
||||
separate from the region-gate control. Round12 found 11/11 ready support centers at 6 m/s and 8/113
|
||||
immediately ready at 60 m/s with a 400 m teleport; see the traces under `Saved/BuildHost` and
|
||||
[`Standalone/Research/WorldAssemblerM3/Round12/REPORT.md`](Standalone/Research/WorldAssemblerM3/Round12/REPORT.md).
|
||||
|
||||
## 4. The density pipeline (most-edited hot path)
|
||||
|
||||
### 4.1 `GetDensityWithParams` (TunnelNetwork) — VoxelGenerator.cpp:3749
|
||||
|
||||
Reference in new issue
Block a user