test: apply timing harness review caveats
Explicit stream synchronization before/after each timed loop (refined FixedPatchStepper stream, uniform Simulation stream, in their contexts); required --max-wall-seconds outer timeout checked between variants and in per-step loops; untimed finite leaf/fluid health checks; force notes for B/C/E' (no host reads; final base interval only; whole-window average with different summation order). Parity stays A/B/C vs A and E/E' vs E only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
15fb58e36f
commit
77bab1c4ea
@@ -7,18 +7,21 @@ physics-gate or production change; no force or accuracy result is produced.
|
||||
| Variant | Loop | Force history |
|
||||
|---|---|---|
|
||||
| A | refined `step(1)` + `read_raw_exchange` per base step (as the runner) | valid |
|
||||
| B | refined `step(1)` only | timing-only |
|
||||
| C | refined single `step(N)` | timing-only |
|
||||
| B | refined `step(1)` only, no host reads (`observe_raw_exchange` stays on) | timing-only |
|
||||
| C | refined single `step(N)` | timing-only; ledger keeps the final base interval only |
|
||||
| E | uniform `sim.run(<=100)` + `read_force` (as the runner) | valid |
|
||||
| E' | uniform single `sim.run(2N)` | timing-only |
|
||||
| E' | uniform single `sim.run(2N)` | timing-only; at most a whole-window average, different summation order |
|
||||
|
||||
- Equal simulated duration: N refined base steps vs 2N uniform D80 steps.
|
||||
- Every repeat starts from the same fresh state (refined `initialize`, uniform `snapshot/restore`)
|
||||
and the same warm-up; construction/JIT, warm-up, downloads and parity checks are untimed.
|
||||
- `step()` synchronizes after each base interval and `Simulation.run()` before returning, so the
|
||||
wall timer (`time.perf_counter`) brackets completed GPU work. No CUDA events are used.
|
||||
- Final populations and NaN masks must be bitwise identical to the first A (refined) or E
|
||||
(uniform) repeat; any difference aborts.
|
||||
- The actual stepping stream is synchronized explicitly before and after each timed loop; the
|
||||
wall timer (`time.perf_counter`) is the only source. No CUDA-event span is called kernel time.
|
||||
- `--max-wall-seconds` is required for GPU runs (outer timeout, checked between variants and
|
||||
every 100 steps in per-step loops).
|
||||
- Final populations and NaN masks must be bitwise identical to the first A repeat (A/B/C) or the
|
||||
first E repeat (E/E'); refined and uniform grids are never compared. Leaf/fluid populations
|
||||
must be finite. All parity/health checks are untimed.
|
||||
- Cases run sequentially (uniform, then refined) in one process with startup serialized;
|
||||
variants are interleaved within each repeat. A-B and B-C are measured comparative
|
||||
differences under GPU variability, not exact causal decompositions.
|
||||
@@ -27,7 +30,7 @@ Usage (root selects one verified idle GPU):
|
||||
|
||||
PYTHONPATH=src python -m unittest tests/unit/test_time_refined_dfg.py
|
||||
python tests/validation/time_refined_dfg.py --output <new> --plan
|
||||
CUDA_VISIBLE_DEVICES=<gpu> python tests/validation/time_refined_dfg.py --output <new>
|
||||
CUDA_VISIBLE_DEVICES=<gpu> python tests/validation/time_refined_dfg.py --output <new> --max-wall-seconds <s>
|
||||
|
||||
Defaults: 2000 base steps, 200 warm-up base steps, 3 repeats. Profiler capture and the
|
||||
`observe_raw_exchange=False` variant are deferred until these measurements exist.
|
||||
|
||||
Reference in New Issue
Block a user