Preserve the protected full-catalog dummy run, its initial harness failure, input and output hashes, distribution quantiles, and the resulting sparse-tile scheduling conclusions.
85 lines
4.1 KiB
Markdown
85 lines
4.1 KiB
Markdown
# Production chunk geometry diagnostic (2026-09-11)
|
|
|
|
## Scope
|
|
|
|
This run measures the event stream that the production HIP sink would receive
|
|
for the supplied Schwarzschild Galactic-center render. `PSF_BACKEND=dummy`
|
|
keeps the real imported lens map, all-sky prefetch, OpenMP dynamic triangle
|
|
scheduling, inverse mapping, redshift/color/flux work, PSF cache eligibility,
|
|
and 16,384-event per-worker chunk boundaries. It does not initialize HIP,
|
|
allocate a full HDR framebuffer, splat pixels, or write PNG/FITS output.
|
|
|
|
The run used repository revision `11e703e33dffb1ff168ba11dd922e68b448116b9`
|
|
plus the uncommitted dummy-backend work. The complete stdout/stderr, executable
|
|
and input hashes, process resource use, and protected-output hashes are in
|
|
[`full_catalog.log`](full_catalog.log). An initial harness-only failure before
|
|
the renderer started is retained as
|
|
[`full_catalog_missing_time.log`](full_catalog_missing_time.log).
|
|
|
|
## Build and run
|
|
|
|
```sh
|
|
make -j1 PSF_BACKEND=dummy SPACETIME=schwarzschild ENABLE_HDR=1 backend
|
|
python3 benchmarks/dummy_psf_chunks_2026-09-11/run.py
|
|
```
|
|
|
|
The runner fixes `OMP_NUM_THREADS=16` and `OMP_DYNAMIC=FALSE`, uses a 600-second
|
|
timeout and a process lock, refuses to overwrite its log, and hashes both the
|
|
named PNG and companion FITS before and after the run. Its renderer arguments
|
|
are exactly the user-supplied command except that the `_hip` executable is
|
|
replaced by `_dummy`; the exact expanded command is the first line of the log.
|
|
|
|
Inputs and protected outputs:
|
|
|
|
- lens map SHA-256:
|
|
`905f960aea2d276f9586c79fba545a72cf742311e9e7e18faea293835c68bf28`
|
|
- existing PNG SHA-256 before/after:
|
|
`3e01feb911e60acce545a6a86870ca05f96250022e874eb8097bec88a8879bfd`
|
|
- existing FITS SHA-256 before/after:
|
|
`2408e62dcc22f147da284d87af9a2b0fdd0050eda2dabc23b6ec2554b2f1d38e`
|
|
|
|
Both protected files retained the same size and nanosecond mtime as well as the
|
|
same hash. No HIP backend was run.
|
|
|
|
## Result
|
|
|
|
The catalog prefetch loaded 343,363,141 stars for 130,882 lens triangles. The
|
|
producer classified 598,264,924 cache events, with zero direct fallbacks,
|
|
wing-clipped events, or min-Y discards. Sixteen workers produced 36,524 chunks:
|
|
36,508 full chunks and one final partial chunk per worker.
|
|
|
|
| full-chunk metric | min | p10 | p25 | p50 | p75 | p90 | p99 | max |
|
|
|---|---:|---:|---:|---:|---:|---:|---:|---:|
|
|
| event-producing triangles | 1 | 1 | 1 | 2 | 3 | 10 | 31 | 59 |
|
|
| occupied 32px center tiles | 1 | 1 | 1 | 1 | 2 | 5 | 30 | 45 |
|
|
| event bbox diagonal (px) | 0.199 | 0.742 | 3.250 | 12.651 | 57.018 | 429.306 | 3759.261 | 3834.557 |
|
|
| triangle-centroid bbox diagonal (px) | 0 | 0 | 0 | 9.618 | 49.477 | 424.149 | 3744.061 | 3824.075 |
|
|
| maximum successive centroid jump (px) | 0 | 0 | 0 | 8.724 | 25.157 | 144.000 | 3744.034 | 3792.034 |
|
|
|
|
All 36,508 full chunks satisfy the replay prototype's current selector:
|
|
`events >= 8192 && events / occupied_32px_tiles >= 32`.
|
|
|
|
Catalog prefetch took 55.469 s. Producer classification and chunk accounting
|
|
took 232.340 s; total process wall time was 288.872 s. These are diagnostic CPU
|
|
costs and do not estimate HIP tile-kernel speed.
|
|
|
|
## Interpretation and limits
|
|
|
|
The measured production event order strongly supports the hypothesis that a
|
|
full worker chunk is usually filled by very few image-plane triangles: the
|
|
median is two and 75% contain at most three. Center-tile occupancy is even more
|
|
concentrated. This is favorable for a tile16 path because the same output pixels
|
|
receive many contributions that can be reduced before the final double HDR
|
|
write.
|
|
|
|
The rare tail matters: p99 chunks can contain a few clusters separated by
|
|
nearly the full 4K image width. “Few triangles” therefore does not imply one
|
|
small contiguous bounding rectangle. A production implementation should use a
|
|
sparse occupied-tile list, retain the atomic fallback, and measure the complete
|
|
streaming sink including binning and synchronization.
|
|
|
|
This is one Schwarzschild Galactic-center frame with one 16-worker dynamic
|
|
schedule. Worker-to-triangle assignment is nondeterministic, so exact quantiles
|
|
may vary between runs. The result establishes event geometry for this input; it
|
|
does not by itself establish single-BH/BBH universality or a HIP speedup.
|