Performance investigation Measured 06 November 2026

Faster colonies.
The same simulation?

What makes a large colony slow, which optimizations preserve its state, and where faster computation changes the answer.

BLUF Recommendation first

Qualify the exact parcel caches first.
Keep the numerical defaults.

Two caches cut matched native tick time by 12.38% and sharply reduce the worst stalls. Extra native/simulation overlap needs a conservation-safe redesign. Spaced Out! needs work on substeps and transport. Sustained, smooth 3× remains unproven.

See the strongest evidence
Linux research · two large coloniesResearch candidates · no production adoption

01 / The exact improvement

Less bookkeeping.
Identical final state.

Held parcels preserve small quantities of fluid. As their inventory grows, repeatedly validating and encoding unchanged entries becomes expensive. The two caches reuse that work within a transfer pass.

They preserve physical operations, solver arithmetic, checkpoint format and the existing inventory limits.

Best candidate to qualify

06 Nov experiment · matched native replay

12.38% less time per tick

Lower is better
Unchanged Two parcel caches
Mean owner tick−12.38%
89.754 ms
78.639 ms
Mean transfer stage−53.87%
18.433 ms
8.504 ms
Worst owner tick967 → 142 ms
967.313 ms
141.571 ms
Each pair has its own scale. Four full-cycle replays in ABBA order: unchanged, cached, cached, unchanged. Identical requested inputs; first 150 ticks excluded from timings.

All four final full-owner SHA-256 hashes match. Separate 16-tick tests also match every intermediate owner image in both colonies at 1 and 12 workers. The full-cycle comparison checks the endpoint, rather than every intermediate checkpoint.

What the caches actually change

The admission cache maintains the encoded-size total during a transfer pass. The release cache validates the retained inventory once, then checks the changed entry and the same aggregate limits. Refused changes preserve the original parcel and cached totals.

Held parcels grew from 4,524 to 35,936 in the diagnostic cycle. In one matched late frame, precision handling dropped from 143.27 to 15.55 ms with the same releases and moving attempts.

The caches are pass-local and add no persistent save state. Mean native replay peak RSS was 4,396.9 versus 4,397.4 MiB: no meaningful memory saving was demonstrated. This replay memory includes the input journal and parsed history; it is a different measure from game memory.

02 / Inside the game

A useful base gain.
A different SO bottleneck.

Game speed is game seconds per wall second. A 1.00× result is real time; 3.00× is the requested speed.

These 6 November measurements are individual, ordered live runs. Inputs vary with scheduling, and background CPU activity affected timings. Treat them as observed throughput, not isolated causal gains.

32-duplicant industrial base

Full cycle · ≈600 game seconds
ConfigurationGame speed
Unchanged Control
1.297×
Two parcel caches Exact code optimization
1.559×
Multigrid + 1 mL detail Changes numerical behavior
1.932×
Full combination Numerical options + parcel/surface caches
2.093×

Bar scale: 0–3×. All four runs retained 32 duplicants. Faster simulation did not establish smoother input: mean Unity-frame times were 47.1, 43.0, 51.5 and 53.0 ms, respectively.

Spaced Out! · 14 duplicants · 900 ticks

No useful exact-cache gain

0.986× Unchanged0.983× Parcel caches

The short pair is effectively unchanged. Pressure and transport dominate this workload. Both runs retained all 14 duplicants; the tiny difference establishes neither a useful speedup nor a meaningful regression.

Why 3× is still out of reach

At 3×, each 0.2-game-second owner tick has a 66.7 ms wall-time budget. The exact-cache replay still averages 78.6 ms before native/game overhead. Its 12.38% lower work time means about 14.13% more native capacity, with no automatic equivalent whole-game gain.

The numerical combination reaches 50.3 ms natively, but native handoff, publication and game work still need time. SO needs a larger reduction in repeated substeps and transport. This budget explains the remaining gap; it is not a combined-speed forecast.

03 / Faster has conditions

Keep exactness and numerical
tradeoffs separate.

Some experiments save time by changing when data is read or how the fluid equations are solved. Their gains need a different standard of review.

Redesign before use

Additional overlap exposes stale state.

The game thread and owner solver already overlap. The prototype overlaps additional native work with the solver using an older publication, adding 0.2 game seconds of lag.

Short runs observed +14.6% base throughput and +7.6% SO throughput. Focused synthetic controls show that the prototype can disagree about mass and skip heat. Passing the owner-only ledger does not catch these failures.

Synthetic counterexamples

0.25 kgFreeze mass discrepancy
0.15 kgWithdrawal shortfall
4,000 JHeat captured but skipped at an emptied cell

These counterexamples were demonstrated in focused tests. They are not claims of corruption observed in the large-colony runs.

Explicit numerical choices

Multigrid and tiny-liquid detail change the trajectory.

Both rows include the exact parcel caches. Differences are measured after 600 game seconds against the unchanged algorithm, using the same requested inputs. This is algorithm deviation, not physical ground truth.

The 1 mL setting suppresses interface sharpening for tiny liquid fractions or remaining voids in a 1 m³ cell. Constituent mass and heat remain in the simulation.

Multigrid

65.962 ms / owner tick

