Skip to content

PreOptimizationTimes breakdown + dashboard — A100 tier, baseline column, four-way split#63

Merged
Jammy2211 merged 13 commits into
mainfrom
feature/preopt-breakdown-dashboard
Jul 11, 2026
Merged

PreOptimizationTimes breakdown + dashboard — A100 tier, baseline column, four-way split#63
Jammy2211 merged 13 commits into
mainfrom
feature/preopt-breakdown-dashboard

Conversation

@Jammy2211

Copy link
Copy Markdown
Contributor

Closes the phase-4 (likelihood_breakdown + dashboard) leg of the polish.md PreOptimizationTimes campaign (#59). The phase-3 runtime baseline (#56/#62) is now on main, so this rebases/merges onto it and wires the baseline column into the dashboard.

What landed

  • A100 breakdown tier — imaging (mge/pixelization/delaunay × hst, dense + sparse) + datacube decomposed on A100 (fp64 + mp). GPU-first breakdown doctrine (CPU fp64 = fallback).
  • Four-way split of the delaunay inversion-setup block (--split-setup): triangulation + interpolation ≈ 26.6 ms ≈ ~27% of the full likelihood → the top optimization target. NNLS split confirmed 65% pix / 34% delaunay.
  • Dashboardbuild_readme.py now renders config-tagged A100 artifacts with a Platform column, and grows a PreOptimizationTimes baseline column in the runtime table automatically from results/baselines/. All READMEs regenerated; --check idempotence passes; ruff clean.
  • Baseline noteresults/notes/preopt_breakdown_baseline.md (contention signature, flag provenance, per-step deltas). Verdict: no library drift since May (0.89–1.14× = scatter); F-matrix dominates mesh cells, MGE is convolution-bound.

Known gap (follow-up filed)

  • interferometer delaunay @ alma_high is gpu_unusable_breakdown: the inversion-matrix extraction NUFFTs all 1500 mapping-matrix columns onto the 1600² fine grid at once = 61.44 GB (fp64), OOMing the A100; the existing 1M-visibility chunking chunks the gather, not the columns. Filed as a PyAutoArray feature prompt (feature/autoarray/nufft_mapping_matrix_column_chunking.md) for column-chunked mapping-matrix NUFFT. The fused runtime path is separately GPU-only and unaffected by this.

Checks

  • build_readme.py --check idempotence: pass (all READMEs unchanged on re-run).
  • ruff: pass.
  • Smoke: n/a (profiling scripts are not smoke-able).
  • Review: build_readme.py config-tagged path is guarded (json/version parse); CLEAN.

🤖 Generated with Claude Code

Jammy2211 and others added 12 commits July 10, 2026 10:31
#59)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Q1 decision (human, 2026-07-10): breakdown always aims for a full GPU
decomposition; CPU fp64 is the fallback when no GPU is available, not the
design center. 15 submit_breakdown_* scripts cover the 8 PreOptimizationTimes
cells at hpc_a100_fp64 + hpc_a100_mp where the source supports it. The HPC-CPU
breakdown leg is dropped (CPU-only decomposition adds little; cross-platform
CPU story lives in likelihood_runtime).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ing 5/5 (#59)

Fresh per-step decompositions at v2026.7.6.649 for the hst imaging cells
(mge dense; pixelization + delaunay dense and sparse). READMEs regenerated;
the render also picks up the previously-committed-but-unrendered cluster
rows (README drift on main). Running-section --gpu flag reference replaced
with the real env-var invocation + submit-script pointer.

alma_high interferometer/datacube cells: classified GPU-only tier on laptop
CPU — the NUFFT precision operator exceeded the 2h timeout twice under
ambient load (matches the phase-3 infeasibility map); they land via the
A100 submits when RAL GPU nodes return.

Headline: all cells sit 2.5-5.3x above the May v2026.5.29.4 rows with
byte-identical cell configurations; cross-check against phase-3 quiet-machine
runtime confirms a real >=~1.8x library-level slowdown on mesh cells since
late May. Details in the results note.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A stray env XLA_FLAGS or thread pin rescales every timing by integer
factors; recording them makes cross-run drift attributable.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The autoconf in-process set is order-dependent; the explicit shell export
guarantees the canonical env on the A100 tier, uniform with local runs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…s + results note (#59)

Imaging cells re-measured under the canonical policy env (XLA_FLAGS
explicitly exported per autoconf policy) on a quiet machine: 0.89-1.14x of
the May rows — no library drift; F-matrix dominates every mesh cell (~42-48%),
MGE is convolution-bound. READMEs regenerated.

results/notes/preopt_breakdown_baseline.md records the baseline, the
GPU-only classification of the alma_high cells (NUFFT >2h on CPU), and the
measurement methodology: explicit shell-level XLA_FLAGS (in-process set is
init-order-dependent), quiet machine mandatory (uniform per-step inflation
is the contention signature — the first pass read 2.5-5.3x slow under load
and was nearly misread as a regression), flag effect 1.54x single-JIT /
vmap-insensitive.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…#59)

Ingest the 9 A100 imaging results (jobs 330062-330070): 23-176x over laptop
CPU, and the bottleneck MOVES on GPU — CPU's F-matrix dominance (42-48%)
gives way to the NNLS regularized reconstruction on pixelization (~65%) and
inversion setup on delaunay. This is the empirical case for the GPU-first
breakdown policy. Mixed precision flat (<=2%) at hst scale.

build_readme.py learns config-tagged breakdown artifacts
(<script>_<config>[_sparse].json; instrument/version read from the payload)
and the breakdown table gains a Platform column. --check idempotence passes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…-setup block (#59)

Nested prefix-JITs (params -> step-5/6/7/8 outputs) attribute the combined
41.9ms A100 block to border relocation / triangulation+interpolation /
mapping matrix / PSF convolution before optimization targets are chosen.
Opt-in flag; canonical steps list unchanged; split lands in the JSON as
setup_split. Validated locally (eager regression assert passes).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4 results (delaunay + inversion_setup_decompose x fp64/mp, 34 channels):
per-channel inversion ~182ms and almost fully channel-invariant (variant
~0-2ms) — the cube amortizes setup across channels; mp flat. The datacube
path avoids the dense column-NUFFT that OOMs the interferometer cell.
Datacube JSONs use their own schema (no total_step_by_step) so the README
table shows no step-sum for them — schema unification left for phase-3
tooling alignment.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…lock (#59)

Job 330079 (--split-setup): border relocation 0.90ms / triangulation +
interpolation 26.62ms / mapping matrix 6.34ms / PSF-convolved mapping
matrix 6.10ms. Prefix-sum 39.96ms vs combined 41.14ms — the decomposition
is faithful (no fusion redistribution). The Delaunay-specific
triangulation+interpolation is the single largest optimization target of
the whole A100 likelihood (~27%); the qhull host callback is a few ms of
it at most, so the JAX-side point location / barycentric interpolation is
the work item.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…own-dashboard

# Conflicts:
#	README.md
#	likelihood_breakdown/README.md
#	simulators/README.md
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@Jammy2211 Jammy2211 merged commit 1f939b0 into main Jul 11, 2026
1 check passed
@Jammy2211 Jammy2211 deleted the feature/preopt-breakdown-dashboard branch July 11, 2026 10:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pending-release Queued for the next release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant