diff --git a/README.md b/README.md index 7997cb7..0a41032 100644 --- a/README.md +++ b/README.md @@ -28,12 +28,27 @@ Results are framed by **astronomy instrument** (HST, Euclid, JWST, …) rather t **Likelihood runtime** — full-pipeline per-call cost per cell × config: -_No data yet — run `likelihood_runtime/sweep.py` then `aggregate.py` to populate._ +| Cell | local_cpu_fp64 | local_cpu_mp | local_cpu_fp64_sparse | local_cpu_mp_sparse | PreOptimizationTimes | +|---|---|---|---|---|---| +| `datacube/delaunay/sma` | — | — | — | — | — | +| `imaging/delaunay/hst` | 16.73 s | 17.84 s | 4.14 s | 4.49 s | 4.49 s | +| `imaging/delaunay/jwst` | 48.81 s | 22.43 s | 10.42 s | 14.05 s | 14.05 s | +| `imaging/mge/ao` | 3.11 s | 5.71 s | — | — | 5.71 s | +| `imaging/mge/hst` | 117.7 ms | 164.3 ms | 256.1 ms | 140.5 ms | 140.5 ms | +| `imaging/mge/jwst` | 716.2 ms | 678.5 ms | 387.3 ms | 488.7 ms | 488.7 ms | +| `imaging/pixelization/hst` | 13.72 s | 14.78 s | 5.79 s | 5.25 s | 5.25 s | +| `imaging/pixelization/jwst` | 21.78 s | 43.58 s | 9.57 s | 9.42 s | 9.42 s | +| `interferometer/delaunay/alma` | **GPU-only** | 6.51 s | — | — | 6.51 s | +| `interferometer/delaunay/sma` | 2.58 s | 3.34 s | — | — | 3.34 s | +| `interferometer/mge/sma` | 230.7 ms | 231.5 ms | — | — | 231.5 ms | +| `interferometer/pixelization/sma` | 2.04 s | 2.39 s | — | — | 2.39 s | **Likelihood breakdown** — latest per-step decompositions: | Cell | Instrument | Inversion path | Step-sum total | PyAutoLens version | |------|------------|----------------|----------------|--------------------| +| `cluster/image_plane` | — | dense (mapping) | 4.99 s | v2026.7.6.649 | +| `cluster/source_plane` | — | dense (mapping) | 3.1 ms | v2026.7.6.649 | | `imaging/delaunay` | hst | dense (mapping) | 11.29 s | v2026.5.29.4 | | `imaging/delaunay` | hst | sparse (w-tilde) | 7.96 s | v2026.5.29.4 | | `imaging/mge` | hst | dense (mapping) | 178.2 ms | v2026.5.29.4 | diff --git a/_profile_cli.py b/_profile_cli.py index 934c6bb..a117d83 100644 --- a/_profile_cli.py +++ b/_profile_cli.py @@ -271,8 +271,11 @@ def check_pinned(got, expected, *, label: str, rtol: float = 1e-4): profiling job (the timing numbers are still data; the flag marks them non-comparable to the pinned baseline). """ - got_f = float(got) - rel = abs(got_f - expected) / max(abs(expected), 1e-300) + import numpy as _np + + arr = _np.asarray(got, dtype=float).ravel() + rel = float(_np.max(_np.abs(arr - expected)) / max(abs(expected), 1e-300)) + got_f = float(arr[0]) if arr.size == 1 else float(arr[int(_np.argmax(_np.abs(arr - expected)))]) if rel <= rtol: return None print( diff --git a/dataset/imaging/ao/data.fits b/dataset/imaging/ao/data.fits new file mode 100644 index 0000000..185b9ad Binary files /dev/null and b/dataset/imaging/ao/data.fits differ diff --git a/dataset/imaging/ao/noise_map.fits b/dataset/imaging/ao/noise_map.fits new file mode 100644 index 0000000..3a15bef Binary files /dev/null and b/dataset/imaging/ao/noise_map.fits differ diff --git a/dataset/imaging/ao/positions.json b/dataset/imaging/ao/positions.json new file mode 100644 index 0000000..17d963c --- /dev/null +++ b/dataset/imaging/ao/positions.json @@ -0,0 +1,28 @@ +{ + "type": "instance", + "class_path": "autoarray.structures.grids.irregular_2d.Grid2DIrregular", + "arguments": { + "values": { + "type": "ndarray", + "array": [ + [ + -1.499375, + 0.19521655976974225 + ], + [ + -0.270625, + -1.673233248895184 + ], + [ + 0.270625, + 1.6732332488951842 + ], + [ + 1.499375, + -0.1952165597697422 + ] + ], + "dtype": "float64" + } + } +} \ No newline at end of file diff --git a/dataset/imaging/ao/psf.fits b/dataset/imaging/ao/psf.fits new file mode 100644 index 0000000..8ed72a9 Binary files /dev/null and b/dataset/imaging/ao/psf.fits differ diff --git a/dataset/imaging/ao/tracer.json b/dataset/imaging/ao/tracer.json new file mode 100644 index 0000000..4165c9b --- /dev/null +++ b/dataset/imaging/ao/tracer.json @@ -0,0 +1,110 @@ +{ + "type": "instance", + "class_path": "autolens.lens.tracer.Tracer", + "arguments": { + "cosmology": { + "type": "instance", + "class_path": "autogalaxy.cosmology.model.Planck15", + "arguments": {} + }, + "galaxies": { + "type": "list", + "values": [ + { + "type": "instance", + "class_path": "autogalaxy.galaxy.galaxy.Galaxy", + "arguments": { + "label": null, + "redshift": 0.5, + "bulge": { + "type": "instance", + "class_path": "autogalaxy.profiles.light.standard.sersic.Sersic", + "arguments": { + "sersic_index": 3.0, + "ell_comps": { + "type": "tuple", + "values": [ + 0.05263157894736841, + 3.2227547345982974e-18 + ] + }, + "centre": { + "type": "tuple", + "values": [ + 0.0, + 0.0 + ] + }, + "intensity": 2.0, + "effective_radius": 0.6 + } + }, + "mass": { + "type": "instance", + "class_path": "autogalaxy.profiles.mass.total.isothermal.Isothermal", + "arguments": { + "centre": { + "type": "tuple", + "values": [ + 0.0, + 0.0 + ] + }, + "einstein_radius": 1.6, + "ell_comps": { + "type": "tuple", + "values": [ + 0.05263157894736841, + 3.2227547345982974e-18 + ] + } + } + }, + "shear": { + "type": "instance", + "class_path": "autogalaxy.profiles.mass.sheets.external_shear.ExternalShear", + "arguments": { + "gamma_1": 0.05, + "gamma_2": 0.05 + } + } + } + }, + { + "type": "instance", + "class_path": "autogalaxy.galaxy.galaxy.Galaxy", + "arguments": { + "label": null, + "redshift": 1.0, + "bulge": { + "type": "instance", + "class_path": "autogalaxy.profiles.light.standard.sersic_core.SersicCore", + "arguments": { + "sersic_index": 1.0, + "ell_comps": { + "type": "tuple", + "values": [ + 0.0962250448649376, + -0.05555555555555551 + ] + }, + "centre": { + "type": "tuple", + "values": [ + 0.0, + 0.0 + ] + }, + "intensity": 4.0, + "effective_radius": 0.1, + "radius_break": 0.025, + "gamma": 0.25, + "alpha": 3.0 + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/dataset/imaging/jwst/data.fits b/dataset/imaging/jwst/data.fits new file mode 100644 index 0000000..74debaa Binary files /dev/null and b/dataset/imaging/jwst/data.fits differ diff --git a/dataset/imaging/jwst/noise_map.fits b/dataset/imaging/jwst/noise_map.fits new file mode 100644 index 0000000..1e543f7 Binary files /dev/null and b/dataset/imaging/jwst/noise_map.fits differ diff --git a/dataset/imaging/jwst/positions.json b/dataset/imaging/jwst/positions.json new file mode 100644 index 0000000..f6dfe2b --- /dev/null +++ b/dataset/imaging/jwst/positions.json @@ -0,0 +1,28 @@ +{ + "type": "instance", + "class_path": "autoarray.structures.grids.irregular_2d.Grid2DIrregular", + "arguments": { + "values": { + "type": "ndarray", + "array": [ + [ + 0.2709375, + 1.6730528269360623 + ], + [ + -1.4990625, + 0.19539698172886397 + ], + [ + 1.4990625, + -0.1953969817288639 + ], + [ + -0.2709375, + -1.6730528269360623 + ] + ], + "dtype": "float64" + } + } +} \ No newline at end of file diff --git a/dataset/imaging/jwst/psf.fits b/dataset/imaging/jwst/psf.fits new file mode 100644 index 0000000..f2cdf1b Binary files /dev/null and b/dataset/imaging/jwst/psf.fits differ diff --git a/dataset/imaging/jwst/tracer.json b/dataset/imaging/jwst/tracer.json new file mode 100644 index 0000000..bc6d595 --- /dev/null +++ b/dataset/imaging/jwst/tracer.json @@ -0,0 +1,110 @@ +{ + "type": "instance", + "class_path": "autolens.lens.tracer.Tracer", + "arguments": { + "galaxies": { + "type": "list", + "values": [ + { + "type": "instance", + "class_path": "autogalaxy.galaxy.galaxy.Galaxy", + "arguments": { + "redshift": 0.5, + "label": null, + "bulge": { + "type": "instance", + "class_path": "autogalaxy.profiles.light.standard.sersic.Sersic", + "arguments": { + "intensity": 2.0, + "sersic_index": 3.0, + "ell_comps": { + "type": "tuple", + "values": [ + 0.05263157894736841, + 3.2227547345982974e-18 + ] + }, + "centre": { + "type": "tuple", + "values": [ + 0.0, + 0.0 + ] + }, + "effective_radius": 0.6 + } + }, + "mass": { + "type": "instance", + "class_path": "autogalaxy.profiles.mass.total.isothermal.Isothermal", + "arguments": { + "ell_comps": { + "type": "tuple", + "values": [ + 0.05263157894736841, + 3.2227547345982974e-18 + ] + }, + "einstein_radius": 1.6, + "centre": { + "type": "tuple", + "values": [ + 0.0, + 0.0 + ] + } + } + }, + "shear": { + "type": "instance", + "class_path": "autogalaxy.profiles.mass.sheets.external_shear.ExternalShear", + "arguments": { + "gamma_1": 0.05, + "gamma_2": 0.05 + } + } + } + }, + { + "type": "instance", + "class_path": "autogalaxy.galaxy.galaxy.Galaxy", + "arguments": { + "redshift": 1.0, + "label": null, + "bulge": { + "type": "instance", + "class_path": "autogalaxy.profiles.light.standard.sersic_core.SersicCore", + "arguments": { + "intensity": 4.0, + "sersic_index": 1.0, + "radius_break": 0.025, + "ell_comps": { + "type": "tuple", + "values": [ + 0.0962250448649376, + -0.05555555555555551 + ] + }, + "centre": { + "type": "tuple", + "values": [ + 0.0, + 0.0 + ] + }, + "alpha": 3.0, + "effective_radius": 0.1, + "gamma": 0.25 + } + } + } + } + ] + }, + "cosmology": { + "type": "instance", + "class_path": "autogalaxy.cosmology.model.Planck15", + "arguments": {} + } + } +} \ No newline at end of file diff --git a/dataset/interferometer/alma/data.fits b/dataset/interferometer/alma/data.fits new file mode 100644 index 0000000..a9bc24b Binary files /dev/null and b/dataset/interferometer/alma/data.fits differ diff --git a/dataset/interferometer/alma/noise_map.fits b/dataset/interferometer/alma/noise_map.fits new file mode 100644 index 0000000..328b261 Binary files /dev/null and b/dataset/interferometer/alma/noise_map.fits differ diff --git a/dataset/interferometer/alma/positions.json b/dataset/interferometer/alma/positions.json new file mode 100644 index 0000000..8fd3f25 --- /dev/null +++ b/dataset/interferometer/alma/positions.json @@ -0,0 +1,20 @@ +{ + "type": "instance", + "class_path": "autoarray.structures.grids.irregular_2d.Grid2DIrregular", + "arguments": { + "values": { + "type": "ndarray", + "array": [ + [ + -1.35078125, + -0.5056325404387271 + ], + [ + 0.77734375, + 1.6648436277960226 + ] + ], + "dtype": "float64" + } + } +} \ No newline at end of file diff --git a/dataset/interferometer/alma/tracer.json b/dataset/interferometer/alma/tracer.json new file mode 100644 index 0000000..06398ef --- /dev/null +++ b/dataset/interferometer/alma/tracer.json @@ -0,0 +1,87 @@ +{ + "type": "instance", + "class_path": "autolens.lens.tracer.Tracer", + "arguments": { + "cosmology": { + "type": "instance", + "class_path": "autogalaxy.cosmology.model.Planck15", + "arguments": {} + }, + "galaxies": { + "type": "list", + "values": [ + { + "type": "instance", + "class_path": "autogalaxy.galaxy.galaxy.Galaxy", + "arguments": { + "redshift": 0.5, + "label": null, + "mass": { + "type": "instance", + "class_path": "autogalaxy.profiles.mass.total.isothermal.Isothermal", + "arguments": { + "ell_comps": { + "type": "tuple", + "values": [ + 0.05263157894736841, + 3.2227547345982974e-18 + ] + }, + "einstein_radius": 1.6, + "centre": { + "type": "tuple", + "values": [ + 0.0, + 0.0 + ] + } + } + }, + "shear": { + "type": "instance", + "class_path": "autogalaxy.profiles.mass.sheets.external_shear.ExternalShear", + "arguments": { + "gamma_1": 0.05, + "gamma_2": 0.05 + } + } + } + }, + { + "type": "instance", + "class_path": "autogalaxy.galaxy.galaxy.Galaxy", + "arguments": { + "redshift": 1.0, + "label": null, + "bulge": { + "type": "instance", + "class_path": "autogalaxy.profiles.light.standard.sersic_core.SersicCore", + "arguments": { + "intensity": 0.3, + "ell_comps": { + "type": "tuple", + "values": [ + 0.0962250448649376, + -0.05555555555555551 + ] + }, + "radius_break": 0.025, + "sersic_index": 2.5, + "centre": { + "type": "tuple", + "values": [ + 0.1, + 0.1 + ] + }, + "gamma": 0.25, + "alpha": 3.0, + "effective_radius": 1.0 + } + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/dataset/interferometer/alma/uv_wavelengths.fits b/dataset/interferometer/alma/uv_wavelengths.fits new file mode 100644 index 0000000..fc60a05 Binary files /dev/null and b/dataset/interferometer/alma/uv_wavelengths.fits differ diff --git a/dataset/interferometer/alma_high/data.fits b/dataset/interferometer/alma_high/data.fits new file mode 100644 index 0000000..a2e0795 Binary files /dev/null and b/dataset/interferometer/alma_high/data.fits differ diff --git a/dataset/interferometer/alma_high/noise_map.fits b/dataset/interferometer/alma_high/noise_map.fits new file mode 100644 index 0000000..a2ebee6 Binary files /dev/null and b/dataset/interferometer/alma_high/noise_map.fits differ diff --git a/dataset/interferometer/alma_high/positions.json b/dataset/interferometer/alma_high/positions.json new file mode 100644 index 0000000..690a98e --- /dev/null +++ b/dataset/interferometer/alma_high/positions.json @@ -0,0 +1,20 @@ +{ + "type": "instance", + "class_path": "autoarray.structures.grids.irregular_2d.Grid2DIrregular", + "arguments": { + "values": { + "type": "ndarray", + "array": [ + [ + -1.35078125, + -0.505632540438727 + ], + [ + 0.77734375, + 1.6648436277960226 + ] + ], + "dtype": "float64" + } + } +} \ No newline at end of file diff --git a/dataset/interferometer/alma_high/tracer.json b/dataset/interferometer/alma_high/tracer.json new file mode 100644 index 0000000..402a740 --- /dev/null +++ b/dataset/interferometer/alma_high/tracer.json @@ -0,0 +1,87 @@ +{ + "type": "instance", + "class_path": "autolens.lens.tracer.Tracer", + "arguments": { + "galaxies": { + "type": "list", + "values": [ + { + "type": "instance", + "class_path": "autogalaxy.galaxy.galaxy.Galaxy", + "arguments": { + "label": null, + "redshift": 0.5, + "mass": { + "type": "instance", + "class_path": "autogalaxy.profiles.mass.total.isothermal.Isothermal", + "arguments": { + "einstein_radius": 1.6, + "centre": { + "type": "tuple", + "values": [ + 0.0, + 0.0 + ] + }, + "ell_comps": { + "type": "tuple", + "values": [ + 0.05263157894736841, + 3.2227547345982974e-18 + ] + } + } + }, + "shear": { + "type": "instance", + "class_path": "autogalaxy.profiles.mass.sheets.external_shear.ExternalShear", + "arguments": { + "gamma_2": 0.05, + "gamma_1": 0.05 + } + } + } + }, + { + "type": "instance", + "class_path": "autogalaxy.galaxy.galaxy.Galaxy", + "arguments": { + "label": null, + "redshift": 1.0, + "bulge": { + "type": "instance", + "class_path": "autogalaxy.profiles.light.standard.sersic_core.SersicCore", + "arguments": { + "sersic_index": 2.5, + "gamma": 0.25, + "radius_break": 0.025, + "effective_radius": 1.0, + "intensity": 0.3, + "alpha": 3.0, + "centre": { + "type": "tuple", + "values": [ + 0.1, + 0.1 + ] + }, + "ell_comps": { + "type": "tuple", + "values": [ + 0.0962250448649376, + -0.05555555555555551 + ] + } + } + } + } + } + ] + }, + "cosmology": { + "type": "instance", + "class_path": "autogalaxy.cosmology.model.Planck15", + "arguments": {} + } + } +} \ No newline at end of file diff --git a/dataset/interferometer/alma_high/uv_wavelengths.fits b/dataset/interferometer/alma_high/uv_wavelengths.fits new file mode 100644 index 0000000..072c6c5 Binary files /dev/null and b/dataset/interferometer/alma_high/uv_wavelengths.fits differ diff --git a/likelihood_breakdown/README.md b/likelihood_breakdown/README.md index 39e0922..c094f5b 100644 --- a/likelihood_breakdown/README.md +++ b/likelihood_breakdown/README.md @@ -13,6 +13,8 @@ For *how long the likelihood actually takes* on production hardware — i.e. a s | Cell | Instrument | Inversion path | Step-sum total | PyAutoLens version | |------|------------|----------------|----------------|--------------------| +| `cluster/image_plane` | — | dense (mapping) | 4.99 s | v2026.7.6.649 | +| `cluster/source_plane` | — | dense (mapping) | 3.1 ms | v2026.7.6.649 | | `imaging/delaunay` | hst | dense (mapping) | 11.29 s | v2026.5.29.4 | | `imaging/delaunay` | hst | sparse (w-tilde) | 7.96 s | v2026.5.29.4 | | `imaging/mge` | hst | dense (mapping) | 178.2 ms | v2026.5.29.4 | diff --git a/likelihood_runtime/README.md b/likelihood_runtime/README.md index 92e1c7b..be5f61e 100644 --- a/likelihood_runtime/README.md +++ b/likelihood_runtime/README.md @@ -13,7 +13,20 @@ The empirical findings from previous sweeps — per-cell timings, mp verdicts, t ## Latest results -_No data yet — run `likelihood_runtime/sweep.py` then `aggregate.py` to populate._ +| Cell | local_cpu_fp64 | local_cpu_mp | local_cpu_fp64_sparse | local_cpu_mp_sparse | PreOptimizationTimes | +|---|---|---|---|---|---| +| `datacube/delaunay/sma` | — | — | — | — | — | +| `imaging/delaunay/hst` | 16.73 s | 17.84 s | 4.14 s | 4.49 s | 4.49 s | +| `imaging/delaunay/jwst` | 48.81 s | 22.43 s | 10.42 s | 14.05 s | 14.05 s | +| `imaging/mge/ao` | 3.11 s | 5.71 s | — | — | 5.71 s | +| `imaging/mge/hst` | 117.7 ms | 164.3 ms | 256.1 ms | 140.5 ms | 140.5 ms | +| `imaging/mge/jwst` | 716.2 ms | 678.5 ms | 387.3 ms | 488.7 ms | 488.7 ms | +| `imaging/pixelization/hst` | 13.72 s | 14.78 s | 5.79 s | 5.25 s | 5.25 s | +| `imaging/pixelization/jwst` | 21.78 s | 43.58 s | 9.57 s | 9.42 s | 9.42 s | +| `interferometer/delaunay/alma` | **GPU-only** | 6.51 s | — | — | 6.51 s | +| `interferometer/delaunay/sma` | 2.58 s | 3.34 s | — | — | 3.34 s | +| `interferometer/mge/sma` | 230.7 ms | 231.5 ms | — | — | 231.5 ms | +| `interferometer/pixelization/sma` | 2.04 s | 2.39 s | — | — | 2.39 s | Auto-generated by `scripts/build_readme.py` from `results/runtime/**/comparison.json`; baseline columns appear once `results/baselines/` is populated. diff --git a/likelihood_runtime/aggregate.py b/likelihood_runtime/aggregate.py index 70a105f..806b04e 100644 --- a/likelihood_runtime/aggregate.py +++ b/likelihood_runtime/aggregate.py @@ -101,18 +101,27 @@ def _has_config_json(d: Path) -> bool: return cells -def _is_config_stem(stem: str) -> bool: - """True for sweep-config JSONs (``local_gpu_mp``, ``hpc_a100_fp64_sparse``, …). - - Cell dirs may also hold versioned standalone summaries - (``mge_likelihood_summary_hst_v….json``) — those are not sweep rows and - must not enter ``comparison.json``. +def _config_name_from_stem(stem: str) -> str | None: + """Config name for a sweep JSON stem, else None. + + Since autolens_profiling#44 the per-cell scripts prefix the cell: + ``_[_sparse].json`` (e.g. ``mge_local_cpu_fp64_sparse``); + bare ``.json`` is the pre-#44 shape, still accepted. Cell dirs + may also hold versioned standalone summaries — those are not sweep rows + and must not enter ``comparison.json``. """ - return ( - stem in _CONFIG_ORDER - or stem.removesuffix("_sparse") in _CONFIG_ORDER - or stem.endswith("_pre_fix") - ) + base = stem.removesuffix("_sparse") + suffix = "_sparse" if stem.endswith("_sparse") else "" + for cfg in _CONFIG_ORDER: + if base == cfg or base.endswith("_" + cfg): + return cfg + suffix + if stem.endswith("_pre_fix"): + return stem + return None + + +def _is_config_stem(stem: str) -> bool: + return _config_name_from_stem(stem) is not None def _read_config(json_path: Path) -> dict: @@ -131,18 +140,29 @@ def _read_config(json_path: Path) -> dict: # Datacube uses steps_cube_cost rather than the per-call ``steps`` dict. if "steps" not in data and "steps_cube_cost" in data: data["steps"] = data["steps_cube_cost"] - # Add config_name from filename if absent. - data.setdefault("config_name", json_path.stem) + # Add config_name from filename if absent (normalised, cell prefix stripped). + data.setdefault("config_name", _config_name_from_stem(json_path.stem) or json_path.stem) return data def _aggregate_cell(cell_dir: Path) -> dict: configs: dict[str, dict] = {} + # CPU-unusable markers (written by sweep.py --per-run-timeout, or by hand + # for OOM-killed cells) become comparison rows: {"cpu_unusable": true}. + for marker_path in sorted(cell_dir.glob("*.unusable.json")): + try: + marker = json.loads(marker_path.read_text()) + except (OSError, ValueError): + continue + cname = marker.get("config_name") + if cname: + configs[cname] = {"cpu_unusable": True, "reason": marker.get("reason")} for json_path in sorted(cell_dir.glob("*.json")): - if not _is_config_stem(json_path.stem): + if json_path.name.endswith(".unusable.json") or not _is_config_stem(json_path.stem): continue try: - configs[json_path.stem] = _read_config(json_path) + cname = _config_name_from_stem(json_path.stem) or json_path.stem + configs[cname] = _read_config(json_path) except Exception as exc: sys.stderr.write(f" warn: failed to read {json_path}: {exc}\n") diff --git a/likelihood_runtime/sweep.py b/likelihood_runtime/sweep.py index 8ab8a09..a00fb3c 100644 --- a/likelihood_runtime/sweep.py +++ b/likelihood_runtime/sweep.py @@ -49,16 +49,26 @@ _DEFAULT_PYTHON = sys.executable -# (dataset_class, model). Order is roughly cheapest -> heaviest so failures -# surface quickly during iteration. -CELLS: list[tuple[str, str]] = [ - ("imaging", "mge"), - ("imaging", "pixelization"), - ("imaging", "delaunay"), - ("interferometer", "mge"), - ("interferometer", "pixelization"), - ("interferometer", "delaunay"), - ("datacube", "delaunay"), +# (dataset_class, model, instruments). Order is roughly cheapest -> heaviest +# so failures surface quickly during iteration. An empty instrument tuple +# means "the per-cell script's module default" (pre-campaign behaviour); +# named instruments run once each, with per-instrument output subdirs +# (results/runtime//// — the 3-level layout +# aggregate.py already understands). The PreOptimizationTimes campaign +# matrix (autolens_profiling#56): imaging at ao/jwst/hst, interferometer +# and datacube across their instrument presets. +CELLS: list[tuple[str, str, tuple[str, ...]]] = [ + ("imaging", "mge", ("hst", "jwst", "ao")), + ("imaging", "pixelization", ("hst", "jwst", "ao")), + ("imaging", "delaunay", ("hst", "jwst", "ao")), + # mge interferometer runs sma ONLY: the dense MGE mapping matrix needs a + # ~62 GB gather buffer at 1M+ vis (vram/config.py marks alma+ INHERENTLY + # blocked) — confirmed empirically by the first campaign pass (#56): + # alma OOMed at exactly 62,720,000,000 bytes on any backend. + ("interferometer", "mge", ("sma",)), + ("interferometer", "pixelization", ("sma", "alma", "alma_high", "jvla")), + ("interferometer", "delaunay", ("sma", "alma", "alma_high", "jvla")), + ("datacube", "delaunay", ("sma", "alma", "alma_high")), ] @@ -124,6 +134,30 @@ def _parse_args() -> argparse.Namespace: action="store_true", help="Skip the use_mixed_precision rows (just fp64).", ) + p.add_argument( + "--per-run-timeout", + type=float, + default=None, + metavar="SECONDS", + help=( + "Kill any single run exceeding this wall-clock and record an " + "`.unusable.json` marker instead of a result — campaign policy: " + "a likelihood whose profiling run cannot finish inside the cap " + "is not a CPU-viable configuration, it is GPU-only. The marker " + "is honoured by --skip-existing and rendered as 'GPU-only' by " + "the dashboard." + ), + ) + p.add_argument( + "--skip-existing", + action="store_true", + help=( + "Skip any (cell, config) whose result JSON already exists in the " + "output dir — resume an interrupted campaign without redoing " + "completed runs (the in-flight run at interruption left no JSON, " + "so it re-runs)." + ), + ) p.add_argument( "--sparse", action="store_true", @@ -153,16 +187,36 @@ def _parse_args() -> argparse.Namespace: return p.parse_args() -def _resolve_cells(args: argparse.Namespace) -> list[tuple[str, str]]: - selected = CELLS +def _expand_cells() -> list[tuple[str, str, str | None]]: + """Flatten CELLS into (class, model, instrument-or-None) rows.""" + rows: list[tuple[str, str, str | None]] = [] + for cls, model, instruments in CELLS: + if instruments: + rows.extend((cls, model, inst) for inst in instruments) + else: + rows.append((cls, model, None)) + return rows + + +def _cell_id(cls: str, model: str, inst: str | None) -> str: + return f"{cls}/{model}/{inst}" if inst else f"{cls}/{model}" + + +def _resolve_cells(args: argparse.Namespace) -> list[tuple[str, str, str | None]]: + """--only/--skip match class/model (all instruments) or class/model/instrument.""" + selected = _expand_cells() + + def _matches(spec: str, row: tuple[str, str, str | None]) -> bool: + cls, model, inst = row + return spec in (f"{cls}/{model}", _cell_id(cls, model, inst)) + if args.only: - wanted = {c for c in args.only} - selected = [(c, m) for (c, m) in selected if f"{c}/{m}" in wanted] - missing = wanted - {f"{c}/{m}" for (c, m) in selected} + selected = [r for r in selected if any(_matches(s, r) for s in args.only)] + matched = {s for s in args.only if any(_matches(s, r) for r in selected)} + missing = set(args.only) - matched if missing: sys.stderr.write(f"warning: --only includes unknown cells: {sorted(missing)}\n") - skip = set(args.skip) - selected = [(c, m) for (c, m) in selected if f"{c}/{m}" not in skip] + selected = [r for r in selected if not any(_matches(s, r) for s in args.skip)] return selected @@ -184,6 +238,8 @@ def _run_one( out_dir: Path, dry_run: bool, sparse: bool = False, + instrument: str | None = None, + per_run_timeout: float | None = None, ) -> tuple[bool, float, str]: """Run one (cell, config) pair as a subprocess. Returns (ok, elapsed, log_path).""" out_dir.mkdir(parents=True, exist_ok=True) @@ -197,6 +253,7 @@ def _run_one( config.name, "--output-dir", str(out_dir), + *(("--instrument", instrument) if instrument else ()), *config.extra_args, *(("--sparse",) if sparse else ()), ] @@ -216,14 +273,37 @@ def _run_one( t0 = time.time() try: - with open(log_path, "w") as log: - proc = subprocess.run( - cmd, - env=env, - stdout=log, - stderr=subprocess.STDOUT, - check=False, + try: + with open(log_path, "w") as log: + proc = subprocess.run( + cmd, + env=env, + stdout=log, + stderr=subprocess.STDOUT, + check=False, + timeout=per_run_timeout, + ) + except subprocess.TimeoutExpired: + elapsed = time.time() - t0 + marker = out_dir / f"{script_path.stem}_{config.name}{log_suffix}.unusable.json" + import json + + marker.write_text( + json.dumps( + { + "cpu_unusable": True, + "reason": f"wall-clock timeout after {per_run_timeout:.0f}s — GPU-only", + "config_name": f"{config.name}{log_suffix}", + "timeout_seconds": per_run_timeout, + }, + indent=2, + ) + ) + print( + f" TIMEOUT ({elapsed:.1f}s > {per_run_timeout:.0f}s) — marked CPU-unusable " + f"-> {marker.name}" ) + return True, elapsed, str(log_path) elapsed = time.time() - t0 ok = proc.returncode == 0 print( @@ -263,7 +343,7 @@ def main() -> int: f"sweep_likelihood: {len(cells)} cells x {len(configs)} configs " f"= {len(cells) * len(configs)} runs" ) - print(f" cells: {[f'{c}/{m}' for (c, m) in cells]}") + print(f" cells: {[_cell_id(c, m, i) for (c, m, i) in cells]}") print(f" configs: {[c.name for c in configs]}") print(f" output: {args.output_root}") print(f" python: {args.python}") @@ -273,17 +353,29 @@ def main() -> int: summary: list[tuple[str, str, bool, float]] = [] overall_t0 = time.time() - for cls, model in cells: + for cls, model, inst in cells: script_path = _REPO_ROOT / "likelihood_runtime" / cls / f"{model}.py" + cell_id = _cell_id(cls, model, inst) if not script_path.exists(): print(f"\n!!! missing script: {script_path}") for cfg in configs: - summary.append((f"{cls}/{model}", cfg.name, False, 0.0)) + summary.append((cell_id, cfg.name, False, 0.0)) continue out_dir = args.output_root / cls / model + if inst: + out_dir = out_dir / inst for cfg in configs: + if args.skip_existing: + suffix = "_sparse" if args.sparse else "" + existing = out_dir / f"{model}_{cfg.name}{suffix}.json" + marker = out_dir / f"{model}_{cfg.name}{suffix}.unusable.json" + if existing.exists() or marker.exists(): + label = "result exists" if existing.exists() else "marked CPU-unusable" + print(f"--- [{cfg.name}] {cell_id}: SKIP ({label})") + summary.append((cell_id, cfg.name, True, 0.0)) + continue try: ok, elapsed, _log = _run_one( args.python, @@ -292,11 +384,13 @@ def main() -> int: out_dir, args.dry_run, sparse=args.sparse, + instrument=inst, + per_run_timeout=args.per_run_timeout, ) except KeyboardInterrupt: print("\n\nsweep interrupted by user") return 130 - summary.append((f"{cls}/{model}", cfg.name, ok, elapsed)) + summary.append((cell_id, cfg.name, ok, elapsed)) total = time.time() - overall_t0 print("\n" + "=" * 70) diff --git a/results/baselines/PreOptimizationTimes/PreOptimizationTimes.md b/results/baselines/PreOptimizationTimes/PreOptimizationTimes.md new file mode 100644 index 0000000..ca973fc --- /dev/null +++ b/results/baselines/PreOptimizationTimes/PreOptimizationTimes.md @@ -0,0 +1,18 @@ +# PreOptimizationTimes + +Named baseline snapshot (12 cells; convention: [`design_lock_in.md`](../../notes/design_lock_in.md)). Full-pipeline per-call cost per cell × config; `(vmap …)` is the vmap per-call where measured. + +| Cell | local_cpu_fp64 | local_cpu_mp | local_cpu_fp64_sparse | local_cpu_mp_sparse | +|---|---|---|---|---| +| `datacube/delaunay/sma` | — | — | — | — | +| `imaging/delaunay/hst` | 16.73 s (vmap 12.66 s) | 17.84 s (vmap 16.03 s) | 4.14 s (vmap 5.22 s) | 4.49 s (vmap 4.95 s) | +| `imaging/delaunay/jwst` | 48.81 s (vmap 26.23 s) | 22.43 s (vmap 19.51 s) | 10.42 s (vmap 12.30 s) | 14.05 s (vmap 12.85 s) | +| `imaging/mge/ao` | 3.11 s (vmap 4.92 s) | 5.71 s (vmap 4.02 s) | — | — | +| `imaging/mge/hst` | 117.7 ms (vmap 165.1 ms) | 164.3 ms (vmap 178.9 ms) | 256.1 ms (vmap 187.1 ms) | 140.5 ms (vmap 222.8 ms) | +| `imaging/mge/jwst` | 716.2 ms (vmap 574.8 ms) | 678.5 ms (vmap 527.1 ms) | 387.3 ms (vmap 381.7 ms) | 488.7 ms (vmap 380.6 ms) | +| `imaging/pixelization/hst` | 13.72 s (vmap 12.50 s) | 14.78 s (vmap 13.05 s) | 5.79 s (vmap 5.16 s) | 5.25 s (vmap 6.42 s) | +| `imaging/pixelization/jwst` | 21.78 s (vmap 28.32 s) | 43.58 s (vmap 29.39 s) | 9.57 s (vmap 9.69 s) | 9.42 s (vmap 9.47 s) | +| `interferometer/delaunay/alma` | — | 6.51 s (vmap 7.77 s) | — | — | +| `interferometer/delaunay/sma` | 2.58 s (vmap 2.36 s) | 3.34 s (vmap 2.60 s) | — | — | +| `interferometer/mge/sma` | 230.7 ms (vmap 237.1 ms) | 231.5 ms (vmap 254.6 ms) | — | — | +| `interferometer/pixelization/sma` | 2.04 s (vmap 2.03 s) | 2.39 s (vmap 2.48 s) | — | — | diff --git a/results/baselines/PreOptimizationTimes/datacube/delaunay/sma/comparison.json b/results/baselines/PreOptimizationTimes/datacube/delaunay/sma/comparison.json new file mode 100644 index 0000000..57e2ab3 --- /dev/null +++ b/results/baselines/PreOptimizationTimes/datacube/delaunay/sma/comparison.json @@ -0,0 +1,138 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "delaunay", + "n_channels": 34, + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities_per_channel": 190, + "hilbert_pixels": 1500, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "regularization_coefficient": 1.0 + }, + "cube_log_evidence_eager": -107760.2121189882, + "cube_log_evidence_jit": null, + "log_evidence_per_channel_eager": [ + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652 + ], + "full_pipeline_cube_single_jit": NaN, + "shared_lwl_savings_estimate": null, + "vmap": "SKIPPED \u2014 cube batching axis is 'datasets', not 'parameters'", + "pinned_expected": null, + "pinned_drift": [], + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "delaunay", + "n_channels": 34, + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities_per_channel": 190, + "hilbert_pixels": 1500, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "regularization_coefficient": 1.0 + }, + "cube_log_evidence_eager": -107760.21211884917, + "cube_log_evidence_jit": null, + "log_evidence_per_channel_eager": [ + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634 + ], + "full_pipeline_cube_single_jit": NaN, + "shared_lwl_savings_estimate": null, + "vmap": "SKIPPED \u2014 cube batching axis is 'datasets', not 'parameters'", + "pinned_expected": null, + "pinned_drift": [], + "config_name": "local_cpu_mp" + } + } +} \ No newline at end of file diff --git a/results/baselines/PreOptimizationTimes/imaging/delaunay/hst/comparison.json b/results/baselines/PreOptimizationTimes/imaging/delaunay/hst/comparison.json new file mode 100644 index 0000000..e6cd1a5 --- /dev/null +++ b/results/baselines/PreOptimizationTimes/imaging/delaunay/hst/comparison.json @@ -0,0 +1,108 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 16.729484930000034, + "vmap": { + "batch_size": 3, + "batch_time": 37.98233206000005, + "per_call": 12.66077735333335, + "speedup_vs_single_jit": 1.3 + }, + "full_pipeline_per_call": 16.729484930000034, + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 17.836323139999877, + "vmap": { + "batch_size": 3, + "batch_time": 48.08783619000023, + "per_call": 16.029278730000076, + "speedup_vs_single_jit": 1.1 + }, + "full_pipeline_per_call": 17.836323139999877, + "config_name": "local_cpu_mp" + }, + "local_cpu_fp64_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 4.144032109999898, + "vmap": { + "batch_size": 3, + "batch_time": 15.646753510000053, + "per_call": 5.215584503333351, + "speedup_vs_single_jit": 0.8 + }, + "full_pipeline_per_call": 4.144032109999898, + "config_name": "local_cpu_fp64_sparse" + }, + "local_cpu_mp_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 4.485923779999939, + "vmap": { + "batch_size": 3, + "batch_time": 14.852275139999984, + "per_call": 4.950758379999995, + "speedup_vs_single_jit": 0.9 + }, + "full_pipeline_per_call": 4.485923779999939, + "config_name": "local_cpu_mp_sparse" + } + } +} \ No newline at end of file diff --git a/results/baselines/PreOptimizationTimes/imaging/delaunay/jwst/comparison.json b/results/baselines/PreOptimizationTimes/imaging/delaunay/jwst/comparison.json new file mode 100644 index 0000000..312ceea --- /dev/null +++ b/results/baselines/PreOptimizationTimes/imaging/delaunay/jwst/comparison.json @@ -0,0 +1,116 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 48.81026199999978, + "vmap": { + "batch_size": 3, + "batch_time": 78.67906350999984, + "per_call": 26.22635450333328, + "speedup_vs_single_jit": 1.9 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 48.81026199999978, + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 22.427841500000067, + "vmap": { + "batch_size": 3, + "batch_time": 58.518978959999366, + "per_call": 19.50632631999979, + "speedup_vs_single_jit": 1.1 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 22.427841500000067, + "config_name": "local_cpu_mp" + }, + "local_cpu_fp64_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 10.423912969999947, + "vmap": { + "batch_size": 3, + "batch_time": 36.90266413000027, + "per_call": 12.300888043333423, + "speedup_vs_single_jit": 0.8 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 10.423912969999947, + "config_name": "local_cpu_fp64_sparse" + }, + "local_cpu_mp_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 14.046471999999994, + "vmap": { + "batch_size": 3, + "batch_time": 38.551407760000075, + "per_call": 12.850469253333358, + "speedup_vs_single_jit": 1.1 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 14.046471999999994, + "config_name": "local_cpu_mp_sparse" + } + } +} \ No newline at end of file diff --git a/results/baselines/PreOptimizationTimes/imaging/mge/ao/comparison.json b/results/baselines/PreOptimizationTimes/imaging/mge/ao/comparison.json new file mode 100644 index 0000000..177678b --- /dev/null +++ b/results/baselines/PreOptimizationTimes/imaging/mge/ao/comparison.json @@ -0,0 +1,66 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "ao", + "configuration": { + "pixel_scale_arcsec": 0.01, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 384753, + "over_sampled_pixels": 452472, + "linear_gaussians": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 3.108424629999354, + "vmap": { + "batch_size": 3, + "batch_time": 14.766714850000426, + "per_call": 4.922238283333475, + "speedup_vs_single_jit": 0.6 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 1414.882942199707 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 3.108424629999354, + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "ao", + "configuration": { + "pixel_scale_arcsec": 0.01, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 384753, + "over_sampled_pixels": 452472, + "linear_gaussians": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 5.712817799999902, + "vmap": { + "batch_size": 3, + "batch_time": 12.068956730000355, + "per_call": 4.022985576666785, + "speedup_vs_single_jit": 1.4 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 1414.882942199707 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 5.712817799999902, + "config_name": "local_cpu_mp" + } + } +} \ No newline at end of file diff --git a/results/baselines/PreOptimizationTimes/imaging/mge/hst/comparison.json b/results/baselines/PreOptimizationTimes/imaging/mge/hst/comparison.json new file mode 100644 index 0000000..e7a0b6e --- /dev/null +++ b/results/baselines/PreOptimizationTimes/imaging/mge/hst/comparison.json @@ -0,0 +1,120 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "linear_gaussians": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 0.11771118000033312, + "vmap": { + "batch_size": 3, + "batch_time": 0.4953926900001534, + "per_call": 0.1651308966667178, + "speedup_vs_single_jit": 0.7 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 68.25275421142578 + }, + "full_pipeline_per_call": 0.11771118000033312, + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "linear_gaussians": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 0.16434103999999933, + "vmap": { + "batch_size": 3, + "batch_time": 0.5367918200005078, + "per_call": 0.17893060666683594, + "speedup_vs_single_jit": 0.9 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 68.25275421142578 + }, + "full_pipeline_per_call": 0.16434103999999933, + "config_name": "local_cpu_mp" + }, + "local_cpu_fp64_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "linear_gaussians": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 0.2561067099999491, + "vmap": { + "batch_size": 3, + "batch_time": 0.5611974300001747, + "per_call": 0.18706581000005826, + "speedup_vs_single_jit": 1.4 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 68.25275421142578 + }, + "full_pipeline_per_call": 0.2561067099999491, + "config_name": "local_cpu_fp64_sparse" + }, + "local_cpu_mp_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "linear_gaussians": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 0.14046013000006496, + "vmap": { + "batch_size": 3, + "batch_time": 0.6683561499998177, + "per_call": 0.22278538333327258, + "speedup_vs_single_jit": 0.6 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 68.25275421142578 + }, + "full_pipeline_per_call": 0.14046013000006496, + "config_name": "local_cpu_mp_sparse" + } + } +} \ No newline at end of file diff --git a/results/baselines/PreOptimizationTimes/imaging/mge/jwst/comparison.json b/results/baselines/PreOptimizationTimes/imaging/mge/jwst/comparison.json new file mode 100644 index 0000000..899286d --- /dev/null +++ b/results/baselines/PreOptimizationTimes/imaging/mge/jwst/comparison.json @@ -0,0 +1,128 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "linear_gaussians": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 0.7161960399993405, + "vmap": { + "batch_size": 3, + "batch_time": 1.7243418900005054, + "per_call": 0.5747806300001684, + "speedup_vs_single_jit": 1.2 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 178.60346221923828 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 0.7161960399993405, + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "linear_gaussians": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 0.6784522000001744, + "vmap": { + "batch_size": 3, + "batch_time": 1.5812463000002026, + "per_call": 0.5270821000000675, + "speedup_vs_single_jit": 1.3 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 178.60346221923828 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 0.6784522000001744, + "config_name": "local_cpu_mp" + }, + "local_cpu_fp64_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "linear_gaussians": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 0.38725629000000483, + "vmap": { + "batch_size": 3, + "batch_time": 1.1452440600001865, + "per_call": 0.3817480200000622, + "speedup_vs_single_jit": 1.0 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 178.60346221923828 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 0.38725629000000483, + "config_name": "local_cpu_fp64_sparse" + }, + "local_cpu_mp_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "linear_gaussians": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 0.488690349999888, + "vmap": { + "batch_size": 3, + "batch_time": 1.141936590000114, + "per_call": 0.380645530000038, + "speedup_vs_single_jit": 1.3 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 178.60346221923828 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 0.488690349999888, + "config_name": "local_cpu_mp_sparse" + } + } +} \ No newline at end of file diff --git a/results/baselines/PreOptimizationTimes/imaging/pixelization/hst/comparison.json b/results/baselines/PreOptimizationTimes/imaging/pixelization/hst/comparison.json new file mode 100644 index 0000000..2285ff5 --- /dev/null +++ b/results/baselines/PreOptimizationTimes/imaging/pixelization/hst/comparison.json @@ -0,0 +1,120 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 13.724898559999565, + "vmap": { + "batch_size": 3, + "batch_time": 37.49440379000007, + "per_call": 12.49813459666669, + "speedup_vs_single_jit": 1.1 + }, + "full_pipeline_per_call": 13.724898559999565, + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 14.778166580000107, + "vmap": { + "batch_size": 3, + "batch_time": 39.16161323000051, + "per_call": 13.053871076666837, + "speedup_vs_single_jit": 1.1 + }, + "full_pipeline_per_call": 14.778166580000107, + "config_name": "local_cpu_mp" + }, + "local_cpu_fp64_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 5.789975740000227, + "vmap": { + "batch_size": 3, + "batch_time": 15.478287939999792, + "per_call": 5.159429313333264, + "speedup_vs_single_jit": 1.1 + }, + "full_pipeline_per_call": 5.789975740000227, + "config_name": "local_cpu_fp64_sparse" + }, + "local_cpu_mp_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 5.246675999999934, + "vmap": { + "batch_size": 3, + "batch_time": 19.256898960000036, + "per_call": 6.418966320000012, + "speedup_vs_single_jit": 0.8 + }, + "full_pipeline_per_call": 5.246675999999934, + "config_name": "local_cpu_mp_sparse" + } + } +} \ No newline at end of file diff --git a/results/baselines/PreOptimizationTimes/imaging/pixelization/jwst/comparison.json b/results/baselines/PreOptimizationTimes/imaging/pixelization/jwst/comparison.json new file mode 100644 index 0000000..cc7adc2 --- /dev/null +++ b/results/baselines/PreOptimizationTimes/imaging/pixelization/jwst/comparison.json @@ -0,0 +1,128 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 21.778462779999973, + "vmap": { + "batch_size": 3, + "batch_time": 84.96139948999989, + "per_call": 28.32046649666663, + "speedup_vs_single_jit": 0.8 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 21.778462779999973, + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 43.58491838000045, + "vmap": { + "batch_size": 3, + "batch_time": 88.16873673000009, + "per_call": 29.38957891000003, + "speedup_vs_single_jit": 1.5 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 43.58491838000045, + "config_name": "local_cpu_mp" + }, + "local_cpu_fp64_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 9.566611529999864, + "vmap": { + "batch_size": 3, + "batch_time": 29.07211525999992, + "per_call": 9.69070508666664, + "speedup_vs_single_jit": 1.0 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 9.566611529999864, + "config_name": "local_cpu_fp64_sparse" + }, + "local_cpu_mp_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 9.420377540000118, + "vmap": { + "batch_size": 3, + "batch_time": 28.422692229999665, + "per_call": 9.474230743333221, + "speedup_vs_single_jit": 1.0 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 9.420377540000118, + "config_name": "local_cpu_mp_sparse" + } + } +} \ No newline at end of file diff --git a/results/baselines/PreOptimizationTimes/interferometer/delaunay/alma/comparison.json b/results/baselines/PreOptimizationTimes/interferometer/delaunay/alma/comparison.json new file mode 100644 index 0000000..204188b --- /dev/null +++ b/results/baselines/PreOptimizationTimes/interferometer/delaunay/alma/comparison.json @@ -0,0 +1,48 @@ +{ + "configs": { + "local_cpu_fp64": { + "cpu_unusable": true, + "reason": "OOM-killed at 2858s (fp64 peak exceeds 15GB laptop RAM; mp variant fits) \u2014 GPU-only" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "alma", + "model": "delaunay", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 800, + 800 + ], + "visibilities": 1000000, + "hilbert_pixels": 1500, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "regularization_coefficient": 1.0 + }, + "log_likelihood_eager": -12046565.912254658, + "figure_of_merit_eager": -12050103.936275907, + "log_evidence_jit": -12050103.936275903, + "full_pipeline_single_jit": 6.505125349999981, + "vmap": { + "batch_size": 3, + "batch_time": 23.295176749999975, + "per_call": 7.765058916666658, + "speedup_vs_single_jit": 0.8 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 1304.2683868408203 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 6.505125349999981, + "config_name": "local_cpu_mp" + } + } +} \ No newline at end of file diff --git a/results/baselines/PreOptimizationTimes/interferometer/delaunay/sma/comparison.json b/results/baselines/PreOptimizationTimes/interferometer/delaunay/sma/comparison.json new file mode 100644 index 0000000..202744d --- /dev/null +++ b/results/baselines/PreOptimizationTimes/interferometer/delaunay/sma/comparison.json @@ -0,0 +1,84 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "delaunay", + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities": 190, + "hilbert_pixels": 1500, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "regularization_coefficient": 1.0 + }, + "log_likelihood_eager": -3151.1884830573845, + "figure_of_merit_eager": -3169.418003499652, + "log_evidence_jit": -3169.418003498359, + "full_pipeline_single_jit": 2.576843710000003, + "vmap": { + "batch_size": 3, + "batch_time": 7.0804431199999955, + "per_call": 2.360147706666665, + "speedup_vs_single_jit": 1.1 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 481.2399444580078 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 2.576843710000003, + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "delaunay", + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities": 190, + "hilbert_pixels": 1500, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "regularization_coefficient": 1.0 + }, + "log_likelihood_eager": -3151.1884830535732, + "figure_of_merit_eager": -3169.4180034955634, + "log_evidence_jit": -3169.418003494271, + "full_pipeline_single_jit": 3.342003539999996, + "vmap": { + "batch_size": 3, + "batch_time": 7.811871840000004, + "per_call": 2.6039572800000013, + "speedup_vs_single_jit": 1.3 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 415.7746124267578 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 3.342003539999996, + "config_name": "local_cpu_mp" + } + } +} \ No newline at end of file diff --git a/results/baselines/PreOptimizationTimes/interferometer/mge/sma/comparison.json b/results/baselines/PreOptimizationTimes/interferometer/mge/sma/comparison.json new file mode 100644 index 0000000..fd16050 --- /dev/null +++ b/results/baselines/PreOptimizationTimes/interferometer/mge/sma/comparison.json @@ -0,0 +1,80 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "mge", + "transformer": "TransformerNUFFT", + "use_mixed_precision": false, + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities": 190, + "linear_gaussians": 20 + }, + "log_likelihood_eager": -3153.942384509246, + "log_likelihood_jit": -3153.9482303797345, + "full_pipeline_single_jit": 0.23072274000005563, + "vmap": { + "batch_size": 3, + "batch_time": 0.7112842499998806, + "per_call": 0.2370947499999602, + "speedup_vs_single_jit": 1.0 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 480.0889358520508 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 0.23072274000005563, + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "mge", + "transformer": "TransformerNUFFT", + "use_mixed_precision": true, + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities": 190, + "linear_gaussians": 20 + }, + "log_likelihood_eager": -3153.942384509246, + "log_likelihood_jit": -3153.948230485718, + "full_pipeline_single_jit": 0.23150078000035137, + "vmap": { + "batch_size": 3, + "batch_time": 0.7638046000000032, + "per_call": 0.2546015333333344, + "speedup_vs_single_jit": 0.9 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 480.0889358520508 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 0.23150078000035137, + "config_name": "local_cpu_mp" + } + } +} \ No newline at end of file diff --git a/results/baselines/PreOptimizationTimes/interferometer/pixelization/sma/comparison.json b/results/baselines/PreOptimizationTimes/interferometer/pixelization/sma/comparison.json new file mode 100644 index 0000000..92187c9 --- /dev/null +++ b/results/baselines/PreOptimizationTimes/interferometer/pixelization/sma/comparison.json @@ -0,0 +1,88 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "pixelization", + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities": 190, + "mesh_shape": [ + 32, + 32 + ], + "source_pixels": 1024, + "regularization_coefficient": 1.0 + }, + "log_likelihood_eager": -3153.2752843563044, + "figure_of_merit_eager": -3167.8953311746577, + "log_evidence_jit": -3167.895467117936, + "full_pipeline_single_jit": 2.0423672299999454, + "vmap": { + "batch_size": 3, + "batch_time": 6.077660099999775, + "per_call": 2.025886699999925, + "speedup_vs_single_jit": 1.0 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 365.5854034423828 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 2.0423672299999454, + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "pixelization", + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities": 190, + "mesh_shape": [ + 32, + 32 + ], + "source_pixels": 1024, + "regularization_coefficient": 1.0 + }, + "log_likelihood_eager": -3153.275284357005, + "figure_of_merit_eager": -3167.895331174689, + "log_evidence_jit": -3167.8954671179868, + "full_pipeline_single_jit": 2.38713332000043, + "vmap": { + "batch_size": 3, + "batch_time": 7.42951957999976, + "per_call": 2.476506526666587, + "speedup_vs_single_jit": 1.0 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 320.4007110595703 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 2.38713332000043, + "config_name": "local_cpu_mp" + } + } +} \ No newline at end of file diff --git a/results/notes/design_lock_in.md b/results/notes/design_lock_in.md index 80c8651..12831d9 100644 --- a/results/notes/design_lock_in.md +++ b/results/notes/design_lock_in.md @@ -113,6 +113,20 @@ it measures the same computation — *not* library regression testing (that is surface Heart's vitals scan reads (tracked as its own Mind task, `feature/pyautoheart/profiling_drift_check.md`). +## CPU-usability policy (added phase 3, user-directed) + +A configuration is **CPU-unusable** when either (a) its profiling run cannot +finish inside the per-run wall-clock cap (`sweep.py --per-run-timeout`, +campaign default 3600 s), or (b) its measured per-call cost exceeds ~1 min — +samplers need 10⁴–10⁶ evaluations, so the precise number carries no decision +content. In both cases the **classification is the result**: the sweep writes +an `.unusable.json` marker (honoured by `--skip-existing`, folded into +`comparison.json` as `{"cpu_unusable": true}`), and the dashboard renders +**GPU-only** / "(unusable)" instead of a number. Full timings for these cells +belong to the A100 rows. The CPU-usability map is a first-class campaign +deliverable — it defines which cells the optimization push only ever needs to +consider on GPU. + ## Deliberately out of scope here Profiling runs (phases 2–4); searches profiling; `point_source` cells (in the diff --git a/results/runtime/datacube/delaunay/alma/delaunay_local_cpu_fp64.unusable.json b/results/runtime/datacube/delaunay/alma/delaunay_local_cpu_fp64.unusable.json new file mode 100644 index 0000000..d10bf83 --- /dev/null +++ b/results/runtime/datacube/delaunay/alma/delaunay_local_cpu_fp64.unusable.json @@ -0,0 +1,6 @@ +{ + "cpu_unusable": true, + "reason": "wall-clock timeout after 3600s \u2014 GPU-only", + "config_name": "local_cpu_fp64", + "timeout_seconds": 3600.0 +} \ No newline at end of file diff --git a/results/runtime/datacube/delaunay/sma/comparison.json b/results/runtime/datacube/delaunay/sma/comparison.json new file mode 100644 index 0000000..57e2ab3 --- /dev/null +++ b/results/runtime/datacube/delaunay/sma/comparison.json @@ -0,0 +1,138 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "delaunay", + "n_channels": 34, + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities_per_channel": 190, + "hilbert_pixels": 1500, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "regularization_coefficient": 1.0 + }, + "cube_log_evidence_eager": -107760.2121189882, + "cube_log_evidence_jit": null, + "log_evidence_per_channel_eager": [ + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652 + ], + "full_pipeline_cube_single_jit": NaN, + "shared_lwl_savings_estimate": null, + "vmap": "SKIPPED \u2014 cube batching axis is 'datasets', not 'parameters'", + "pinned_expected": null, + "pinned_drift": [], + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "delaunay", + "n_channels": 34, + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities_per_channel": 190, + "hilbert_pixels": 1500, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "regularization_coefficient": 1.0 + }, + "cube_log_evidence_eager": -107760.21211884917, + "cube_log_evidence_jit": null, + "log_evidence_per_channel_eager": [ + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634 + ], + "full_pipeline_cube_single_jit": NaN, + "shared_lwl_savings_estimate": null, + "vmap": "SKIPPED \u2014 cube batching axis is 'datasets', not 'parameters'", + "pinned_expected": null, + "pinned_drift": [], + "config_name": "local_cpu_mp" + } + } +} \ No newline at end of file diff --git a/results/runtime/datacube/delaunay/sma/delaunay_local_cpu_fp64.json b/results/runtime/datacube/delaunay/sma/delaunay_local_cpu_fp64.json new file mode 100644 index 0000000..278209f --- /dev/null +++ b/results/runtime/datacube/delaunay/sma/delaunay_local_cpu_fp64.json @@ -0,0 +1,66 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "delaunay", + "n_channels": 34, + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities_per_channel": 190, + "hilbert_pixels": 1500, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "regularization_coefficient": 1.0 + }, + "cube_log_evidence_eager": -107760.2121189882, + "cube_log_evidence_jit": null, + "log_evidence_per_channel_eager": [ + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652, + -3169.418003499652 + ], + "full_pipeline_cube_single_jit": NaN, + "shared_lwl_savings_estimate": null, + "vmap": "SKIPPED \u2014 cube batching axis is 'datasets', not 'parameters'", + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/datacube/delaunay/sma/delaunay_local_cpu_mp.json b/results/runtime/datacube/delaunay/sma/delaunay_local_cpu_mp.json new file mode 100644 index 0000000..c641b24 --- /dev/null +++ b/results/runtime/datacube/delaunay/sma/delaunay_local_cpu_mp.json @@ -0,0 +1,66 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "delaunay", + "n_channels": 34, + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities_per_channel": 190, + "hilbert_pixels": 1500, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "regularization_coefficient": 1.0 + }, + "cube_log_evidence_eager": -107760.21211884917, + "cube_log_evidence_jit": null, + "log_evidence_per_channel_eager": [ + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634, + -3169.4180034955634 + ], + "full_pipeline_cube_single_jit": NaN, + "shared_lwl_savings_estimate": null, + "vmap": "SKIPPED \u2014 cube batching axis is 'datasets', not 'parameters'", + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/imaging/delaunay/hst/comparison.json b/results/runtime/imaging/delaunay/hst/comparison.json new file mode 100644 index 0000000..e6cd1a5 --- /dev/null +++ b/results/runtime/imaging/delaunay/hst/comparison.json @@ -0,0 +1,108 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 16.729484930000034, + "vmap": { + "batch_size": 3, + "batch_time": 37.98233206000005, + "per_call": 12.66077735333335, + "speedup_vs_single_jit": 1.3 + }, + "full_pipeline_per_call": 16.729484930000034, + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 17.836323139999877, + "vmap": { + "batch_size": 3, + "batch_time": 48.08783619000023, + "per_call": 16.029278730000076, + "speedup_vs_single_jit": 1.1 + }, + "full_pipeline_per_call": 17.836323139999877, + "config_name": "local_cpu_mp" + }, + "local_cpu_fp64_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 4.144032109999898, + "vmap": { + "batch_size": 3, + "batch_time": 15.646753510000053, + "per_call": 5.215584503333351, + "speedup_vs_single_jit": 0.8 + }, + "full_pipeline_per_call": 4.144032109999898, + "config_name": "local_cpu_fp64_sparse" + }, + "local_cpu_mp_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 4.485923779999939, + "vmap": { + "batch_size": 3, + "batch_time": 14.852275139999984, + "per_call": 4.950758379999995, + "speedup_vs_single_jit": 0.9 + }, + "full_pipeline_per_call": 4.485923779999939, + "config_name": "local_cpu_mp_sparse" + } + } +} \ No newline at end of file diff --git a/results/runtime/imaging/delaunay/hst/comparison.png b/results/runtime/imaging/delaunay/hst/comparison.png new file mode 100644 index 0000000..5add459 Binary files /dev/null and b/results/runtime/imaging/delaunay/hst/comparison.png differ diff --git a/results/runtime/imaging/delaunay/hst/delaunay_local_cpu_fp64.json b/results/runtime/imaging/delaunay/hst/delaunay_local_cpu_fp64.json new file mode 100644 index 0000000..eb7c762 --- /dev/null +++ b/results/runtime/imaging/delaunay/hst/delaunay_local_cpu_fp64.json @@ -0,0 +1,24 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 16.729484930000034, + "vmap": { + "batch_size": 3, + "batch_time": 37.98233206000005, + "per_call": 12.66077735333335, + "speedup_vs_single_jit": 1.3 + } +} \ No newline at end of file diff --git a/results/runtime/imaging/delaunay/hst/delaunay_local_cpu_fp64_sparse.json b/results/runtime/imaging/delaunay/hst/delaunay_local_cpu_fp64_sparse.json new file mode 100644 index 0000000..048ab27 --- /dev/null +++ b/results/runtime/imaging/delaunay/hst/delaunay_local_cpu_fp64_sparse.json @@ -0,0 +1,24 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 4.144032109999898, + "vmap": { + "batch_size": 3, + "batch_time": 15.646753510000053, + "per_call": 5.215584503333351, + "speedup_vs_single_jit": 0.8 + } +} \ No newline at end of file diff --git a/results/runtime/imaging/delaunay/hst/delaunay_local_cpu_mp.json b/results/runtime/imaging/delaunay/hst/delaunay_local_cpu_mp.json new file mode 100644 index 0000000..188cd65 --- /dev/null +++ b/results/runtime/imaging/delaunay/hst/delaunay_local_cpu_mp.json @@ -0,0 +1,24 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 17.836323139999877, + "vmap": { + "batch_size": 3, + "batch_time": 48.08783619000023, + "per_call": 16.029278730000076, + "speedup_vs_single_jit": 1.1 + } +} \ No newline at end of file diff --git a/results/runtime/imaging/delaunay/hst/delaunay_local_cpu_mp_sparse.json b/results/runtime/imaging/delaunay/hst/delaunay_local_cpu_mp_sparse.json new file mode 100644 index 0000000..bd983c8 --- /dev/null +++ b/results/runtime/imaging/delaunay/hst/delaunay_local_cpu_mp_sparse.json @@ -0,0 +1,24 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 4.485923779999939, + "vmap": { + "batch_size": 3, + "batch_time": 14.852275139999984, + "per_call": 4.950758379999995, + "speedup_vs_single_jit": 0.9 + } +} \ No newline at end of file diff --git a/results/runtime/imaging/delaunay/jwst/comparison.json b/results/runtime/imaging/delaunay/jwst/comparison.json new file mode 100644 index 0000000..312ceea --- /dev/null +++ b/results/runtime/imaging/delaunay/jwst/comparison.json @@ -0,0 +1,116 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 48.81026199999978, + "vmap": { + "batch_size": 3, + "batch_time": 78.67906350999984, + "per_call": 26.22635450333328, + "speedup_vs_single_jit": 1.9 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 48.81026199999978, + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 22.427841500000067, + "vmap": { + "batch_size": 3, + "batch_time": 58.518978959999366, + "per_call": 19.50632631999979, + "speedup_vs_single_jit": 1.1 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 22.427841500000067, + "config_name": "local_cpu_mp" + }, + "local_cpu_fp64_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 10.423912969999947, + "vmap": { + "batch_size": 3, + "batch_time": 36.90266413000027, + "per_call": 12.300888043333423, + "speedup_vs_single_jit": 0.8 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 10.423912969999947, + "config_name": "local_cpu_fp64_sparse" + }, + "local_cpu_mp_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 14.046471999999994, + "vmap": { + "batch_size": 3, + "batch_time": 38.551407760000075, + "per_call": 12.850469253333358, + "speedup_vs_single_jit": 1.1 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 14.046471999999994, + "config_name": "local_cpu_mp_sparse" + } + } +} \ No newline at end of file diff --git a/results/runtime/imaging/delaunay/jwst/comparison.png b/results/runtime/imaging/delaunay/jwst/comparison.png new file mode 100644 index 0000000..a1c6ddb Binary files /dev/null and b/results/runtime/imaging/delaunay/jwst/comparison.png differ diff --git a/results/runtime/imaging/delaunay/jwst/delaunay_local_cpu_fp64.json b/results/runtime/imaging/delaunay/jwst/delaunay_local_cpu_fp64.json new file mode 100644 index 0000000..a0bc3a8 --- /dev/null +++ b/results/runtime/imaging/delaunay/jwst/delaunay_local_cpu_fp64.json @@ -0,0 +1,26 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 48.81026199999978, + "vmap": { + "batch_size": 3, + "batch_time": 78.67906350999984, + "per_call": 26.22635450333328, + "speedup_vs_single_jit": 1.9 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/imaging/delaunay/jwst/delaunay_local_cpu_fp64_sparse.json b/results/runtime/imaging/delaunay/jwst/delaunay_local_cpu_fp64_sparse.json new file mode 100644 index 0000000..ca5d831 --- /dev/null +++ b/results/runtime/imaging/delaunay/jwst/delaunay_local_cpu_fp64_sparse.json @@ -0,0 +1,26 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 10.423912969999947, + "vmap": { + "batch_size": 3, + "batch_time": 36.90266413000027, + "per_call": 12.300888043333423, + "speedup_vs_single_jit": 0.8 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/imaging/delaunay/jwst/delaunay_local_cpu_mp.json b/results/runtime/imaging/delaunay/jwst/delaunay_local_cpu_mp.json new file mode 100644 index 0000000..2cae4b3 --- /dev/null +++ b/results/runtime/imaging/delaunay/jwst/delaunay_local_cpu_mp.json @@ -0,0 +1,26 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 22.427841500000067, + "vmap": { + "batch_size": 3, + "batch_time": 58.518978959999366, + "per_call": 19.50632631999979, + "speedup_vs_single_jit": 1.1 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/imaging/delaunay/jwst/delaunay_local_cpu_mp_sparse.json b/results/runtime/imaging/delaunay/jwst/delaunay_local_cpu_mp_sparse.json new file mode 100644 index 0000000..c6a521f --- /dev/null +++ b/results/runtime/imaging/delaunay/jwst/delaunay_local_cpu_mp_sparse.json @@ -0,0 +1,26 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 14.046471999999994, + "vmap": { + "batch_size": 3, + "batch_time": 38.551407760000075, + "per_call": 12.850469253333358, + "speedup_vs_single_jit": 1.1 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/imaging/mge/ao/comparison.json b/results/runtime/imaging/mge/ao/comparison.json new file mode 100644 index 0000000..177678b --- /dev/null +++ b/results/runtime/imaging/mge/ao/comparison.json @@ -0,0 +1,66 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "ao", + "configuration": { + "pixel_scale_arcsec": 0.01, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 384753, + "over_sampled_pixels": 452472, + "linear_gaussians": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 3.108424629999354, + "vmap": { + "batch_size": 3, + "batch_time": 14.766714850000426, + "per_call": 4.922238283333475, + "speedup_vs_single_jit": 0.6 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 1414.882942199707 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 3.108424629999354, + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "ao", + "configuration": { + "pixel_scale_arcsec": 0.01, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 384753, + "over_sampled_pixels": 452472, + "linear_gaussians": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 5.712817799999902, + "vmap": { + "batch_size": 3, + "batch_time": 12.068956730000355, + "per_call": 4.022985576666785, + "speedup_vs_single_jit": 1.4 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 1414.882942199707 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 5.712817799999902, + "config_name": "local_cpu_mp" + } + } +} \ No newline at end of file diff --git a/results/runtime/imaging/mge/ao/comparison.png b/results/runtime/imaging/mge/ao/comparison.png new file mode 100644 index 0000000..c6ebdfe Binary files /dev/null and b/results/runtime/imaging/mge/ao/comparison.png differ diff --git a/results/runtime/imaging/mge/ao/mge_local_cpu_fp64.json b/results/runtime/imaging/mge/ao/mge_local_cpu_fp64.json new file mode 100644 index 0000000..4bb4356 --- /dev/null +++ b/results/runtime/imaging/mge/ao/mge_local_cpu_fp64.json @@ -0,0 +1,29 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "ao", + "configuration": { + "pixel_scale_arcsec": 0.01, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 384753, + "over_sampled_pixels": 452472, + "linear_gaussians": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 3.108424629999354, + "vmap": { + "batch_size": 3, + "batch_time": 14.766714850000426, + "per_call": 4.922238283333475, + "speedup_vs_single_jit": 0.6 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 1414.882942199707 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/imaging/mge/ao/mge_local_cpu_mp.json b/results/runtime/imaging/mge/ao/mge_local_cpu_mp.json new file mode 100644 index 0000000..39a2ffe --- /dev/null +++ b/results/runtime/imaging/mge/ao/mge_local_cpu_mp.json @@ -0,0 +1,29 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "ao", + "configuration": { + "pixel_scale_arcsec": 0.01, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 384753, + "over_sampled_pixels": 452472, + "linear_gaussians": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 5.712817799999902, + "vmap": { + "batch_size": 3, + "batch_time": 12.068956730000355, + "per_call": 4.022985576666785, + "speedup_vs_single_jit": 1.4 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 1414.882942199707 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/imaging/mge/hst/comparison.json b/results/runtime/imaging/mge/hst/comparison.json new file mode 100644 index 0000000..e7a0b6e --- /dev/null +++ b/results/runtime/imaging/mge/hst/comparison.json @@ -0,0 +1,120 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "linear_gaussians": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 0.11771118000033312, + "vmap": { + "batch_size": 3, + "batch_time": 0.4953926900001534, + "per_call": 0.1651308966667178, + "speedup_vs_single_jit": 0.7 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 68.25275421142578 + }, + "full_pipeline_per_call": 0.11771118000033312, + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "linear_gaussians": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 0.16434103999999933, + "vmap": { + "batch_size": 3, + "batch_time": 0.5367918200005078, + "per_call": 0.17893060666683594, + "speedup_vs_single_jit": 0.9 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 68.25275421142578 + }, + "full_pipeline_per_call": 0.16434103999999933, + "config_name": "local_cpu_mp" + }, + "local_cpu_fp64_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "linear_gaussians": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 0.2561067099999491, + "vmap": { + "batch_size": 3, + "batch_time": 0.5611974300001747, + "per_call": 0.18706581000005826, + "speedup_vs_single_jit": 1.4 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 68.25275421142578 + }, + "full_pipeline_per_call": 0.2561067099999491, + "config_name": "local_cpu_fp64_sparse" + }, + "local_cpu_mp_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "linear_gaussians": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 0.14046013000006496, + "vmap": { + "batch_size": 3, + "batch_time": 0.6683561499998177, + "per_call": 0.22278538333327258, + "speedup_vs_single_jit": 0.6 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 68.25275421142578 + }, + "full_pipeline_per_call": 0.14046013000006496, + "config_name": "local_cpu_mp_sparse" + } + } +} \ No newline at end of file diff --git a/results/runtime/imaging/mge/hst/comparison.png b/results/runtime/imaging/mge/hst/comparison.png new file mode 100644 index 0000000..8036a7c Binary files /dev/null and b/results/runtime/imaging/mge/hst/comparison.png differ diff --git a/results/runtime/imaging/mge/hst/mge_local_cpu_fp64.json b/results/runtime/imaging/mge/hst/mge_local_cpu_fp64.json new file mode 100644 index 0000000..0bdfd9a --- /dev/null +++ b/results/runtime/imaging/mge/hst/mge_local_cpu_fp64.json @@ -0,0 +1,27 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "linear_gaussians": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 0.11771118000033312, + "vmap": { + "batch_size": 3, + "batch_time": 0.4953926900001534, + "per_call": 0.1651308966667178, + "speedup_vs_single_jit": 0.7 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 68.25275421142578 + } +} \ No newline at end of file diff --git a/results/runtime/imaging/mge/hst/mge_local_cpu_fp64_sparse.json b/results/runtime/imaging/mge/hst/mge_local_cpu_fp64_sparse.json new file mode 100644 index 0000000..5687eea --- /dev/null +++ b/results/runtime/imaging/mge/hst/mge_local_cpu_fp64_sparse.json @@ -0,0 +1,27 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "linear_gaussians": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 0.2561067099999491, + "vmap": { + "batch_size": 3, + "batch_time": 0.5611974300001747, + "per_call": 0.18706581000005826, + "speedup_vs_single_jit": 1.4 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 68.25275421142578 + } +} \ No newline at end of file diff --git a/results/runtime/imaging/mge/hst/mge_local_cpu_mp.json b/results/runtime/imaging/mge/hst/mge_local_cpu_mp.json new file mode 100644 index 0000000..ef91cc1 --- /dev/null +++ b/results/runtime/imaging/mge/hst/mge_local_cpu_mp.json @@ -0,0 +1,27 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "linear_gaussians": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 0.16434103999999933, + "vmap": { + "batch_size": 3, + "batch_time": 0.5367918200005078, + "per_call": 0.17893060666683594, + "speedup_vs_single_jit": 0.9 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 68.25275421142578 + } +} \ No newline at end of file diff --git a/results/runtime/imaging/mge/hst/mge_local_cpu_mp_sparse.json b/results/runtime/imaging/mge/hst/mge_local_cpu_mp_sparse.json new file mode 100644 index 0000000..bab603e --- /dev/null +++ b/results/runtime/imaging/mge/hst/mge_local_cpu_mp_sparse.json @@ -0,0 +1,27 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "linear_gaussians": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 0.14046013000006496, + "vmap": { + "batch_size": 3, + "batch_time": 0.6683561499998177, + "per_call": 0.22278538333327258, + "speedup_vs_single_jit": 0.6 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 68.25275421142578 + } +} \ No newline at end of file diff --git a/results/runtime/imaging/mge/jwst/comparison.json b/results/runtime/imaging/mge/jwst/comparison.json new file mode 100644 index 0000000..899286d --- /dev/null +++ b/results/runtime/imaging/mge/jwst/comparison.json @@ -0,0 +1,128 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "linear_gaussians": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 0.7161960399993405, + "vmap": { + "batch_size": 3, + "batch_time": 1.7243418900005054, + "per_call": 0.5747806300001684, + "speedup_vs_single_jit": 1.2 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 178.60346221923828 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 0.7161960399993405, + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "linear_gaussians": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 0.6784522000001744, + "vmap": { + "batch_size": 3, + "batch_time": 1.5812463000002026, + "per_call": 0.5270821000000675, + "speedup_vs_single_jit": 1.3 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 178.60346221923828 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 0.6784522000001744, + "config_name": "local_cpu_mp" + }, + "local_cpu_fp64_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "linear_gaussians": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 0.38725629000000483, + "vmap": { + "batch_size": 3, + "batch_time": 1.1452440600001865, + "per_call": 0.3817480200000622, + "speedup_vs_single_jit": 1.0 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 178.60346221923828 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 0.38725629000000483, + "config_name": "local_cpu_fp64_sparse" + }, + "local_cpu_mp_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "linear_gaussians": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 0.488690349999888, + "vmap": { + "batch_size": 3, + "batch_time": 1.141936590000114, + "per_call": 0.380645530000038, + "speedup_vs_single_jit": 1.3 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 178.60346221923828 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 0.488690349999888, + "config_name": "local_cpu_mp_sparse" + } + } +} \ No newline at end of file diff --git a/results/runtime/imaging/mge/jwst/comparison.png b/results/runtime/imaging/mge/jwst/comparison.png new file mode 100644 index 0000000..7178a21 Binary files /dev/null and b/results/runtime/imaging/mge/jwst/comparison.png differ diff --git a/results/runtime/imaging/mge/jwst/mge_local_cpu_fp64.json b/results/runtime/imaging/mge/jwst/mge_local_cpu_fp64.json new file mode 100644 index 0000000..8abfc3c --- /dev/null +++ b/results/runtime/imaging/mge/jwst/mge_local_cpu_fp64.json @@ -0,0 +1,29 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "linear_gaussians": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 0.7161960399993405, + "vmap": { + "batch_size": 3, + "batch_time": 1.7243418900005054, + "per_call": 0.5747806300001684, + "speedup_vs_single_jit": 1.2 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 178.60346221923828 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/imaging/mge/jwst/mge_local_cpu_fp64_sparse.json b/results/runtime/imaging/mge/jwst/mge_local_cpu_fp64_sparse.json new file mode 100644 index 0000000..7726a5a --- /dev/null +++ b/results/runtime/imaging/mge/jwst/mge_local_cpu_fp64_sparse.json @@ -0,0 +1,29 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "linear_gaussians": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 0.38725629000000483, + "vmap": { + "batch_size": 3, + "batch_time": 1.1452440600001865, + "per_call": 0.3817480200000622, + "speedup_vs_single_jit": 1.0 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 178.60346221923828 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/imaging/mge/jwst/mge_local_cpu_mp.json b/results/runtime/imaging/mge/jwst/mge_local_cpu_mp.json new file mode 100644 index 0000000..f293929 --- /dev/null +++ b/results/runtime/imaging/mge/jwst/mge_local_cpu_mp.json @@ -0,0 +1,29 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "linear_gaussians": 0, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 0.6784522000001744, + "vmap": { + "batch_size": 3, + "batch_time": 1.5812463000002026, + "per_call": 0.5270821000000675, + "speedup_vs_single_jit": 1.3 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 178.60346221923828 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/imaging/mge/jwst/mge_local_cpu_mp_sparse.json b/results/runtime/imaging/mge/jwst/mge_local_cpu_mp_sparse.json new file mode 100644 index 0000000..b071919 --- /dev/null +++ b/results/runtime/imaging/mge/jwst/mge_local_cpu_mp_sparse.json @@ -0,0 +1,29 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "linear_gaussians": 0, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 0.488690349999888, + "vmap": { + "batch_size": 3, + "batch_time": 1.141936590000114, + "per_call": 0.380645530000038, + "speedup_vs_single_jit": 1.3 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 178.60346221923828 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/imaging/pixelization/hst/comparison.json b/results/runtime/imaging/pixelization/hst/comparison.json new file mode 100644 index 0000000..2285ff5 --- /dev/null +++ b/results/runtime/imaging/pixelization/hst/comparison.json @@ -0,0 +1,120 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 13.724898559999565, + "vmap": { + "batch_size": 3, + "batch_time": 37.49440379000007, + "per_call": 12.49813459666669, + "speedup_vs_single_jit": 1.1 + }, + "full_pipeline_per_call": 13.724898559999565, + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 14.778166580000107, + "vmap": { + "batch_size": 3, + "batch_time": 39.16161323000051, + "per_call": 13.053871076666837, + "speedup_vs_single_jit": 1.1 + }, + "full_pipeline_per_call": 14.778166580000107, + "config_name": "local_cpu_mp" + }, + "local_cpu_fp64_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 5.789975740000227, + "vmap": { + "batch_size": 3, + "batch_time": 15.478287939999792, + "per_call": 5.159429313333264, + "speedup_vs_single_jit": 1.1 + }, + "full_pipeline_per_call": 5.789975740000227, + "config_name": "local_cpu_fp64_sparse" + }, + "local_cpu_mp_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 5.246675999999934, + "vmap": { + "batch_size": 3, + "batch_time": 19.256898960000036, + "per_call": 6.418966320000012, + "speedup_vs_single_jit": 0.8 + }, + "full_pipeline_per_call": 5.246675999999934, + "config_name": "local_cpu_mp_sparse" + } + } +} \ No newline at end of file diff --git a/results/runtime/imaging/pixelization/hst/comparison.png b/results/runtime/imaging/pixelization/hst/comparison.png new file mode 100644 index 0000000..d7cb690 Binary files /dev/null and b/results/runtime/imaging/pixelization/hst/comparison.png differ diff --git a/results/runtime/imaging/pixelization/hst/pixelization_local_cpu_fp64.json b/results/runtime/imaging/pixelization/hst/pixelization_local_cpu_fp64.json new file mode 100644 index 0000000..f4faf85 --- /dev/null +++ b/results/runtime/imaging/pixelization/hst/pixelization_local_cpu_fp64.json @@ -0,0 +1,27 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 13.724898559999565, + "vmap": { + "batch_size": 3, + "batch_time": 37.49440379000007, + "per_call": 12.49813459666669, + "speedup_vs_single_jit": 1.1 + } +} \ No newline at end of file diff --git a/results/runtime/imaging/pixelization/hst/pixelization_local_cpu_fp64_sparse.json b/results/runtime/imaging/pixelization/hst/pixelization_local_cpu_fp64_sparse.json new file mode 100644 index 0000000..c3abf05 --- /dev/null +++ b/results/runtime/imaging/pixelization/hst/pixelization_local_cpu_fp64_sparse.json @@ -0,0 +1,27 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 5.789975740000227, + "vmap": { + "batch_size": 3, + "batch_time": 15.478287939999792, + "per_call": 5.159429313333264, + "speedup_vs_single_jit": 1.1 + } +} \ No newline at end of file diff --git a/results/runtime/imaging/pixelization/hst/pixelization_local_cpu_mp.json b/results/runtime/imaging/pixelization/hst/pixelization_local_cpu_mp.json new file mode 100644 index 0000000..e5a3600 --- /dev/null +++ b/results/runtime/imaging/pixelization/hst/pixelization_local_cpu_mp.json @@ -0,0 +1,27 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 14.778166580000107, + "vmap": { + "batch_size": 3, + "batch_time": 39.16161323000051, + "per_call": 13.053871076666837, + "speedup_vs_single_jit": 1.1 + } +} \ No newline at end of file diff --git a/results/runtime/imaging/pixelization/hst/pixelization_local_cpu_mp_sparse.json b/results/runtime/imaging/pixelization/hst/pixelization_local_cpu_mp_sparse.json new file mode 100644 index 0000000..cf598e8 --- /dev/null +++ b/results/runtime/imaging/pixelization/hst/pixelization_local_cpu_mp_sparse.json @@ -0,0 +1,27 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "hst", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 15361, + "over_sampled_pixels": 17980, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 5.246675999999934, + "vmap": { + "batch_size": 3, + "batch_time": 19.256898960000036, + "per_call": 6.418966320000012, + "speedup_vs_single_jit": 0.8 + } +} \ No newline at end of file diff --git a/results/runtime/imaging/pixelization/jwst/comparison.json b/results/runtime/imaging/pixelization/jwst/comparison.json new file mode 100644 index 0000000..cc7adc2 --- /dev/null +++ b/results/runtime/imaging/pixelization/jwst/comparison.json @@ -0,0 +1,128 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 21.778462779999973, + "vmap": { + "batch_size": 3, + "batch_time": 84.96139948999989, + "per_call": 28.32046649666663, + "speedup_vs_single_jit": 0.8 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 21.778462779999973, + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 43.58491838000045, + "vmap": { + "batch_size": 3, + "batch_time": 88.16873673000009, + "per_call": 29.38957891000003, + "speedup_vs_single_jit": 1.5 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 43.58491838000045, + "config_name": "local_cpu_mp" + }, + "local_cpu_fp64_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 9.566611529999864, + "vmap": { + "batch_size": 3, + "batch_time": 29.07211525999992, + "per_call": 9.69070508666664, + "speedup_vs_single_jit": 1.0 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 9.566611529999864, + "config_name": "local_cpu_fp64_sparse" + }, + "local_cpu_mp_sparse": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 9.420377540000118, + "vmap": { + "batch_size": 3, + "batch_time": 28.422692229999665, + "per_call": 9.474230743333221, + "speedup_vs_single_jit": 1.0 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 9.420377540000118, + "config_name": "local_cpu_mp_sparse" + } + } +} \ No newline at end of file diff --git a/results/runtime/imaging/pixelization/jwst/comparison.png b/results/runtime/imaging/pixelization/jwst/comparison.png new file mode 100644 index 0000000..ddbc910 Binary files /dev/null and b/results/runtime/imaging/pixelization/jwst/comparison.png differ diff --git a/results/runtime/imaging/pixelization/jwst/pixelization_local_cpu_fp64.json b/results/runtime/imaging/pixelization/jwst/pixelization_local_cpu_fp64.json new file mode 100644 index 0000000..c1a7960 --- /dev/null +++ b/results/runtime/imaging/pixelization/jwst/pixelization_local_cpu_fp64.json @@ -0,0 +1,29 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 21.778462779999973, + "vmap": { + "batch_size": 3, + "batch_time": 84.96139948999989, + "per_call": 28.32046649666663, + "speedup_vs_single_jit": 0.8 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/imaging/pixelization/jwst/pixelization_local_cpu_fp64_sparse.json b/results/runtime/imaging/pixelization/jwst/pixelization_local_cpu_fp64_sparse.json new file mode 100644 index 0000000..394a957 --- /dev/null +++ b/results/runtime/imaging/pixelization/jwst/pixelization_local_cpu_fp64_sparse.json @@ -0,0 +1,29 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 9.566611529999864, + "vmap": { + "batch_size": 3, + "batch_time": 29.07211525999992, + "per_call": 9.69070508666664, + "speedup_vs_single_jit": 1.0 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/imaging/pixelization/jwst/pixelization_local_cpu_mp.json b/results/runtime/imaging/pixelization/jwst/pixelization_local_cpu_mp.json new file mode 100644 index 0000000..817768c --- /dev/null +++ b/results/runtime/imaging/pixelization/jwst/pixelization_local_cpu_mp.json @@ -0,0 +1,29 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "dense" + }, + "full_pipeline_single_jit": 43.58491838000045, + "vmap": { + "batch_size": 3, + "batch_time": 88.16873673000009, + "per_call": 29.38957891000003, + "speedup_vs_single_jit": 1.5 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/imaging/pixelization/jwst/pixelization_local_cpu_mp_sparse.json b/results/runtime/imaging/pixelization/jwst/pixelization_local_cpu_mp_sparse.json new file mode 100644 index 0000000..b00f888 --- /dev/null +++ b/results/runtime/imaging/pixelization/jwst/pixelization_local_cpu_mp_sparse.json @@ -0,0 +1,29 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "jwst", + "configuration": { + "pixel_scale_arcsec": 0.03, + "mask_radius_arcsec": 3.5, + "image_pixels_masked": 42737, + "over_sampled_pixels": 50312, + "mesh_shape": [ + 39, + 39 + ], + "source_pixels": 1521, + "inversion_path": "sparse" + }, + "full_pipeline_single_jit": 9.420377540000118, + "vmap": { + "batch_size": 3, + "batch_time": 28.422692229999665, + "per_call": 9.474230743333221, + "speedup_vs_single_jit": 1.0 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/interferometer/delaunay/alma/comparison.json b/results/runtime/interferometer/delaunay/alma/comparison.json new file mode 100644 index 0000000..204188b --- /dev/null +++ b/results/runtime/interferometer/delaunay/alma/comparison.json @@ -0,0 +1,48 @@ +{ + "configs": { + "local_cpu_fp64": { + "cpu_unusable": true, + "reason": "OOM-killed at 2858s (fp64 peak exceeds 15GB laptop RAM; mp variant fits) \u2014 GPU-only" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "alma", + "model": "delaunay", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 800, + 800 + ], + "visibilities": 1000000, + "hilbert_pixels": 1500, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "regularization_coefficient": 1.0 + }, + "log_likelihood_eager": -12046565.912254658, + "figure_of_merit_eager": -12050103.936275907, + "log_evidence_jit": -12050103.936275903, + "full_pipeline_single_jit": 6.505125349999981, + "vmap": { + "batch_size": 3, + "batch_time": 23.295176749999975, + "per_call": 7.765058916666658, + "speedup_vs_single_jit": 0.8 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 1304.2683868408203 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 6.505125349999981, + "config_name": "local_cpu_mp" + } + } +} \ No newline at end of file diff --git a/results/runtime/interferometer/delaunay/alma/comparison.png b/results/runtime/interferometer/delaunay/alma/comparison.png new file mode 100644 index 0000000..1cd3bcb Binary files /dev/null and b/results/runtime/interferometer/delaunay/alma/comparison.png differ diff --git a/results/runtime/interferometer/delaunay/alma/delaunay_local_cpu_fp64.unusable.json b/results/runtime/interferometer/delaunay/alma/delaunay_local_cpu_fp64.unusable.json new file mode 100644 index 0000000..21ed485 --- /dev/null +++ b/results/runtime/interferometer/delaunay/alma/delaunay_local_cpu_fp64.unusable.json @@ -0,0 +1,5 @@ +{ + "cpu_unusable": true, + "reason": "OOM-killed at 2858s (fp64 peak exceeds 15GB laptop RAM; mp variant fits) \u2014 GPU-only", + "config_name": "local_cpu_fp64" +} \ No newline at end of file diff --git a/results/runtime/interferometer/delaunay/alma/delaunay_local_cpu_mp.json b/results/runtime/interferometer/delaunay/alma/delaunay_local_cpu_mp.json new file mode 100644 index 0000000..f224518 --- /dev/null +++ b/results/runtime/interferometer/delaunay/alma/delaunay_local_cpu_mp.json @@ -0,0 +1,38 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "alma", + "model": "delaunay", + "configuration": { + "pixel_scale_arcsec": 0.05, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 800, + 800 + ], + "visibilities": 1000000, + "hilbert_pixels": 1500, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "regularization_coefficient": 1.0 + }, + "log_likelihood_eager": -12046565.912254658, + "figure_of_merit_eager": -12050103.936275907, + "log_evidence_jit": -12050103.936275903, + "full_pipeline_single_jit": 6.505125349999981, + "vmap": { + "batch_size": 3, + "batch_time": 23.295176749999975, + "per_call": 7.765058916666658, + "speedup_vs_single_jit": 0.8 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 1304.2683868408203 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/interferometer/delaunay/alma_high/delaunay_local_cpu_fp64.unusable.json b/results/runtime/interferometer/delaunay/alma_high/delaunay_local_cpu_fp64.unusable.json new file mode 100644 index 0000000..888a074 --- /dev/null +++ b/results/runtime/interferometer/delaunay/alma_high/delaunay_local_cpu_fp64.unusable.json @@ -0,0 +1,5 @@ +{ + "cpu_unusable": true, + "reason": "killed at ~1h wall-clock under campaign policy \u2014 GPU-only", + "config_name": "local_cpu_fp64" +} \ No newline at end of file diff --git a/results/runtime/interferometer/delaunay/alma_high/delaunay_local_cpu_mp.unusable.json b/results/runtime/interferometer/delaunay/alma_high/delaunay_local_cpu_mp.unusable.json new file mode 100644 index 0000000..dc470d9 --- /dev/null +++ b/results/runtime/interferometer/delaunay/alma_high/delaunay_local_cpu_mp.unusable.json @@ -0,0 +1,5 @@ +{ + "cpu_unusable": true, + "reason": "killed under campaign policy (fp64 sibling already >1h) \u2014 GPU-only", + "config_name": "local_cpu_mp" +} \ No newline at end of file diff --git a/results/runtime/interferometer/delaunay/sma/comparison.json b/results/runtime/interferometer/delaunay/sma/comparison.json new file mode 100644 index 0000000..202744d --- /dev/null +++ b/results/runtime/interferometer/delaunay/sma/comparison.json @@ -0,0 +1,84 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "delaunay", + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities": 190, + "hilbert_pixels": 1500, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "regularization_coefficient": 1.0 + }, + "log_likelihood_eager": -3151.1884830573845, + "figure_of_merit_eager": -3169.418003499652, + "log_evidence_jit": -3169.418003498359, + "full_pipeline_single_jit": 2.576843710000003, + "vmap": { + "batch_size": 3, + "batch_time": 7.0804431199999955, + "per_call": 2.360147706666665, + "speedup_vs_single_jit": 1.1 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 481.2399444580078 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 2.576843710000003, + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "delaunay", + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities": 190, + "hilbert_pixels": 1500, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "regularization_coefficient": 1.0 + }, + "log_likelihood_eager": -3151.1884830535732, + "figure_of_merit_eager": -3169.4180034955634, + "log_evidence_jit": -3169.418003494271, + "full_pipeline_single_jit": 3.342003539999996, + "vmap": { + "batch_size": 3, + "batch_time": 7.811871840000004, + "per_call": 2.6039572800000013, + "speedup_vs_single_jit": 1.3 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 415.7746124267578 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 3.342003539999996, + "config_name": "local_cpu_mp" + } + } +} \ No newline at end of file diff --git a/results/runtime/interferometer/delaunay/sma/comparison.png b/results/runtime/interferometer/delaunay/sma/comparison.png new file mode 100644 index 0000000..d18a853 Binary files /dev/null and b/results/runtime/interferometer/delaunay/sma/comparison.png differ diff --git a/results/runtime/interferometer/delaunay/sma/delaunay_local_cpu_fp64.json b/results/runtime/interferometer/delaunay/sma/delaunay_local_cpu_fp64.json new file mode 100644 index 0000000..189a6ff --- /dev/null +++ b/results/runtime/interferometer/delaunay/sma/delaunay_local_cpu_fp64.json @@ -0,0 +1,38 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "delaunay", + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities": 190, + "hilbert_pixels": 1500, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "regularization_coefficient": 1.0 + }, + "log_likelihood_eager": -3151.1884830573845, + "figure_of_merit_eager": -3169.418003499652, + "log_evidence_jit": -3169.418003498359, + "full_pipeline_single_jit": 2.576843710000003, + "vmap": { + "batch_size": 3, + "batch_time": 7.0804431199999955, + "per_call": 2.360147706666665, + "speedup_vs_single_jit": 1.1 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 481.2399444580078 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/interferometer/delaunay/sma/delaunay_local_cpu_mp.json b/results/runtime/interferometer/delaunay/sma/delaunay_local_cpu_mp.json new file mode 100644 index 0000000..c757bfe --- /dev/null +++ b/results/runtime/interferometer/delaunay/sma/delaunay_local_cpu_mp.json @@ -0,0 +1,38 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "delaunay", + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities": 190, + "hilbert_pixels": 1500, + "delaunay_vertices": 1500, + "edge_zeroed_pixels": 0, + "regularization_coefficient": 1.0 + }, + "log_likelihood_eager": -3151.1884830535732, + "figure_of_merit_eager": -3169.4180034955634, + "log_evidence_jit": -3169.418003494271, + "full_pipeline_single_jit": 3.342003539999996, + "vmap": { + "batch_size": 3, + "batch_time": 7.811871840000004, + "per_call": 2.6039572800000013, + "speedup_vs_single_jit": 1.3 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 415.7746124267578 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/interferometer/mge/sma/comparison.json b/results/runtime/interferometer/mge/sma/comparison.json new file mode 100644 index 0000000..fd16050 --- /dev/null +++ b/results/runtime/interferometer/mge/sma/comparison.json @@ -0,0 +1,80 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "mge", + "transformer": "TransformerNUFFT", + "use_mixed_precision": false, + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities": 190, + "linear_gaussians": 20 + }, + "log_likelihood_eager": -3153.942384509246, + "log_likelihood_jit": -3153.9482303797345, + "full_pipeline_single_jit": 0.23072274000005563, + "vmap": { + "batch_size": 3, + "batch_time": 0.7112842499998806, + "per_call": 0.2370947499999602, + "speedup_vs_single_jit": 1.0 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 480.0889358520508 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 0.23072274000005563, + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "mge", + "transformer": "TransformerNUFFT", + "use_mixed_precision": true, + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities": 190, + "linear_gaussians": 20 + }, + "log_likelihood_eager": -3153.942384509246, + "log_likelihood_jit": -3153.948230485718, + "full_pipeline_single_jit": 0.23150078000035137, + "vmap": { + "batch_size": 3, + "batch_time": 0.7638046000000032, + "per_call": 0.2546015333333344, + "speedup_vs_single_jit": 0.9 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 480.0889358520508 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 0.23150078000035137, + "config_name": "local_cpu_mp" + } + } +} \ No newline at end of file diff --git a/results/runtime/interferometer/mge/sma/comparison.png b/results/runtime/interferometer/mge/sma/comparison.png new file mode 100644 index 0000000..8898c36 Binary files /dev/null and b/results/runtime/interferometer/mge/sma/comparison.png differ diff --git a/results/runtime/interferometer/mge/sma/mge_local_cpu_fp64.json b/results/runtime/interferometer/mge/sma/mge_local_cpu_fp64.json new file mode 100644 index 0000000..4408cc0 --- /dev/null +++ b/results/runtime/interferometer/mge/sma/mge_local_cpu_fp64.json @@ -0,0 +1,36 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "mge", + "transformer": "TransformerNUFFT", + "use_mixed_precision": false, + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities": 190, + "linear_gaussians": 20 + }, + "log_likelihood_eager": -3153.942384509246, + "log_likelihood_jit": -3153.9482303797345, + "full_pipeline_single_jit": 0.23072274000005563, + "vmap": { + "batch_size": 3, + "batch_time": 0.7112842499998806, + "per_call": 0.2370947499999602, + "speedup_vs_single_jit": 1.0 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 480.0889358520508 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/interferometer/mge/sma/mge_local_cpu_fp64.png b/results/runtime/interferometer/mge/sma/mge_local_cpu_fp64.png new file mode 100644 index 0000000..9b2cacb Binary files /dev/null and b/results/runtime/interferometer/mge/sma/mge_local_cpu_fp64.png differ diff --git a/results/runtime/interferometer/mge/sma/mge_local_cpu_mp.json b/results/runtime/interferometer/mge/sma/mge_local_cpu_mp.json new file mode 100644 index 0000000..382cf7d --- /dev/null +++ b/results/runtime/interferometer/mge/sma/mge_local_cpu_mp.json @@ -0,0 +1,36 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "mge", + "transformer": "TransformerNUFFT", + "use_mixed_precision": true, + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities": 190, + "linear_gaussians": 20 + }, + "log_likelihood_eager": -3153.942384509246, + "log_likelihood_jit": -3153.948230485718, + "full_pipeline_single_jit": 0.23150078000035137, + "vmap": { + "batch_size": 3, + "batch_time": 0.7638046000000032, + "per_call": 0.2546015333333344, + "speedup_vs_single_jit": 0.9 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 480.0889358520508 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/interferometer/mge/sma/mge_local_cpu_mp.png b/results/runtime/interferometer/mge/sma/mge_local_cpu_mp.png new file mode 100644 index 0000000..6332497 Binary files /dev/null and b/results/runtime/interferometer/mge/sma/mge_local_cpu_mp.png differ diff --git a/results/runtime/interferometer/pixelization/sma/comparison.json b/results/runtime/interferometer/pixelization/sma/comparison.json new file mode 100644 index 0000000..92187c9 --- /dev/null +++ b/results/runtime/interferometer/pixelization/sma/comparison.json @@ -0,0 +1,88 @@ +{ + "configs": { + "local_cpu_fp64": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "pixelization", + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities": 190, + "mesh_shape": [ + 32, + 32 + ], + "source_pixels": 1024, + "regularization_coefficient": 1.0 + }, + "log_likelihood_eager": -3153.2752843563044, + "figure_of_merit_eager": -3167.8953311746577, + "log_evidence_jit": -3167.895467117936, + "full_pipeline_single_jit": 2.0423672299999454, + "vmap": { + "batch_size": 3, + "batch_time": 6.077660099999775, + "per_call": 2.025886699999925, + "speedup_vs_single_jit": 1.0 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 365.5854034423828 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 2.0423672299999454, + "config_name": "local_cpu_fp64" + }, + "local_cpu_mp": { + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "pixelization", + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities": 190, + "mesh_shape": [ + 32, + 32 + ], + "source_pixels": 1024, + "regularization_coefficient": 1.0 + }, + "log_likelihood_eager": -3153.275284357005, + "figure_of_merit_eager": -3167.895331174689, + "log_evidence_jit": -3167.8954671179868, + "full_pipeline_single_jit": 2.38713332000043, + "vmap": { + "batch_size": 3, + "batch_time": 7.42951957999976, + "per_call": 2.476506526666587, + "speedup_vs_single_jit": 1.0 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 320.4007110595703 + }, + "pinned_expected": null, + "pinned_drift": [], + "full_pipeline_per_call": 2.38713332000043, + "config_name": "local_cpu_mp" + } + } +} \ No newline at end of file diff --git a/results/runtime/interferometer/pixelization/sma/comparison.png b/results/runtime/interferometer/pixelization/sma/comparison.png new file mode 100644 index 0000000..72175f0 Binary files /dev/null and b/results/runtime/interferometer/pixelization/sma/comparison.png differ diff --git a/results/runtime/interferometer/pixelization/sma/pixelization_local_cpu_fp64.json b/results/runtime/interferometer/pixelization/sma/pixelization_local_cpu_fp64.json new file mode 100644 index 0000000..7db4ac2 --- /dev/null +++ b/results/runtime/interferometer/pixelization/sma/pixelization_local_cpu_fp64.json @@ -0,0 +1,40 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "pixelization", + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities": 190, + "mesh_shape": [ + 32, + 32 + ], + "source_pixels": 1024, + "regularization_coefficient": 1.0 + }, + "log_likelihood_eager": -3153.2752843563044, + "figure_of_merit_eager": -3167.8953311746577, + "log_evidence_jit": -3167.895467117936, + "full_pipeline_single_jit": 2.0423672299999454, + "vmap": { + "batch_size": 3, + "batch_time": 6.077660099999775, + "per_call": 2.025886699999925, + "speedup_vs_single_jit": 1.0 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 365.5854034423828 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/interferometer/pixelization/sma/pixelization_local_cpu_fp64.png b/results/runtime/interferometer/pixelization/sma/pixelization_local_cpu_fp64.png new file mode 100644 index 0000000..aa19554 Binary files /dev/null and b/results/runtime/interferometer/pixelization/sma/pixelization_local_cpu_fp64.png differ diff --git a/results/runtime/interferometer/pixelization/sma/pixelization_local_cpu_mp.json b/results/runtime/interferometer/pixelization/sma/pixelization_local_cpu_mp.json new file mode 100644 index 0000000..3825326 --- /dev/null +++ b/results/runtime/interferometer/pixelization/sma/pixelization_local_cpu_mp.json @@ -0,0 +1,40 @@ +{ + "autolens_version": "2026.7.6.649", + "device": { + "backend": "cpu", + "device": "TFRT_CPU_0" + }, + "instrument": "sma", + "model": "pixelization", + "configuration": { + "pixel_scale_arcsec": 0.1, + "mask_radius_arcsec": 3.5, + "real_space_shape": [ + 256, + 256 + ], + "visibilities": 190, + "mesh_shape": [ + 32, + 32 + ], + "source_pixels": 1024, + "regularization_coefficient": 1.0 + }, + "log_likelihood_eager": -3153.275284357005, + "figure_of_merit_eager": -3167.895331174689, + "log_evidence_jit": -3167.8954671179868, + "full_pipeline_single_jit": 2.38713332000043, + "vmap": { + "batch_size": 3, + "batch_time": 7.42951957999976, + "per_call": 2.476506526666587, + "speedup_vs_single_jit": 1.0 + }, + "memory_mb": { + "output": 2.288818359375e-05, + "temp": 320.4007110595703 + }, + "pinned_expected": null, + "pinned_drift": [] +} \ No newline at end of file diff --git a/results/runtime/interferometer/pixelization/sma/pixelization_local_cpu_mp.png b/results/runtime/interferometer/pixelization/sma/pixelization_local_cpu_mp.png new file mode 100644 index 0000000..8861e87 Binary files /dev/null and b/results/runtime/interferometer/pixelization/sma/pixelization_local_cpu_mp.png differ diff --git a/results/simulators/imaging_ao_summary_v2026.7.6.649.json b/results/simulators/imaging_ao_summary_v2026.7.6.649.json new file mode 100644 index 0000000..bb0062e --- /dev/null +++ b/results/simulators/imaging_ao_summary_v2026.7.6.649.json @@ -0,0 +1,45 @@ +{ + "autolens_version": "2026.7.6.649", + "type": "imaging", + "instrument": "ao", + "configuration": { + "grid_shape": [ + 701, + 701 + ], + "pixel_scales": 0.01, + "mask_radius": 3.5, + "psf_shape": [ + 21, + 21 + ], + "psf_sigma": 0.01, + "over_sampling_sub_sizes": [ + 32, + 8, + 2 + ] + }, + "phases": { + "setup_grids": 0.2753840000004857, + "setup_psf_simulator": 0.0012709000002359971, + "setup_galaxies": 0.0002521999995224178, + "setup_tracer": 3.100000321865082e-05, + "image_2d_eager": 62.49025940000138, + "image_2d_jit_lower": 1.4338545999999042, + "image_2d_jit_compile": 16.539460499996494, + "image_2d_jit_first_call": 2.0223445999945397, + "image_2d_jit_steady_x10": 20.191612900001928, + "via_tracer_from": 61.91107889999694, + "solver_build": 0.006048099996405654, + "solver_solve_eager": 12.301066899999569, + "output_fits": 0.0817901000045822, + "output_lensed_source": 8.796761200006586, + "output_json": 0.005589100001088809 + }, + "key_timings": { + "image_2d_eager_s": 62.49025940000138, + "via_tracer_from_s": 61.91107889999694, + "solver_solve_eager_s": 12.301066899999569 + } +} \ No newline at end of file diff --git a/results/simulators/imaging_ao_summary_v2026.7.6.649.png b/results/simulators/imaging_ao_summary_v2026.7.6.649.png new file mode 100644 index 0000000..c0517cd Binary files /dev/null and b/results/simulators/imaging_ao_summary_v2026.7.6.649.png differ diff --git a/results/simulators/imaging_jwst_summary_v2026.7.6.649.json b/results/simulators/imaging_jwst_summary_v2026.7.6.649.json new file mode 100644 index 0000000..067a67a --- /dev/null +++ b/results/simulators/imaging_jwst_summary_v2026.7.6.649.json @@ -0,0 +1,45 @@ +{ + "autolens_version": "2026.7.6.649", + "type": "imaging", + "instrument": "jwst", + "configuration": { + "grid_shape": [ + 235, + 235 + ], + "pixel_scales": 0.03, + "mask_radius": 3.5, + "psf_shape": [ + 21, + 21 + ], + "psf_sigma": 0.03, + "over_sampling_sub_sizes": [ + 32, + 8, + 2 + ] + }, + "phases": { + "setup_grids": 0.11200409999582916, + "setup_psf_simulator": 0.0006447999985539354, + "setup_galaxies": 9.809999755816534e-05, + "setup_tracer": 1.4299999747890979e-05, + "image_2d_eager": 6.223893200003658, + "image_2d_jit_lower": 0.7545232999982545, + "image_2d_jit_compile": 2.5191766999996617, + "image_2d_jit_first_call": 0.33892979999654926, + "image_2d_jit_steady_x10": 2.5647156000050018, + "via_tracer_from": 6.176150300001609, + "solver_build": 0.0008001000023796223, + "solver_solve_eager": 1.0550566999954754, + "output_fits": 0.020675200001278426, + "output_lensed_source": 0.5573436000049696, + "output_json": 0.0030834999997750856 + }, + "key_timings": { + "image_2d_eager_s": 6.223893200003658, + "via_tracer_from_s": 6.176150300001609, + "solver_solve_eager_s": 1.0550566999954754 + } +} \ No newline at end of file diff --git a/results/simulators/imaging_jwst_summary_v2026.7.6.649.png b/results/simulators/imaging_jwst_summary_v2026.7.6.649.png new file mode 100644 index 0000000..e270c0a Binary files /dev/null and b/results/simulators/imaging_jwst_summary_v2026.7.6.649.png differ diff --git a/results/simulators/interferometer_alma_high_summary_v2026.7.6.649.json b/results/simulators/interferometer_alma_high_summary_v2026.7.6.649.json new file mode 100644 index 0000000..0b68fea --- /dev/null +++ b/results/simulators/interferometer_alma_high_summary_v2026.7.6.649.json @@ -0,0 +1,41 @@ +{ + "autolens_version": "2026.7.6.649", + "type": "interferometer", + "instrument": "alma_high", + "configuration": { + "grid_shape": [ + 800, + 800 + ], + "pixel_scales": 0.025, + "n_visibilities": 5000000, + "uv_scale": 2000000.0, + "noise_sigma": 100.0, + "transformer": "TransformerNUFFT", + "transformer_chunk_size": 1000000 + }, + "phases": { + "setup_grids": 0.12891279999894323, + "setup_uv_wavelengths": 0.4883449000044493, + "setup_simulator": 1.9299994164612144e-05, + "setup_galaxies": 0.00044329999946057796, + "setup_tracer": 3.2000003557186574e-05, + "image_2d_eager": 88.66936540000461, + "image_2d_jit_lower": 1.1893571999971755, + "image_2d_jit_compile": 32.57830570000078, + "image_2d_jit_first_call": 6.4868530000021565, + "image_2d_jit_steady_x10": 47.021346500005166, + "via_tracer_from": 169.93597579999914, + "solver_build": 0.27381559999776073, + "solver_solve_eager": 29.55701460000273, + "output_fits": 1.0853420000057667, + "output_lensed_source": 20.000675000002957, + "output_positions": 0.0035103999980492517, + "output_tracer": 0.03584409999893978 + }, + "key_timings": { + "image_2d_eager_s": 88.66936540000461, + "via_tracer_from_s": 169.93597579999914, + "solver_solve_eager_s": 29.55701460000273 + } +} \ No newline at end of file diff --git a/results/simulators/interferometer_alma_high_summary_v2026.7.6.649.png b/results/simulators/interferometer_alma_high_summary_v2026.7.6.649.png new file mode 100644 index 0000000..9d83624 Binary files /dev/null and b/results/simulators/interferometer_alma_high_summary_v2026.7.6.649.png differ diff --git a/results/simulators/interferometer_alma_summary_v2026.7.6.649.json b/results/simulators/interferometer_alma_summary_v2026.7.6.649.json new file mode 100644 index 0000000..accad71 --- /dev/null +++ b/results/simulators/interferometer_alma_summary_v2026.7.6.649.json @@ -0,0 +1,41 @@ +{ + "autolens_version": "2026.7.6.649", + "type": "interferometer", + "instrument": "alma", + "configuration": { + "grid_shape": [ + 800, + 800 + ], + "pixel_scales": 0.05, + "n_visibilities": 1000000, + "uv_scale": 2000000.0, + "noise_sigma": 100.0, + "transformer": "TransformerNUFFT", + "transformer_chunk_size": null + }, + "phases": { + "setup_grids": 0.0941813999961596, + "setup_uv_wavelengths": 0.07421610000164947, + "setup_simulator": 3.149999974993989e-05, + "setup_galaxies": 0.00021700000070268288, + "setup_tracer": 2.300000051036477e-05, + "image_2d_eager": 99.2211671000041, + "image_2d_jit_lower": 1.2009298999983002, + "image_2d_jit_compile": 37.90650409999944, + "image_2d_jit_first_call": 5.147858000003907, + "image_2d_jit_steady_x10": 52.46752379999816, + "via_tracer_from": 84.69304120000015, + "solver_build": 0.8880873999951291, + "solver_solve_eager": 38.33109759999934, + "output_fits": 0.2440102000036859, + "output_lensed_source": 19.367068599996855, + "output_positions": 0.0023705999992671423, + "output_tracer": 0.015578599995933473 + }, + "key_timings": { + "image_2d_eager_s": 99.2211671000041, + "via_tracer_from_s": 84.69304120000015, + "solver_solve_eager_s": 38.33109759999934 + } +} \ No newline at end of file diff --git a/results/simulators/interferometer_alma_summary_v2026.7.6.649.png b/results/simulators/interferometer_alma_summary_v2026.7.6.649.png new file mode 100644 index 0000000..de7f639 Binary files /dev/null and b/results/simulators/interferometer_alma_summary_v2026.7.6.649.png differ diff --git a/scripts/build_baseline.py b/scripts/build_baseline.py new file mode 100644 index 0000000..7a2d4e5 --- /dev/null +++ b/scripts/build_baseline.py @@ -0,0 +1,104 @@ +""" +build_baseline.py — snapshot campaign results into a named, frozen baseline. + +A **baseline** (convention: `results/notes/design_lock_in.md`) is a named +snapshot of campaign results under `results/baselines//`: + +- the `comparison.json` per swept cell, mirroring the `results/runtime/` + layout, plus +- a rendered `.md` — every headline number on one browsable page. + +The dashboard (`build_readme.py`) grows a baseline column automatically once +the directory exists. Baselines are **append-only after the campaign +closes**; while a campaign is accumulating, re-running this script refreshes +the snapshot from the current `results/runtime/` tree. + +Run from the repo root: + + python scripts/build_baseline.py --name PreOptimizationTimes +""" + +from __future__ import annotations + +import argparse +import shutil +import sys +from pathlib import Path + +REPO_ROOT = Path(__file__).resolve().parent.parent +sys.path.insert(0, str(REPO_ROOT / "scripts")) + +from build_readme import ( # noqa: E402 + BASELINES_ROOT, + RUNTIME_ROOT, + _config_headline_seconds, + _config_vmap_seconds, + _format_time, + _ordered_config_names, + _scan_runtime_cells, +) + + +def snapshot(name: str) -> Path: + """Copy every runtime comparison.json into the named baseline tree.""" + dest_root = BASELINES_ROOT / name + cells = _scan_runtime_cells(RUNTIME_ROOT) + if not cells: + sys.stderr.write(f"no comparison.json found under {RUNTIME_ROOT}\n") + raise SystemExit(1) + for cell in cells: + dest = dest_root.joinpath(*cell.cell) / "comparison.json" + dest.parent.mkdir(parents=True, exist_ok=True) + shutil.copy2(cell.path, dest) + return dest_root + + +def render_md(name: str, dest_root: Path) -> Path: + """One-page markdown: every cell × config headline in the baseline.""" + cells = _scan_runtime_cells(dest_root) + config_names = _ordered_config_names(cells) + + lines = [ + f"# {name}", + "", + f"Named baseline snapshot ({len(cells)} cells; convention: " + "[`design_lock_in.md`](../../notes/design_lock_in.md)). " + "Full-pipeline per-call cost per cell × config; `(vmap …)` is the " + "vmap per-call where measured.", + "", + "| Cell | " + " | ".join(config_names) + " |", + "|" + "|".join(["---"] * (len(config_names) + 1)) + "|", + ] + for cell in cells: + cfgs = cell.configs + row = [f"`{cell.cell_id}`"] + for cname in config_names: + cfg = cfgs.get(cname, {}) + headline = _format_time(_config_headline_seconds(cfg)) + vmap = _config_vmap_seconds(cfg) + if vmap is not None: + headline += f" (vmap {_format_time(vmap)})" + row.append(headline) + lines.append("| " + " | ".join(row) + " |") + + md_path = dest_root / f"{name}.md" + md_path.write_text("\n".join(lines) + "\n") + return md_path + + +def main(argv: list[str] | None = None) -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--name", required=True, help="Baseline name, e.g. PreOptimizationTimes.") + args = parser.parse_args(argv) + + dest_root = snapshot(args.name) + md_path = render_md(args.name, dest_root) + n = len(_scan_runtime_cells(dest_root)) + print(f"baseline '{args.name}': {n} cell(s) snapshotted -> {dest_root}") + print(f"rendered {md_path}") + print("run `python scripts/build_readme.py` to refresh the dashboard's baseline column.") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/build_readme.py b/scripts/build_readme.py index d393c1c..3c816e4 100644 --- a/scripts/build_readme.py +++ b/scripts/build_readme.py @@ -274,7 +274,20 @@ def _headline_any_config(cell: RuntimeCell) -> float | None: cfgs = cell.configs line = [f"`{cell.cell_id}`"] for cname in config_names: - line.append(_format_time(_config_headline_seconds(cfgs.get(cname, {})))) + cfg = cfgs.get(cname, {}) + if cfg.get("cpu_unusable"): + # Campaign policy (#56): a run that cannot finish inside the + # wall-clock cap has no CPU-viable configuration — the + # classification IS the result. + line.append("**GPU-only**") + continue + seconds = _config_headline_seconds(cfg) + cell_text = _format_time(seconds) + if seconds is not None and seconds > 60 and not cname.startswith("hpc"): + # Per-call > 1 min on a local backend: samplers need 1e4-1e6 + # evaluations, so the config is unusable in practice. + cell_text += " (unusable)" + line.append(cell_text) for bname in baseline_names: bcell = baseline_by_cell[bname].get(cell.cell) line.append(_format_time(_headline_any_config(bcell)) if bcell else "—") diff --git a/simulators/README.md b/simulators/README.md index 108c4ae..532d22e 100644 --- a/simulators/README.md +++ b/simulators/README.md @@ -45,7 +45,12 @@ Auto-generated by `scripts/build_readme.py` from the latest `*_summary_v | Script | Total wall time | PyAutoLens version | |--------|-----------------|--------------------| +| `cluster.py` | 234.99 s | v2026.7.6.649 | +| `imaging_ao.py` | 186.06 s | v2026.7.6.649 | | `imaging_euclid.py` | 2.28 s | v2026.7.6.649 | +| `imaging_jwst.py` | 20.33 s | v2026.7.6.649 | +| `interferometer_alma.py` | 339.65 s | v2026.7.6.649 | +| `interferometer_alma_high.py` | 397.46 s | v2026.7.6.649 | ## Running a script diff --git a/test/test_vram_config.py b/test/test_vram_config.py index b7d1a1f..204cc2c 100644 --- a/test/test_vram_config.py +++ b/test/test_vram_config.py @@ -189,3 +189,22 @@ def test_legacy_probe_without_backend_accepted(tmp_path): ) assert batch == 24 assert source.startswith("probe") + + +# --------------------------------------------------------------------------- +# aggregate config-stem matching (cell-prefixed filenames, #56 regression) +# --------------------------------------------------------------------------- + + +def test_aggregate_matches_cell_prefixed_stems(): + import sys as _sys + from pathlib import Path as _Path + + _sys.path.insert(0, str(_Path(__file__).resolve().parents[1] / "likelihood_runtime")) + from aggregate import _config_name_from_stem + + assert _config_name_from_stem("mge_local_cpu_fp64") == "local_cpu_fp64" + assert _config_name_from_stem("pixelization_local_cpu_fp64_sparse") == "local_cpu_fp64_sparse" + assert _config_name_from_stem("local_gpu_mp") == "local_gpu_mp" # pre-#44 shape + assert _config_name_from_stem("mge_likelihood_summary_hst_v2026.5.29.4") is None + assert _config_name_from_stem("comparison") is None