Linked repository document
Optimized profiling follow-up — 2026-09-12
examples/slime_colony/eval/batches/20260912-optimized-profiling.md
This document retains its design, example or evidence context. References outside this guide show their repository paths.
Status: complete. The final disposition below supersedes pending wording in the retained attempt history.
User instruction: “Go ahead” with optimized builds at the same Boid and Slime
workloads, measuring whole-frame cost. This is an extension of the completed
eval-fix batch (repository: examples/slime_colony/eval/batches/20260912-eval-fixes.md), not a replacement of its evidence.
Starting revision: 10d24c4. Existing unrelated working changes: AGENTS.md,
README.md, docs/implementation-plan.md, skills/README.md; untracked .agents/,
docs/example-integration-plan.md and docs/example-suite.md. Preserve them.
Selected work:
- P1: allow explicit optimized native builds through the existing runner, with
profile-bound acceptance. Committed as
24c1895; runtime verification pending. - P2: retain callback and whole-frame samples for the same workload. Implemented; capture pending.
- P3: execute one fresh debug control and three release trials, unchanged seed, populations, steps, scene, window and pinned GL renderer. Pending.
Boid's 10,000-agent/600-step workload and Slime's 1024²/120,000-agent/800-step workload remain fixed. Boid's matched 400-agent modes are additional evidence. The SDK synchronous-consume comment is separately explained; no SDK change is part of this profiling capture. Earlier original receipts stay immutable.
P2 was committed as 2b3cce6. Initial Boid debug and release trials passed,
including CSV statistics and zero-owner teardown, but the first release finished
before CUA inspected it. Its sample is retained as an initial trial without
continuous focus evidence. A follow-up adds Window.has_focus() checks at every
measured entry; a windowed run with any unfocused sample fails after writing the
CSV. The exact dev5 Window XML confirms this public method. The helper costs are
outside callback timing and inside complete frame intervals. Headless results
remain explicitly unqualified for rendering/focus.
d189d50 added focus evidence. Its first debug Boid run correctly rejected all
300 unfocused entries, with a zero-owner Host exit. This is retained as a negative
control, not performance evidence. The next fix waits for focus before step 1;
it never pauses or removes a sample after measurement begins. It also rejects
nonfinite printed timing values during CSV validation and corrects the copied
Boid screenshot explanation. Focused capture is pending on this next source.
ede776a qualified CSV finite-value rejection but two Boid foreground attempts
still failed (300 and 84 unfocused entries). A focus event at launch/inspection
can start a short benchmark before foreground acquisition is finished. The
windowed runner now adds --eval-start-on-click; an actual mouse event in the
focused scene starts step 1. The workload and all measured steps are unchanged.
This is an acquisition gate, not a pause/resume mechanism during measurement.
These rejected trials remain in the follow-up evidence and are not pooled.
Final disposition and evidence
Evaluated runtime source: aa63602 (full SHA in the receipt). Source hashes stayed
unchanged throughout the qualified campaign. bd34cad subsequently qualifies
Slime's README by native profile; no runtime source changed. P1/P2/P3 are verified
within the stated measurement bounds. The source fixes are 24c1895, 2b3cce6,
d189d50, ede776a, and aa63602; the acquisition failures above drove the last
three. bd34cad is the evidence-driven determinism documentation correction.
The new receipt (repository: examples/slime_colony/eval/followups/20260912-optimized/receipt.json) retains every run
and failed acquisition attempt, exact commands/exits, raw CSV/PNG files, source
and tool hashes, final publication manifests, independent timing-validator
negative controls and the native codegen review. Original receipts and screenshots
remain byte-identical to 10d24c4. No SDK or native algorithm was modified.
Commands: GODODIN_PROFILE=debug ./test.sh pipeline and the same with release,
then the original windowed mode in each profile. The native Host/image profile
changes Odin -debug / native emitter -O0 to Odin -o:speed / emitter -O2.
The exact official 4.8.dev5.official.9552dfb68 Godot executable is unchanged,
including its (DEBUG) window title. These are not exported release-engine runs.
GL remains explicitly pinned with --rendering-driver opengl3. The retained
machine is macOS arm64 / Apple M5 Max, on AC power in normal power mode, with a
1280×720 captured viewport. Project renderer, window and pacing settings were
unchanged; no claim of an isolated GPU timer or continuously monitored display
presentation follows from frame-entry intervals.
| Accepted trial | Callback mean (ms) | Frame mean (ms) | Frame p95 (ms) | Frame max (ms) |
|---|---|---|---|---|
| slime-debug-qualified-1 | 114.969 | 124.721 | 135.291 | 208.383 |
| slime-release-qualified-1 | 8.909 | 17.274 | 26.123 | 95.712 |
| slime-release-qualified-2 | 8.893 | 15.199 | 23.713 | 89.878 |
| slime-release-qualified-4 | 8.926 | 16.247 | 23.993 | 88.783 |
The three optimized large-workload trials have median frame mean 16.247 ms, versus 124.721 ms in the focused debug control (7.68× ratio of observed frame means). The optimized callback mean's median is 8.909 ms. This is a native build-profile comparison at the same configured workload, not a language-only speedup, an integration-overhead subtraction, or a statistical significance claim. Every accepted entry was focused (300 samples for Boid, 400 for Slime). Timing sample arrays were allocated before timing; CSV output, final verification and cleanup were outside the measured interval window. All accepted runs ended with zero Host instances, foreign values, references, callback scopes and allocations.
The original windowed workload is unchanged: 1024² grid, 120,000 agents, 800 steps (400 warm and 400 callback samples), seed 20260911, speed 1.5 and gain 6. The third optimized attempt lost focus for all 400 measured entries; its CSV and zero-owner failure are retained, and it is excluded. Trial four supplies the third qualified sample. No slow accepted result was discarded.
Intermediate screenshots at steps 460 and 740 remain in the intervals arriving at 461 and 741. The final screenshot is outside the sampled interval window. This preserves the prior workload, including its capture overhead; the largest roughly 89–96 ms optimized stalls are therefore retained and identified in the receipt. The stats timer (including a whole-state digest) also runs normally. Do not describe the result as pure steady-state GPU cost.
All four optimized attempts replay the same frame-16 digest
-8523262832372737892; debug replays -1208778191915661261. Cross-profile
bitwise equality is false. The binary/numerical probe (repository: examples/slime_colony/eval/followups/20260912-optimized/slime-profile-fp-probe.json)
verified the exact image hashes and found separate sinf/cosf calls in debug,
paired sincosf in release, and three one-ULP discrepancies in 123 sampled
angles. It found no FMA instructions in either inspected native image. This
establishes a numerical execution difference; it does not locate the first diverging colony element or exclude
all other optimizer effects. The source audit found no uninitialized hashed
state. README now correctly requires identical build/profile and compiler/
emitter settings. CPU Image readback still agrees within each build; this is
not GPU texture readback or an independent simulation oracle.
Final verdict: the release result is a credible real-time native demo at this large population, and the inspected developed networks remain visually coherent. Its 24–26 ms p95 and retained capture stalls do not establish consistent 60 FPS. The highest-value next step is an attributed frame trace, separating periodic stats/capture work, rendering and pacing before choosing another optimization. A GPU compute or same-algorithm GDScript comparison remains unmeasured. All qualified screenshots were inspected. The ordinary runner still defaults to debug.
The SDK synchronous-consume comment remains a separately identified contract
wording issue. No design decision is needed to correct its overstatement; the
source is tools/apigen/templates/rendering_facade.odin.txt:810, and generated
bindings must follow the exact-dev5 authority publication workflow. Returning
from multimesh_set_buffer alone does not prove non-retention. Supporting queued,
interpolated or cached consumers transparently would be separate behavior/cost
work. This profiling batch makes no SDK fix or support claim.
Final process inventory: zero Godot processes. The original pure subsystem tests and offline gates are reused because their source and tool identities are unchanged; native runtime/readback/replay/lifetime checks were executed again in both profiles. The remaining per-frame pacing/trace questions are measurements for future optimization, not unresolved P1/P2/P3 implementation failures.