Skip to content

[codex] Avoid rebuilding unchanged statuses during compilation - #215

Merged
VEZY merged 3 commits into
mainfrom
codex/compile-runtime-lifecycle-perf
Sep 16, 2026
Merged

VEZY merged 3 commits into
mainfrom
codex/compile-runtime-lifecycle-perf

Conversation

@VEZY

@VEZY VEZY commented Sep 6, 2026 •

Copy link
Copy Markdown
Member

Initial preparation rebuilt status recipes even when all declared fields and shared references were already present. Ordinary applications also prepared temporal/private view storage they did not use. This PR skips that work while preserving the batched preparation introduced in 3c04a39.

  • Keep the canonical Status until a missing default or changed reference requires a staged recipe; preserve supplied statuses and shared/indexed reference identities.
  • Build recipe-position dictionaries only when a second distinct field is needed.
  • Use canonical status directly for applications without temporal inputs or private output routing; retain validation, conversion diagnostics, default precedence, staged writes and private views.
  • Add regression coverage for these contracts, including empty/invalid statuses and producer aliases.
  • Increase the CI test-job timeout from 60 to 120 minutes, keeping the full test suite, coverage and six-entry Julia/OS matrix unchanged. The previous run on main also exceeded 60 minutes, while a successful latest-Julia run of this PR took nearly 54 minutes for the tests alone.

The runtime change is confined to compilation and its focused tests; the additional workflow change lets the existing suite finish on slower runners. Scientific models and benchmark bodies are unchanged.

Performance

These measurements describe the original optimization revision (de089172) and its benchmark baselines, before the subsequent merge of main and CI-timeout change. They have not been rerun on the updated PR head.

Targeted warmed preparation improves from 144.523 to 119.556 ms (17.28%) for width-64 bindings over 256 objects, and from 358.151 to 315.730 ms (11.84%) for fully populated width-128 bindings (30 samples each). These extended fixtures are separate from the standard CI suite.

The longer Many hard-call control improves 8.94% against the then-current main but remains 19.04% slower than the commit preceding the original compilation change. The inherited cold compilation gain is retained: one width-128 first-run observation is 79.513 s before the original change, 8.068 s on that main baseline, and 8.168 s on the optimization revision. Cold compiler-inclusive allocation is about 7.4–7.6 MB higher than that main baseline. No universal speedup or absence of regression is claimed.

A separate benchmark comment records CI-common cases and full XPalm / PlantBiophysics integrations, including residual regressions and sampling limits.

Validation of the updated PR head

The PR includes the current main and the CI-timeout fix. Fresh CI and downstream integration runs target c2bc295dd5faa77eec1d7265e829b0d383b4d62f.

  • All six full Julia test steps passed (Julia 1.10 and latest stable on Ubuntu, Windows and macOS). The Julia 1.10 Ubuntu log reports 4,895/4,895 assertions. Graph editor E2E and documentation (including doctests) also passed. The entire CI workflow is green, including post-test cache uploads. The latest-Julia Ubuntu job completed in 1 h 1 min 9 s, confirming that the previous 60-minute limit would have cancelled a passing suite.
  • PlantGeom and PlantBiophysics integrations passed.
  • XPalm integration fails because current XPalm already uses the distributed-output API supplied by Declare distributed outputs and clarify scenario authoring #216, while main and this PR still use the earlier API. The errors reject tuple outputs_to and tuple OutputTo(...; vars=...) declarations before the corresponding allocation tests can run. This is the existing API mismatch resolved by Declare distributed outputs and clarify scenario authoring #216, rather than a status-preparation regression. The combined changes in Declare distributed outputs and clarify scenario authoring #216 have since passed all three fresh downstream integrations (XPalm, PlantGeom and PlantBiophysics) on 520d903: integration run. This confirms compatibility with the successor API; this PR's own XPalm check remains red. No compatibility shim or skipped test was added here.
  • The benchmark workflow is separate from these correctness checks; its dependency-resolution failure does not provide fresh performance measurements.

Earlier local evidence

