Doc: update GPU PSF acceleration status
This commit is contained in:
1 parent
e8bc553128
commit
e48c490337
1 file changed
+40
-17
@@ -51,19 +51,26 @@ CPU HDR 与 catalog,仍有可用空间。其可能收益不是减少需要传
|
||||
这是一条 ATRI 专用的空间换时间路线,必须以端到端实测证明收益后才保留。它不应成为 ITX、
|
||||
Optiplex 或通用 CPU fallback 的前提;在这些机器上仍使用流式块。
|
||||
|
||||
应在 `optics/psf` 层定义一个按块提交的 sink。概念性事件为:
|
||||
当前 CPU 已在 `optics` 层建立 cache-eligible 的事件边界:
|
||||
|
||||
```c
|
||||
typedef struct {
|
||||
float x, y; /* continuous image position */
|
||||
float r, g, b; /* already premultiplied by flux */
|
||||
float support_radius;
|
||||
} PsfEvent;
|
||||
double x, y;
|
||||
LinearRgb color;
|
||||
double flux, support_radius;
|
||||
} PsfCachedEvent;
|
||||
```
|
||||
|
||||
CPU worker 产生少量固定上限的事件块,填满后提交;GPU 与 CPU 以双/三缓冲方式重叠执行。
|
||||
块的首版大小从 1--16 MiB 试起,由实测决定。GPU 后端仍必须统计:cache splat、wing clip、
|
||||
direct fallback 和 min-Y discarded;这些计数在块完成后汇总,而不是在热循环中同步。
|
||||
`psf_prepare_cached_event()` 保留既有的 cache/direct/min-Y 判定,状态 0 或 2 产出该
|
||||
事件;direct fallback 在 CPU 立即处理,min-Y 在上传前丢弃。`PsfEventSink` 由每个 OpenMP
|
||||
worker 初始化一次、贯穿其线程生命周期,固定容量为 16,384 个事件;填满或线程结束时由现有
|
||||
CPU cache evaluator 消费。此实现是 GPU producer 的正确性基线,并已通过固定 HDR reference
|
||||
和完整 2MASS 前后性能记录验证。
|
||||
|
||||
GPU sink 将消费同一 `PsfCachedEvent` 与现有不可变 `PsfKernelCache::weights`,不得重新以
|
||||
float 解析采样替代 cache 语义。首版使用有限大小的上传块并复用 device buffer;块大小从
|
||||
1--16 MiB 试起,由实测决定。GPU 后端仍必须统计:cache splat、wing clip、direct fallback
|
||||
和 min-Y discarded;这些计数在块完成后汇总,而不是在热循环中同步。
|
||||
|
||||
为降低局部热点,CPU 侧应把来自不同 image-plane triangle / worker 的事件块交错提交。
|
||||
三角形内部的星像中心必定落在各自不重叠的像平面三角形内;不同三角形的 PSF wings 仍可
|
||||
@@ -141,14 +148,30 @@ GPU 后端必须先在小、固定 catalog snapshot 上同 CPU 的 `--psf-direct
|
||||
|
||||
## 7. 实施顺序
|
||||
|
||||
1. 只做接口:将现有 CPU immediate splat 包装为默认 sink,输出不得变化。
|
||||
2. 实现 CPU 事件块 producer,但仍由 CPU sink 消费;验证事件流没有改变 HDR 和统计。
|
||||
3. 在工作站实施 HIP direct-atomic 原型,完成正确性和端到端基准。
|
||||
4. 在 ATRI 上比较流式块与整帧收集、空间重排/分桶两种输入组织;记录 host RAM 峰值、上传、
|
||||
GPU kernel 和端到端时间。
|
||||
5. 根据 profile 决定是否实现 tile-local reduction;不因纸面 TFLOPS 推断需要它。
|
||||
6. 实现 Vulkan 设备枚举、feature probe 和 direct-atomic 后端;feature 不足时 CPU fallback。
|
||||
7. 在 ITX、Optiplex、工作站分别跑同一小基准和足够长的稳定性试验,记录真实可用矩阵。
|
||||
8. 只有当基准显示明显收益时,才为 WX 4100 或 Intel 核显投入 tile-reduction / 专门调优。
|
||||
### 当前状态(2026-09-05)
|
||||
|
||||
已完成 CPU event 路径:`PsfCachedEvent`、`psf_prepare_cached_event()` 与 per-worker
|
||||
`PsfEventSink` 已进入 `frame_splat_catalog()`。固定 HDR reference 与 unit tests 验证该路径
|
||||
不改变输出;在 2MASS 全天 1080p 的前后比较中,完整 event 实现相对无 event 路径版本增加
|
||||
0.99% user CPU work。该记录含完整命令和原始输出,见
|
||||
`benchmarks/2mass_all_sky_psf_event_sink_2026-09-05.md`。
|
||||
|
||||
曾有一个 float、解析中心采样的 HIP atomic spike,用于确认 HIP runtime、上传与 float atomic
|
||||
可执行;它没有 cache 权重、双精度 HDR 或 production integration。其 `test-hip` target 和测试
|
||||
已移除,不能作为 renderer GPU backend 的验证或运行入口。
|
||||
|
||||
下一步是仅将现有 `PsfCachedEvent` 块与 `PsfKernelCache::weights` 接入 HIP:
|
||||
|
||||
1. 定义 production HIP sink 的 C ABI,上传 double event 与 immutable cache 权重,并复用
|
||||
device event/HDR buffer。
|
||||
2. 保持 CPU 对 direct fallback 的处理和提交顺序;每个 cache 事件仅在 HIP 端按现有 bilinear
|
||||
phase cache、圆形支持和 wing clip 规则累积到 double HDR。
|
||||
3. 用固定 catalog reference 比较 HDR RGB/Y、最大像素误差、总通量与统计;GPU atomic 的
|
||||
非确定加法顺序使用事先记录的容差,而非 bytewise 比较。
|
||||
4. 记录端到端基准的完整命令和原始输出:Git hash、CPU threads、GPU/runtime、块大小、上传、
|
||||
kernel、download、分辨率、catalog、PSF 及所有 fallback 统计。
|
||||
5. 只在 direct atomic profile 显示热点竞争是主要瓶颈时,比较 tile-local reduction;ATRI 的
|
||||
整帧收集/重排同样必须以端到端收益证明。
|
||||
6. HIP 路径稳定后再评估 Vulkan 的可移植后端及其他机器的实际设备矩阵。
|
||||
|
||||
每一步独立提交,并保持 CPU reference、GPU runtime 层和 shader 资源的提交边界清晰。
|
||||
Reference in new issue
Block a user