Skip to content

GPU resident checkpoints

Current controllers create schema-v3 checkpoints; v1 noncommunication and v2 communication checkpoints remain restart-compatible. Resident communication is a concrete-only closed-map barrier: communication runs before optional prescribed volume evolution, and both invalidate saturation ratio only.

The barrier resources and executor are direct imports under particula.execution; they are not package or top-level exports. Schema-v2 restart creates fresh communication arrays and bindings rather than reusing source identities.

The direct-import-only checkpoint boundary is available from particula.execution.checkpoint; it is deliberately not exported by particula.execution or the top-level package. Create a ResidentCheckpointController for one active ResidentSession, its pinned GPUResourceRegistry, and its ResidentStepGuard, or use the session's checkpoint(registry, guard) and finalize(registry, guard) methods.

checkpoint() is nonterminal and returns a fresh immutable host snapshot. finalize() is terminal and idempotent only when called again with the exact bound session, pinned registry, and closed guard. After its first successful call the session is FINALIZED and later calls with that matching binding return the cached snapshot without device work; mismatched or invalid bindings are rejected. Checkpoints are explicit in-memory, same-device recovery only. They do not serialize to disk, select or migrate a device, synchronize implicitly during restart, or provide rollback after a device writer has launched.

The snapshot owns immutable canonical bytes for primary arrays and acquired sidecars, plus detached CPU inspection carriers. Inspection GasData is intentionally lossy because CPU gas carriers do not contain GPU vapor pressure; restart uses canonical bytes and restores vapor pressure exactly. Snapshotting requires approximately one additional host copy of resident payload bytes plus the detached inspection copies. Restart explicitly requires the compatible target Device through restart_resident_session(checkpoint, device). restart_checkpoint is an equivalent concrete-only alias; both require the same exact compatible device and create fresh session, registry, guard, and resident-array identities.

Restart compatibility is intentionally exact and fail-closed. It accepts ResidentCheckpoint records with carrier type "ResidentSession", lifecycle ACTIVE, complete valid canonical payload descriptors, and an exactly equal target Device. Schema-v1 checkpoints must be noncommunication checkpoints. Schema-v2 checkpoints may contain no communication family or exactly one complete closed-map GAS or PARTICLES communication family with matching metadata and payloads. Schema-v3 always requires continuation metadata, though its published-stream payload collection may be empty when neither canonical coagulation nor wall-loss resource family is acquired. Its immutable current uint32 words are restart authority; normal dispatch and reacquisition neither read them back nor reset them, and only explicit stream reset derives new words from the root seed for a restored published stream. This does not prevent normal first acquisition from deriving words for a stream that was absent from the checkpoint. Finalization terminalizes its source session but returns an ACTIVE, restartable checkpoint record. Restart creates fresh session, registry, guard, resident arrays, and communication bindings; it never reuses source identities or provides fallback. It rejects other versions or carrier schemas, malformed, incomplete, partial, mixed, or mismatched communication payloads, non-ACTIVE checkpoint records, and device mismatches; it does not promise forward or backward compatibility.

Schema-v3 continuation covers the canonical published coagulation and wall_loss streams. Each retained record includes schema-versioned stable logical-ID, root-seed, and namespace metadata plus immutable current uint32 words. Those words are the sole continuation authority, rather than lossy CPU inspection carriers or ordinary resource payloads. Checkpoint capture is the sole explicit synchronization/readback boundary for this continuation. Normal scheduling and reacquisition do not inspect, transfer, synchronize, seed, or reset streams. Before setup, the checkpoint validates exact bidirectional pairing between acquired coagulation/wall-loss process families and continuation payloads; continuation-only and resource-only forms reject. Normal first acquisition initializes a stream only when its resource family was absent from the checkpoint.

Split-run continuation requires a manual restart into a fresh session with a frozen configuration and exactly equal supported Device. It excludes CPU, Warp, CUDA, or other cross-backend replay, cross-device migration; durable serialization; automatic restart; implicit reseeding, and hidden transfer; fallback; and rollback after a writer launch.

Normal resident scheduler calls never checkpoint, finalize, or restart. Those operations remain this explicit, concrete-only exact-device boundary; see the GPU-resident deterministic timestep contract for normal-step limits.

For a lazy lifecycle-only walkthrough that does not schedule or launch physics, see the GPU-resident session lifecycle source.

Validate documentation with:

pytest particula/execution/tests/rng_test.py \
  particula/execution/tests/rng_invariance_test.py \
  particula/execution/tests/checkpoint_test.py -q
pytest particula/execution/tests/gpu_resident_session_docs_test.py -q
mkdocs build --strict

Warp CPU is the installed-Warp baseline. CUDA evidence is optional and skips cleanly when unavailable.