Temperature RMS / max difference
3.719 / 38.868 K
Liquid-volume L1 difference
0.5734 m³
Largest single-cell liquid difference
0.1725 m³
Gas-cell constituent L1
1.0995%

Multigrid + 1 mL interface detail

50.321 ms / owner tick

Temperature RMS / max difference
2.852 / 136.063 K
Liquid-volume L1 difference
9.9800 m³
Largest single-cell liquid difference
0.8448 m³
Gas-cell constituent L1
1.0347%

Temperature compares populated cells. The 136 K maximum is in a cell with about 3 g remaining; for gas above 100 g, that configuration’s maximum is 49.143 K. L1 is the sum of absolute differences. These liquid changes reflect redistribution, rather than lost mass.

Mass and energy conservation close, wall masks match, and no negative or nonfinite values appear. Those checks do not make the local temperature and liquid differences negligible. Keep these as explicit tradeoffs for gameplay review; keep the selected 1 g thin-gas-drag default.

04 / Where to spend the work

Follow the remaining
critical path.

After parcel caching, fluid flow remains the principal native cost. The industrial base and SO stress case need different approaches.

Beyond the parcel caches, these are source-grounded research directions. Their speedups have not been measured.

  1. Qualify the two exact parcel caches

    Complete production checks on the isolated optimization. Preserve solver arithmetic and checkpoint bytes, and compare clean old/new diagnostic outputs.

    Measured
  2. Reduce transfer and publication work

    Explore transactional transfer edits and rollback to avoid repeated copies. Investigate receipt/object churn and bounded pipe-contact scratch allocation. Existing presentation buffers are already pooled.

    Next
  3. Respect dependencies inside interface work

    The industrial base has a large connected interface cluster. Finer scheduling must include neighbor reads and preserve each cell’s face order, then prove identical owner bytes.

    Next
  4. Target SO substeps and transport

    A diagnostic vented region needs 66 substeps and 83 attempts. Pressure-only work leaves repeated transport. Conservative local subcycling or reuse requires new conservation and thread-count controls.

    Research
  5. Reuse unchanged texture blocks

    SO’s managed texture work makes cross-frame reuse worth studying, with complete invalidation and the existing byte oracle. Compact sampling already exists; owner-limited throughput gains remain unproven.

    Research
Diagnostic hotspots and smaller leads

In one industrial-base diagnostic frame, pressure takes 27.57 ms, interface correction 16.05 ms and transport 4.32 ms. In one SO vented-region frame, pressure takes 61.38 ms and transport 69.26 ms, versus 2.56 ms for interface work. These are explanatory samples, not whole-cycle averages.

Native handoff averages about 13.38 ms for UpdateData, plus 0.90 ms shadow writing, 1.17 ms contact capture and 1.42 ms game copying. Process/next waits are nested owner waits and must not be counted again as independent work.

Managed diagnostic timings point to texture updates and publication/receipt handling. Allocation-counter validation failed, so heap-growth readings are proxies, not exact allocated bytes; parent and child timings overlap.

Three additional exact surface caches produced no established extra full-cycle speedup. Lower worker counts may help CPU/memory budgets, but showed no reliable speed advantage. The GPU route remains closed by the project’s existing decision.

05 / Evidence & limits

Measured carefully.
Still research.

The 6 November measurement queue completed. Production qualification is now underway for the exact parcel caches; adoption and release qualification are not yet claimed.

93/93Native tests passed
14Live runs passed
2Colony workloads

Managed, Python and integration suites also passed. Passing live checks does not validate the unsafe overlap prototype.

Benchmark setup

Industrial base: prepared 32-duplicant benchmark with 1,474 building/floor/wire/conduit objects and 34,441 owned cells. It was instantly prepared, rather than played from cycle 1.

Spaced Out!: unchanged 14-duplicant stress save with 1,147 such objects and about 67,857 owned cells, including a compact base venting toward near vacuum.

Host: Linux, Ryzen 9 5900X (12 physical cores / 24 threads), about 60 GiB RAM and RTX 5090. The game logged a 640 × 480 window. Windows performance remains unmeasured.

Timing and exactness controls

Full native replays use the same initial state, the same 3,000 requested boundary inputs, 12 workers and fixed CPU affinity. Timing excludes the first 150 ticks. Four runs alternate unchanged/cached/cached/unchanged to reduce ordering bias.

Live runs request game speed 3. Reported throughput includes simulation startup and excludes loading before the first measured owner interval. Project locks control project workloads, not external host activity. Background video processing affected the late live baseline.

Short SO comparisons use their own 900-tick controls because the vented region settles over a full cycle. Native replay, live game, and managed diagnostic timings have different scopes and must not be added together indiscriminately.

What remains before production

The 15 Linux scenario batches, clean old/new all-MAC diagnostic-output comparison and Windows qualification remain. No test inputs, grids or acceptance bounds were changed.

Additional safe overlap requires owner-confirmed mass/phase receipts, heat reconciliation, a native-frame ownership snapshot, and save/load/topology fencing. The removed-wait prototype is not ready to adopt.

Public evidence and provenance

This page summarizes the large-colony performance investigation dated 6 November 2026. Values were checked against the research report, aggregate live-game results, four-run replay summary, full-cycle numerical comparisons and final audit.

Only aggregate findings and original explanatory text are published here. Research inputs and captures remain private.

Download public aggregate data