The original optimization revision completed adapted package suites: PlantSimEngine 4,498/4,498; XPalm 1,397/1,397; PlantBiophysics 369/369. XPalm includes the complete 4,160-step oracle and read-only static PNG comparison. Full XPalm and PlantBiophysics checked results agreed across all three revisions tested at that time.

These were Kaimon-managed runs in a shared pinned environment, not unmodified Pkg.test invocations: Aqua stale_deps and persistent_tasks subprocess checks were omitted; PSE ambiguity checking ran in-process, while downstream packages retained their existing disabled ambiguity checks. Optional PlantBiophysics ArchimedLight integration is outside the default runner. This historical local evidence does not assert GitHub CI success on the updated head or compatibility with later downstream changes.

MAESPA initialization also preserved all 2,962 checked initial values/container trees and 17 carrier records against the then-current main, including 38 producer-reference aliases. An inherited main fix changes 17 carrier fields relative to the earlier parent, so parent equality is not claimed. No scientific MAESPA timestep was validated. Its single cold initialization was 184.510 s on that main baseline versus 205.888 s on the optimization revision (+11.59%); later fresh-scene observations were +11.14% and +0.16%.

@VEZY

VEZY commented Sep 6, 2026

Copy link
Copy Markdown
Member Author

Local benchmark results

References: parent 892a7784 (before the original compilation commit), base 3c04a39c (current main, after that commit), candidate de089172 (this PR). Positive percentages mean slower. Measurements used Julia 1.12.1, 10 threads, Apple M3/macOS; these are local measurements, not GitHub runner timings.

The standard AirspeedVelocity CI uses Julia 1.12.1 on Ubuntu and disables downstream cases. The appendix below covers the common PSE benchmark names. Separate CI integration jobs use different configurations (for example PlantBiophysics 1 thread / 1,000 steps / fanout 20); the full integrations below use the scientific fixture/oracle family but are not exact replays of those jobs.

Longer matched controls

One matched control block, using trial medians:

Case Candidate vs base Candidate vs parent
Full PSE +0.01% +5.02%
XPalm no outputs, 100 steps +0.20% +23.22%
Many hard calls −8.94% +19.04%
Organ refresh, 1,024 objects −11.33% +10.83%
Object-reference sum, 100,000 −7.29% −0.95%
Status registry sweep, 256 +2.80% +0.25%

XPalm's suite-context no-output case was +8.52%, +9.48%, and +16.32% slower than base in three passes. Two fresh ABBA pairs instead gave +0.1147% and +0.4354%, consistent with the longer control. The context discrepancy remains unexplained; it is not evidence of guaranteed regression-free execution. Allocation improves by 424,576 bytes / 4,588 allocations against base in that case, but the longer control remains 647,776 bytes / 11,216 allocations above parent.

Full downstream integrations

One measured warm scene per mode and revision. Construction, execution and table collection are separate phases. Seconds below are observations, not repeated timing estimates.

Scenario / outputs Phase Parent (s) Base (s) Candidate (s)
XPalm, 4,160 days / none Construction 0.007662 0.007288 0.008131
Execution 4.130062 4.235369 4.116672
Collection 0.019458 0.019095 0.019805
XPalm, 4,160 days / reference Construction 0.005118 0.005424 0.006068
Execution 4.249472 4.119006 4.080797
Collection 0.229302 0.220966 0.219688
PlantBiophysics, 8,760 steps / none Construction 0.017423 0.019413 0.019726
Execution 0.012445 0.013212 0.012975
Collection 0.00000950 0.00000546 0.00000425
PlantBiophysics, 8,760 steps / all Construction 0.019199 0.018950 0.019283
Execution 0.014896 0.013541 0.013927
Collection 0.219032 0.218015 0.206446

XPalm has architecture generation disabled and grows from 8 to 1,197 objects. Reference outputs produce 70,720 rows; even outputs=:none retains 4,456 internal rows. Candidate reference execution plus collection is about 4.30 seconds. A single observation cannot establish the causal overhead of requesting outputs, or exclude a small regression.

PlantBiophysics uses one object and 8,760 synthetic hourly forcing steps: all outputs produce 113,880 rows, none produces zero. Its roughly 206 ms table collection dominates the roughly 14 ms execution; execution alone is not the total scenario cost.

