Files
smoothlife/plans/11_performance_portability_and_release.md
Federico Pasqua 51cff7b0f3 Add detailed phase plans for foundational macrosteps
- Macrostep 00: Model contract and retained historical options.
- Macrostep 01: Project foundation and configuration, including schema, presets, CLI, and CI setup.
- Macrostep 02: Mathematical core implementation and deterministic oracles.
- Macrostep 03: CPU-based planar simulation engine, FFT backend, and headless runner.

Provides exhaustive objectives, phase breakdowns, validation policies, and deliverables for each macrostep.
2026-07-14 16:50:54 +02:00

7.1 KiB
Raw Blame History

Macrostep 11 — Performance, portability, and release

Objective

Harden the complete simulator into a measurable, portable, supportable release. Optimize only verified bottlenecks while preserving CPU/GPU stage parity and deterministic replay.

Dependencies

All mandatory behavior in Macrosteps 0009 complete. Required analysis tooling from Macrostep 10 complete.

Phase 11.1 — Benchmark suite and budgets

Substep 11.1.1 — CPU benchmarks

Benchmark in release mode:

  • curve/rule surface evaluation;
  • kernel generation;
  • direct oracle at small sizes;
  • 1-D/2-D/3-D FFT and convolution;
  • Euler, AB3, and RK4 base steps, including both RK4 relaxation references;
  • all multiscale policies;
  • reduced sphere and DT oracle steps;
  • state upload/export.

Substep 11.1.2 — GPU timings

Use timer queries where reliable and separate:

  • standard and legacy packed-unitary FFT stages;
  • algorithm-specific kernel multiplication/inverses;
  • rule/integration, including both RK4 relaxation references;
  • multiscale passes under each supported FFT algorithm;
  • corrected and legacy sphere stencils;
  • delayed-time stencil/commit;
  • 3-D ray marching;
  • UI/render cost.

Avoid glFinish() in normal operation. Record p50/p95 and warm-up methodology.

Substep 11.1.3 — Baseline policy

Commit benchmark metadata for designated hardware/software. Flag median regressions above 1015% for review, but keep hardware-dependent gates out of ordinary CI. Correctness tolerances remain blocking everywhere.

Phase 11.2 — Measured optimization

CPU

  • reuse plans, spectra, and scratch buffers;
  • parallelize transform lines and pointwise passes after deterministic tests;
  • improve cache locality and avoid unnecessary complex copies;
  • vectorize only with readable fallback and measured benefit.

GPU

  • reuse state forward transforms;
  • fuse only pointwise passes whose separate inspection output can still be produced on demand;
  • cache shader specializations and uniform locations;
  • precompute sphere/DT stencil metadata;
  • adapt raymarch quality independently from simulation quality;
  • never introduce per-frame allocation/readback.

Every optimization requires before/after stage parity plus benchmark evidence.

Phase 11.3 — Memory and resource management

  • Estimate CPU RAM and GPU VRAM before every cold rebuild.
  • Include state, histories, RK/AB buffers, spectra, atlas padding, render targets, and capture staging.
  • Enforce configurable soft/hard budgets.
  • Fall back to the previous valid configuration on allocation failure.
  • Expose a resource report in the diagnostics panel.
  • Stress repeated backend/variant/resolution switching and verify stable resource counts.

Recommended interactive profiles should be realistic; do not advertise legacy shortcut sizes such as 512³ when memory/performance makes them unusable.

Phase 11.4 — Portability matrix

Primary tier

  • Linux desktop;
  • Windows desktop;
  • macOS supported raylib/OpenGL path, with limitations documented.

Target OpenGL 3.3 core-compatible behavior and CPU fallback where float-FBO requirements fail. Web/GLES remains secondary until separately implemented and tested.

CI

Run:

  • formatting and Clippy with the declared toolchain;
  • all headless tests on primary OSes;
  • raylib application compilation on primary OSes;
  • bundled preset/schema validation;
  • shader compilation/static validation;
  • hidden-window Mesa/Xvfb GPU smoke tests on Linux when stable;
  • packaging smoke tests from directories unrelated to the repository.

Document driver-specific tolerances instead of accepting arbitrary output drift.

Phase 11.5 — Operational hardening

Substep 11.5.1 — File behavior

  • user config/data/captures use platform directories;
  • atomic settings/preset writes;
  • collision-safe captures;
  • no writes beside the executable;
  • clear migration/backup policy for future schema versions.

Substep 11.5.2 — Failure behavior

Test missing/corrupt config, invalid preset, shader failure, unsupported GPU, OOM/preflight rejection, minimized window, resize storms, and failed state import. Standard auto mode falls back to CPU when possible and displays why; explicit LegacyPackedUnitary fails clearly rather than changing algorithms.

Substep 11.5.3 — Diagnostics

A copyable report includes version, OS, raylib/OpenGL/GLSL, backend, FFT algorithm, relevant RK4 reference or sphere model, capabilities, preset/run descriptor, memory estimate, and recent errors. Logs rotate or remain bounded.

Phase 11.6 — Documentation and packaging

Write:

  • project README with screenshots and quick start;
  • mathematical model and retained historical-options guide;
  • controls/UI reference;
  • configuration schema with examples for every variant;
  • CPU/GPU backend and tolerance explanation;
  • performance and memory tuning guide;
  • troubleshooting and driver fallback guide;
  • contributor architecture/testing guide;
  • release notes listing intentional differences from legacy.

Package binaries, embedded/packaged shaders, preset catalogues, licenses, and example configs. Verify clean-machine installation and launch.

Phase 11.7 — Final acceptance matrix

Functional

  • Base 1-D/2-D/3-D: modes 0/1/2 and Euler/AB3/RK4.
  • Multiscale 2-D: both neighborhood interpretations and all three compositions.
  • Retained options: both RK4 relaxation references and both FFT algorithms where supported.
  • Sphere: complete Corrected and Legacy models with discrete/fixed-smooth dynamics.
  • DT: one causal 16-layer distance-delay model with both update modes.
  • Every backend exposes its required logic channels.

Numerical

  • Direct↔standard CPU↔standard GPU tolerances pass, and legacy packed GPU stages/final convolution pass their dedicated CPU-oracle tolerances.
  • State remains finite and committed values remain [0,1].
  • Deterministic reset/replay works for CPU; GPU is reproducible within documented tolerance.
  • Retained historical options use safe deterministic infrastructure; no undefined historical behavior exists in any path.

Performance/resource

  • No steady-state allocation or readback.
  • Reference profiles meet recorded responsiveness targets or ship with lower documented defaults.
  • Memory preflight and transactional failure paths work.

Product

  • Presets, controls, captures, state replay, and diagnostics are discoverable.
  • Launch never depends on the old repository or current working directory.
  • Primary-platform packages pass smoke tests.

Deliverables

  • Baselines and optimized implementations with preserved parity.
  • Primary-platform CI/build/package pipeline.
  • Complete user/contributor documentation.
  • Signed-off functional/numerical/performance acceptance matrix.

Exit gate

Release only when every mandatory matrix row is implemented, tested, and documented; all bundled presets validate; CPU fallback can execute every simulation variant using its CPU-supported standard options; explicit LegacyPackedUnitary requests remain GPU-only and fail rather than substitute; GPU acceleration passes reference-profile smoke tests; and no blocking diagnostic, resource leak, undefined feedback path, or runtime dependency on legacy files remains.