Files
GR-raytracing/benchmarks/2mass_all_sky_psf_event_sink_2026-09-05.md
T

5.3 KiB
Raw Blame History

2MASS 全天 1080p CPU PSF event-sink 变更前后记录(2026-09-05)

目的

记录引入 CPU PsfEventSink 前后的完整渲染耗时。cache-eligible 星像在改动后由每个 OpenMP render worker 的固定大小块暂存、批量消费;cache/direct/min-Y 判定、HDR 值和 输出语义不改变。本记录不是 GPU 基准;它以完全没有 event 路径的上一版本为基线,衡量 event-sink 实现进入生产路径的端到端增量。

控制条件

  • Host: i7-12700K,16 个 online logical CPUs;未显式设置 OMP_NUM_THREADS。
  • Build: Release, C11, -march=native -O2 -pipe, OpenMP, PNG;Minkowski。
  • Input: assets/2mass/processed/all_sky;9,328 tiles / 18,148,775 stars。
  • Camera: RA 0 deg, Dec -90 deg; 1920 x 1080 px; horizontal FOV 60 deg; coarse cell 16 px; exposure 1e12。
  • PSF: default FWHM 2.7 px, beta 4.5, relative tail 1e-8, min-Y disabled, cache/direct threshold 1. 两次均无 direct fallback。
  • 两次均产生 16,554,566 个星像;catalog prefetch 统计一致。

两次运行的完整命令与原始输出如下;保留这些输出以便后续性能变化可结合 cache build、 catalog prefetch、星像数、fallback 统计与实际 CPU 利用率判断,而非只比较汇总数字。

stash 后基线(4953775)

time ./build/Release/minkowski_sky \
  --all-sky-catalog assets/2mass/processed/all_sky \
  --look-ra-deg 0 --look-dec-deg -90 \
  --width 1920 --height 1080 \
  --coarse-cell-pixels 16 --fov-deg 60 \
  --exposure 1e12 \
  --output output/imgs/2mass_1080p_60deg_south_pole_1e12_psf_cache_event.png
PSF cache ready: 64x64 phases, radius 47 px, relative tail 1e-08, tail abs 1e-06, boundary 1e-07, build 0.681 s
Catalog prefetch: 9328 requested, 9328 newly loaded (18148775 stars), 0 unavailable in 3.942 s; 4 loader workers
Rendered 16554566 images from 18148775 catalog stars to output/imgs/2mass_1080p_60deg_south_pole_1e12_psf_cache_event.png (ok)
PSF splats: cached 16554566, cached wing-clipped 0, direct fallbacks 0, discarded below min-Y 0
./build/Release/minkowski_sky --all-sky-catalog assets/2mass/processed/all_sk  703.03s user 5.78s system 1424% cpu 49.753 total

stash pop 恢复后的 event-sink 改动(后来提交为 2a03cbf)

time ./build/Release/minkowski_sky \
  --all-sky-catalog assets/2mass/processed/all_sky \
  --look-ra-deg 0 --look-dec-deg -90 \
  --width 1920 --height 1080 \
  --coarse-cell-pixels 16 --fov-deg 60 \
  --exposure 1e12 \
  --output output/imgs/2mass_1080p_60deg_south_pole_1e12_psf_cache_event.png
PSF cache ready: 64x64 phases, radius 47 px, relative tail 1e-08, tail abs 1e-06, boundary 1e-07, build 0.672 s
Catalog prefetch: 9328 requested, 9328 newly loaded (18148775 stars), 0 unavailable in 3.926 s; 4 loader workers
Rendered 16554566 images from 18148775 catalog stars to output/imgs/2mass_1080p_60deg_south_pole_1e12_psf_cache_event.png (ok)
PSF splats: cached 16554566, cached wing-clipped 0, direct fallbacks 0, discarded below min-Y 0
./build/Release/minkowski_sky --all-sky-catalog assets/2mass/processed/all_sk  710.02s user 5.90s system 1419% cpu 50.424 total

状态的切换由 Git 完成:先在包含 event-sink 改动的工作树中运行,随后 git stash 暂存该改动、重新编译并运行基线,最后 git stash pop 恢复。因而这项测量比较的是 4953775 与后来提交为 2a03cbf 的完整源码差异。前者没有 event 路径;后者的差异 正是 event 准备/消费边界、每 worker 缓冲及其生命周期。因此这不是“开关的微基准”,而是 event 实现的端到端前后比较。

结果表中的 cache build 与 prefetch 是程序输出;两次均在对应状态下重新编译后运行。

结果

state revision cache build prefetch user system wall CPU user/image
stash 后的基线 4953775 0.681 s 3.942 s 703.03 s 5.78 s 49.753 s 1424% 42.47 us
stash pop 恢复后的 event-sink 改动 后来提交为 2a03cbf 0.672 s 3.926 s 710.02 s 5.90 s 50.424 s 1419% 42.89 us

恢复改动后的观测差为 +6.99 user s、+0.671 wall s、+0.42 us/star image,即 +0.99% user CPU work。两次的平均并行度近似相同(user / wall:14.13 与 14.08),所以 wall-time 差异并非由明显不同的实际 worker 使用量造成。

因此在这套真实渲染配置上,event-sink 实现的测得开销为约 0.99% user CPU work。该数值与 固定容量 event 拷贝、额外分支及最终 flush 所预期的小幅 CPU 开销相容。每个状态目前仅有 一次运行;若要估计波动范围,应在两个 Git 状态下各重复运行多次,而不是把基线改造成一个 原先不存在的运行时路径。

Historical comparison boundary

benchmarks/2mass_all_sky_psf_lookup_2026-08-28.md recorded 645.24 user s / 74.48 wall s for lookup, but its analytic render path was restricted to at most 10 private-HDR workers. The current runs use about 14 active workers on average. Therefore the current 49.753--50.424 s wall time is not evidence of an event-sink speedup, and the older 645.24 user s cannot be attributed to the event sink. 相反,本页的 4953775..2a03cbf 前后比较正是 event-sink 实现的性能 增量记录;它与旧基准的不同仅在于旧基准还混入了已移除的 worker 限制。