Checked state, topology, rows and trajectories agree across revisions. XPalm reference floating-point comparisons use rtol=atol=1e-8 with exact discrete checks; checked native cross-revision trajectories agree exactly. Source pins: XPalm e7f1a1e11ac4fa022e0fd85bc73442e95ff4bfec; PlantBiophysics 443808f1f001680e6843fc508c98dc68f5290efe.

Full XPalm execution allocates about 19.5 MB and 205,000 allocations less than base, but about 17.3 MB and 466,000 allocations more than parent. No-output collection adds 980,672 bytes / 34,415 allocations against base. These are allocation totals, not peak resident memory.

Common CI benchmark ledger

Each cell gives the median of the available paired pass ratios, followed by their range. There is no pooled overall speedup. Some cases have only one pass; small cases can be timer-sensitive, and overlapping trial distributions are not formal significance tests. Per-trial sample counts vary. Allocation deltas use trial minima, not peak memory. All observed PSE cases are retained, including regressions.

All common PSE cases: timings and allocation changes
Case Passes vs base %, median [range] vs parent %, median [range] Bytes Δ vs base [range] Allocations Δ vs base [range]
PSE 3 +4.32 [-5.43, +8.57] +3.99 [+1.83, +6.91] [-19535344, -18766656] [-201672, -200113]
PSE_assign_outputs_broadcast_exact_10 1 -0.24 [-0.24, -0.24] -0.24 [-0.24, -0.24] [+0, +0] [+0, +0]
PSE_assign_outputs_broadcast_exact_1000 3 +14.29 [-6.67, +31.84] +5.04 [+3.60, +20.05] [+0, +0] [+0, +0]
PSE_assign_outputs_broadcast_exact_10000 1 -5.25 [-5.25, -5.25] -10.30 [-10.30, -10.30] [+0, +0] [+0, +0]
PSE_assign_outputs_columns_19columns_exact_1000 1 -12.76 [-12.76, -12.76] -21.51 [-21.51, -21.51] [+0, +0] [+0, +0]
PSE_assign_outputs_columns_2columns_exact_10 1 +0.00 [+0.00, +0.00] +0.00 [+0.00, +0.00] [+0, +0] [+0, +0]
PSE_assign_outputs_columns_2columns_exact_1000 3 +16.67 [-7.03, +25.02] -4.78 [-7.03, +22.10] [+0, +0] [+0, +0]
PSE_assign_outputs_columns_2columns_exact_10000 1 +3.35 [+3.35, +3.35] +3.95 [+3.95, +3.95] [+0, +0] [+0, +0]
PSE_assign_outputs_columns_2columns_permuted_10 3 +14.04 [+14.04, +43.30] -13.03 [-38.45, +0.00] [+0, +0] [+0, +0]
PSE_assign_outputs_columns_2columns_permuted_1000 3 +22.99 [+5.22, +26.68] +10.81 [+1.03, +15.63] [+0, +0] [+0, +0]
PSE_assign_outputs_columns_2columns_permuted_10000 1 -0.20 [-0.20, -0.20] -0.70 [-0.70, -0.70] [+0, +0] [+0, +0]
PSE_assign_outputs_columns_7columns_exact_1000 1 -15.96 [-15.96, -15.96] -22.52 [-22.52, -22.52] [+0, +0] [+0, +0]
PSE_assign_outputs_columns_exact_10 3 +8.93 [+0.00, +20.19] -24.92 [-45.53, +19.62] [+0, +0] [+0, +0]
PSE_assign_outputs_columns_exact_1000 3 +17.65 [+12.13, +50.96] +32.73 [+25.00, +48.11] [+0, +0] [+0, +0]
PSE_assign_outputs_columns_exact_10000 1 -2.61 [-2.61, -2.61] -1.03 [-1.03, -1.03] [+0, +0] [+0, +0]
PSE_assign_outputs_columns_heterogeneous_exact_10 3 +0.00 [+0.00, +8.40] -29.38 [-36.87, +0.00] [+0, +0] [+0, +0]
PSE_assign_outputs_columns_heterogeneous_exact_1000 1 +2.90 [+2.90, +2.90] +4.76 [+4.76, +4.76] [+0, +0] [+0, +0]
PSE_assign_outputs_columns_heterogeneous_exact_10000 1 -3.82 [-3.82, -3.82] +3.25 [+3.25, +3.25] [+0, +0] [+0, +0]
PSE_assign_outputs_columns_permuted_10 3 +0.00 [+0.00, +25.00] -33.33 [-33.33, +25.00] [+0, +0] [+0, +0]
PSE_assign_outputs_columns_permuted_1000 3 +8.42 [+2.69, +38.36] +30.93 [+6.64, +40.67] [+0, +0] [+0, +0]
PSE_assign_outputs_columns_permuted_10000 3 +0.72 [-1.71, +5.15] +3.97 [-3.37, +11.07] [+0, +0] [+0, +0]
PSE_assign_outputs_control_10 3 +0.00 [-19.71, +0.48] -33.20 [-33.20, +25.53] [+0, +0] [+0, +0]
PSE_assign_outputs_control_1000 3 -14.38 [-14.38, +33.33] -24.92 [-25.04, +0.00] [+0, +0] [+0, +0]
PSE_assign_outputs_control_10000 3 +3.36 [-11.54, +65.24] +47.66 [-8.06, +111.07] [+0, +0] [+0, +0]
PSE_assign_outputs_ref_loop_2columns_exact_10 3 +0.00 [-16.40, +30.05] -33.33 [-44.27, +8.20] [+0, +0] [+0, +0]
PSE_assign_outputs_ref_loop_2columns_exact_1000 3 +7.17 [-14.29, +11.97] -10.71 [-18.21, +19.79] [+0, +0] [+0, +0]
PSE_assign_outputs_ref_loop_2columns_exact_10000 1 -2.14 [-2.14, -2.14] -8.03 [-8.03, -8.03] [+0, +0] [+0, +0]
PSE_assign_outputs_ref_loop_exact_10 1 +0.00 [+0.00, +0.00] +0.00 [+0.00, +0.00] [+0, +0] [+0, +0]
PSE_assign_outputs_ref_loop_exact_1000 3 +33.31 [+0.00, +49.97] +5.31 [-17.68, +7.84] [+0, +0] [+0, +0]
PSE_assign_outputs_ref_loop_exact_10000 1 -6.42 [-6.42, -6.42] -7.47 [-7.47, -7.47] [+0, +0] [+0, +0]
PSE_assign_outputs_ref_loop_heterogeneous_exact_10 3 +5.44 [-9.17, +9.83] -44.40 [-50.12, +22.13] [+0, +0] [+0, +0]
PSE_assign_outputs_ref_loop_heterogeneous_exact_1000 3 +4.43 [+0.84, +9.23] -3.56 [-10.75, +6.23] [+0, +0] [+0, +0]
PSE_assign_outputs_ref_loop_heterogeneous_exact_10000 1 -5.08 [-5.08, -5.08] +1.06 [+1.06, +1.06] [+0, +0] [+0, +0]
PSE_assign_outputs_table_2columns_exact_10 3 +0.00 [-11.20, +28.64] -38.56 [-63.13, +28.42] [+0, +0] [+0, +0]
PSE_assign_outputs_table_2columns_exact_1000 3 -3.91 [-8.69, +31.89] +3.16 [-6.67, +14.29] [+0, +0] [+0, +0]
PSE_assign_outputs_table_2columns_exact_10000 1 -2.03 [-2.03, -2.03] -0.80 [-0.80, -0.80] [+0, +0] [+0, +0]
PSE_assign_outputs_table_2columns_permuted_10 3 +0.00 [+0.00, +21.61] -38.56 [-56.16, -5.47] [+0, +0] [+0, +0]
PSE_assign_outputs_table_2columns_permuted_1000 3 +3.42 [-5.56, +20.90] +4.06 [-9.60, +18.73] [+0, +0] [+0, +0]
PSE_assign_outputs_table_2columns_permuted_10000 1 +1.94 [+1.94, +1.94] -2.82 [-2.82, -2.82] [+0, +0] [+0, +0]
PSE_assign_outputs_table_exact_10 3 +16.40 [-14.09, +45.32] -30.22 [-45.53, +33.40] [+0, +0] [+0, +0]
PSE_assign_outputs_table_exact_1000 3 +48.06 [+8.35, +48.95] +19.40 [+3.98, +45.90] [+0, +0] [+0, +0]
PSE_assign_outputs_table_exact_10000 1 -4.07 [-4.07, -4.07] -7.09 [-7.09, -7.09] [+0, +0] [+0, +0]
PSE_assign_outputs_table_permuted_10 3 +16.80 [+7.58, +50.00] -41.60 [-41.80, +28.87] [+0, +0] [+0, +0]
PSE_assign_outputs_table_permuted_1000 3 +22.21 [-6.42, +26.64] +11.71 [-3.28, +24.20] [+0, +0] [+0, +0]
PSE_assign_outputs_table_permuted_10000 3 +4.08 [-2.24, +6.40] +2.43 [-4.02, +6.45] [+0, +0] [+0, +0]
PSE_bound_many_input_steps_1000 3 +2.46 [+1.75, +4.06] -7.71 [-20.33, +2.95] [+0, +0] [+0, +0]
PSE_bound_many_sum_1000 3 +8.83 [+0.00, +11.57] -36.84 [-47.27, -2.71] [+0, +0] [+0, +0]
PSE_bound_many_sum_100000 3 -0.83 [-5.54, +3.98] +1.80 [-10.28, +7.02] [+0, +0] [+0, +0]
PSE_bound_objectref_sum_1000 3 +7.94 [+4.98, +12.32] -32.47 [-47.34, +1.29] [+0, +0] [+0, +0]
PSE_bound_objectref_sum_100000 3 +4.70 [+4.03, +5.74] +5.79 [+5.17, +8.44] [+0, +0] [+0, +0]
PSE_call_binding_signature_4096 3 +20.74 [+0.00, +40.89] -6.04 [-38.78, -1.39] [+0, +0] [+0, +0]
PSE_compiled_hard_call_heterogeneous 3 -1.89 [-12.41, -0.47] -53.04 [-56.36, -11.30] [-5984, -5760] [-83, -79]
PSE_compiled_hard_call_many 3 -8.50 [-10.01, -8.43] +3.30 [-6.54, +3.52] [-1816592, -1814128] [-25460, -25306]
PSE_compiled_hard_call_nested 3 -8.74 [-21.18, -3.46] -34.30 [-41.90, -28.26] [-6000, -5664] [-85, -79]
PSE_compiled_hard_call_published 3 -6.35 [-16.85, -3.35] -25.27 [-31.21, -19.68] [-4112, -3888] [-58, -54]
PSE_compiled_hard_call_repeated 3 -8.04 [-21.40, -6.15] -29.47 [-33.79, -28.84] [-4112, -3888] [-58, -54]
PSE_compiled_hard_call_sampled_environment 3 -5.77 [-19.87, -0.12] -31.70 [-37.06, -24.23] [-4096, -3872] [-58, -54]
PSE_compiled_hard_call_singular 3 -2.64 [-4.02, +1.56] -21.75 [-32.40, -20.92] [-4112, -3888] [-58, -54]
PSE_distributed_assign_broadcast_10 1 +0.00 [+0.00, +0.00] -50.00 [-50.00, -50.00] [+0, +0] [+0, +0]
PSE_distributed_assign_broadcast_1000 3 +0.00 [+0.00, +0.00] -27.27 [-56.35, +8.93] [+0, +0] [+0, +0]
PSE_distributed_assign_broadcast_10000 1 -10.72 [-10.72, -10.72] -10.72 [-10.72, -10.72] [+0, +0] [+0, +0]
PSE_distributed_assign_columns_10 1 +0.00 [+0.00, +0.00] +0.00 [+0.00, +0.00] [+0, +0] [+0, +0]
PSE_distributed_assign_columns_1000 1 +0.00 [+0.00, +0.00] -4.58 [-4.58, -4.58] [+0, +0] [+0, +0]
PSE_distributed_assign_columns_10000 1 +3.70 [+3.70, +3.70] -3.45 [-3.45, -3.45] [+0, +0] [+0, +0]
PSE_distributed_assign_exact_10 1 +0.00 [+0.00, +0.00] +2.44 [+2.44, +2.44] [+0, +0] [+0, +0]
PSE_distributed_assign_exact_1000 1 +0.00 [+0.00, +0.00] -15.24 [-15.24, -15.24] [+0, +0] [+0, +0]
PSE_distributed_assign_exact_10000 3 +2.04 [+0.42, +6.17] -0.80 [-14.97, +3.76] [+0, +0] [+0, +0]
PSE_distributed_assign_exact_100000 1 -6.29 [-6.29, -6.29] -4.00 [-4.00, -4.00] [+0, +0] [+0, +0]
PSE_distributed_assign_heterogeneous_10 1 +0.00 [+0.00, +0.00] +0.00 [+0.00, +0.00] [+0, +0] [+0, +0]
PSE_distributed_assign_heterogeneous_1000 1 -7.91 [-7.91, -7.91] -3.85 [-3.85, -3.85] [+0, +0] [+0, +0]
PSE_distributed_assign_heterogeneous_10000 1 -6.41 [-6.41, -6.41] -1.86 [-1.86, -1.86] [+0, +0] [+0, +0]
PSE_distributed_assign_permuted_10 1 +0.00 [+0.00, +0.00] +0.00 [+0.00, +0.00] [+0, +0] [+0, +0]
PSE_distributed_assign_permuted_1000 1 -5.79 [-5.79, -5.79] -2.98 [-2.98, -2.98] [+0, +0] [+0, +0]
PSE_distributed_assign_permuted_10000 1 -3.67 [-3.67, -3.67] -12.47 [-12.47, -12.47] [+0, +0] [+0, +0]
PSE_distributed_assign_permuted_100000 1 -1.90 [-1.90, -1.90] -2.49 [-2.49, -2.49] [+0, +0] [+0, +0]
PSE_distributed_assign_sparse_10 3 +0.00 [-2.38, +2.44] +0.00 [+0.00, +4099900.00] [+0, +0] [+0, +0]
PSE_distributed_assign_sparse_1000 1 -25.15 [-25.15, -25.15] +0.00 [+0.00, +0.00] [+0, +0] [+0, +0]
PSE_distributed_assign_sparse_10000 3 +3.54 [+2.33, +22.92] +6.41 [-4.27, +7.34] [+0, +0] [+0, +0]
PSE_distributed_assign_status_10 1 +2.44 [+2.44, +2.44] +0.00 [+0.00, +0.00] [+0, +0] [+0, +0]
PSE_distributed_assign_status_1000 3 +0.00 [-14.24, +8.30] -45.47 [-50.00, +8.40] [+0, +0] [+0, +0]
PSE_distributed_assign_status_10000 1 -7.83 [-7.83, -7.83] -3.77 [-3.77, -3.77] [+0, +0] [+0, +0]
PSE_distributed_compile_active_1000 3 -1.80 [-7.13, +1.37] -17.81 [-47.95, -5.93] [-500960, -500176] [-6216, -6167]
PSE_distributed_compile_none_1000 3 +1.32 [-0.84, +14.32] -35.12 [-49.75, +16.65] [-1904, -1904] [-25, -25]
PSE_distributed_compile_permutation_1000 1 -0.11 [-0.11, -0.11] +0.06 [+0.06, +0.06] [+0, +0] [+0, +0]
PSE_distributed_lifecycle_add_1000 3 -3.07 [-4.80, +2.26] -15.93 [-41.42, -1.44] [-836592, -835776] [-13240, -13189]
PSE_distributed_mapping_refresh_10 1 +0.00 [+0.00, +0.00] -7.66 [-7.66, -7.66] [+0, +0] [+0, +0]
PSE_distributed_mapping_refresh_1000 1 -0.95 [-0.95, -0.95] -2.10 [-2.10, -2.10] [+0, +0] [+0, +0]
PSE_distributed_mapping_refresh_10000 1 +2.25 [+2.25, +2.25] +1.10 [+1.10, +1.10] [+0, +0] [+0, +0]
PSE_hard_calls_dense 3 -4.70 [-6.50, -0.91] -7.36 [-12.61, -0.30] [-2643488, -2531264] [-41217, -39213]
PSE_hard_calls_sparse 3 -9.23 [-9.25, -4.88] +2.49 [+2.09, +10.83] [-1941872, -1940784] [-30348, -30280]
PSE_hard_calls_zero 3 -9.33 [-9.44, -8.16] +1.26 [+0.35, +1.30] [-1940992, -1939296] [-30320, -30214]
PSE_immutable_scenario_all 3 +0.95 [+0.83, +9.05] -18.93 [-28.70, +0.77] [+0, +0] [+0, +0]
PSE_immutable_scenario_none 3 -0.06 [-0.83, +7.45] -15.25 [-17.90, -0.26] [+0, +0] [+0, +0]
PSE_immutable_scenario_requests 3 -0.23 [-0.97, +9.48] -8.20 [-13.66, +2.18] [+0, +0] [+0, +0]
PSE_lifecycle_immediate_hard_call 3 +0.07 [-5.90, +1.64] -0.63 [-4.99, +2.21] [-2944, -2832] [-45, -43]
PSE_lifecycle_large 1 -0.48 [-0.48, -0.48] -5.58 [-5.58, -5.58] [-2240, -2240] [-34, -34]
PSE_lifecycle_small 3 -13.33 [-37.48, -9.53] -42.13 [-47.88, +5.16] [-2240, -2240] [-34, -34]
PSE_many_cadence_schedule 1 -1.86 [-1.86, -1.86] -1.36 [-1.36, -1.36] [+0, +0] [+0, +0]
PSE_multirate_no_output_run 3 -2.47 [-18.61, +9.16] -1.36 [-9.19, +23.55] [-3628992, -3627216] [-50051, -49951]
PSE_multirate_output_request_run 3 -13.02 [-23.39, +7.50] -3.16 [-8.16, -2.80] [-3627840, -3627008] [-49990, -49937]
PSE_multirate_retain_all_run 3 -15.87 [-23.00, +17.56] -14.61 [-24.43, +19.06] [-3628736, -3627264] [-50045, -49954]
PSE_objectref_sum_1000 3 +0.00 [-1.94, +6.05] -44.27 [-47.07, +13.39] [+0, +0] [+0, +0]
PSE_objectref_sum_100000 3 -5.04 [-7.68, +5.99] +5.07 [+4.59, +11.46] [+0, +0] [+0, +0]
PSE_organ_adaptation_1024 1 -18.45 [-18.45, -18.45] -16.83 [-16.83, -16.83] [+0, +0] [+0, +0]
PSE_organ_adaptation_256 1 -22.79 [-22.79, -22.79] -14.75 [-14.75, -14.75] [+0, +0] [+0, +0]
PSE_organ_adaptation_32 1 -22.51 [-22.51, -22.51] -8.15 [-8.15, -8.15] [+0, +0] [+0, +0]
PSE_organ_add_1024 1 -22.08 [-22.08, -22.08] -12.04 [-12.04, -12.04] [+0, +0] [+0, +0]
PSE_organ_add_256 1 -34.42 [-34.42, -34.42] -7.24 [-7.24, -7.24] [+0, +0] [+0, +0]
PSE_organ_add_32 1 -24.62 [-24.62, -24.62] -7.18 [-7.18, -7.18] [+0, +0] [+0, +0]
PSE_organ_add_continue_1024 3 -7.80 [-13.44, -4.96] -2.47 [-7.54, -1.40] [-2976, -2976] [-43, -43]
PSE_organ_add_continue_256 1 -43.20 [-43.20, -43.20] -27.62 [-27.62, -27.62] [-2976, -2976] [-43, -43]
PSE_organ_add_continue_32 1 -27.54 [-27.54, -27.54] -12.87 [-12.87, -12.87] [-2976, -2976] [-43, -43]
PSE_organ_add_refresh_1024 3 -20.44 [-24.91, -18.31] -11.70 [-12.72, -7.83] [-2976, -2976] [-43, -43]
PSE_organ_add_refresh_256 3 -32.08 [-39.98, -21.80] -26.94 [-50.70, +3.64] [-2976, -2976] [-43, -43]
PSE_organ_add_refresh_32 3 -24.65 [-55.22, -19.40] -47.57 [-63.43, -42.26] [-2976, -2976] [-43, -43]
PSE_organ_refresh_1024 3 -4.75 [-12.32, -1.01] -0.93 [-11.57, +9.46] [-2976, -2976] [-43, -43]
PSE_organ_refresh_256 1 -36.58 [-36.58, -36.58] -15.38 [-15.38, -15.38] [-2976, -2976] [-43, -43]
PSE_organ_refresh_32 1 -55.61 [-55.61, -55.61] -19.27 [-19.27, -19.27] [-2976, -2976] [-43, -43]
PSE_organ_status_recipe_refresh_1024 3 -14.79 [-17.70, -9.85] -9.55 [-9.97, +8.06] [-9664, -9664] [-237, -237]
PSE_organ_status_recipe_refresh_256 3 -8.33 [-12.55, -5.14] -6.50 [-8.01, +4.73] [-9632, -9632] [-235, -235]
PSE_organ_status_recipe_refresh_32 3 +1.34 [-18.15, +14.70] -26.31 [-31.30, +4.84] [-9648, -9648] [-236, -236]
PSE_refvector_sum_1000 1 -20.00 [-20.00, -20.00] -2.66 [-2.66, -2.66] [+0, +0] [+0, +0]
PSE_refvector_sum_100000 1 +2.75 [+2.75, +2.75] -1.64 [-1.64, -1.64] [+0, +0] [+0, +0]
PSE_selector_subtree_root_2048 3 -6.80 [-8.41, -3.44] -3.04 [-8.32, -2.61] [-896, +320] [-56, +20]
PSE_selector_subtree_tip_2048 1 -14.69 [-14.69, -14.69] +0.36 [+0.36, +0.36] [+0, +0] [+0, +0]
PSE_status_many_input_steps_1000 1 +2.15 [+2.15, +2.15] +3.38 [+3.38, +3.38] [+0, +0] [+0, +0]
PSE_status_read_write 3 +0.00 [+0.00, +0.00] +0.00 [+0.00, +0.00] [+0, +0] [+0, +0]
PSE_status_registry_lookup_1024 3 +25.00 [-16.67, +41.60] +25.00 [+25.00, +41.60] [+0, +0] [+0, +0]
PSE_status_registry_lookup_256 3 +32.80 [+24.92, +66.40] +66.40 [+0.00, +66.40] [+0, +0] [+0, +0]
PSE_status_registry_lookup_32 1 +0.00 [+0.00, +0.00] +0.00 [+0.00, +0.00] [+0, +0] [+0, +0]
PSE_status_registry_sweep_1024 1 +1.15 [+1.15, +1.15] +3.96 [+3.96, +3.96] [+0, +0] [+0, +0]
PSE_status_registry_sweep_256 3 +7.22 [+5.69, +8.60] +6.49 [+3.20, +8.43] [+0, +0] [+0, +0]
PSE_status_registry_sweep_32 3 +10.01 [+1.87, +12.00] +16.65 [+12.25, +17.00] [+0, +0] [+0, +0]

Additional extended OptionalOne tests retain parent-relative slowdowns: absent sources +11–12%, present sources +23–30%. These are separate from the common-case ledger. The PR description also records the adverse MAESPA initialization observation and test-environment limitations.

Raw samples and the complete local audit were preserved in an immutable evidence archive (SHA-256 0a3116668344459f265c9bf613a90c6c2834c7c5f2779a6848125bdcebf5d7af). The archive is local, not attached to this PR.

@VEZY
VEZY marked this pull request as ready for review September 16, 2026 12:32
@VEZY
VEZY merged commit 94c87bf into main Sep 16, 2026
12 of 15 checks passed
@VEZY
VEZY deleted the codex/compile-runtime-lifecycle-perf branch September 16, 2026 12:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant