diff --git a/BENCHMARKS.md b/BENCHMARKS.md index 40dce34..40f2e8a 100644 --- a/BENCHMARKS.md +++ b/BENCHMARKS.md @@ -190,3 +190,15 @@ Verdicts: - Metal sparse-conv is worth **1.72x end-to-end** (saves 89.6s/gen). Keep flex_gemm the default; the conv_none fallback is a real 90s regression if the metallib ever breaks silently — worth a GODBOARD/log assertion. - Remaining fat in the fast path: ~46s diffusion sampling (padded SDPA attention — next kernel frontier), ~50s decode/extract (incl. aten::segment_reduce falling back to CPU — patchable), 19s Metal bake. - Decode actually produces 2.79M faces before the forced ~200k simplify — the quality-recovery headroom (rung 2) is bigger than the recon estimated. + +## 2026-07-19 — Hunyuan paint-UNet mx.compile (Target 1, branch mlx-tune) + +Micro gate (real arch, random fp16 weights, 6-view 64² latents, m3ultra): +eager 270.5 ms/fwd → compiled 260.5 ms/fwd = **1.04×**; parity max|diff| +3.0e-05 (PASS); first-trace 1.2 s; peak 4.9 GB. Env-gated +`HY3D_MLX_COMPILE=1`, default off (numerics untouched). + +Verdict: keep (free, safe) but the paint UNet is GEMM-bound — fusion alone +is small. The bigger Hunyuan levers are Target 3 (MoE `.item()` sync-tax, +−4800 syncs/gen, unlocks whole-DiT compile) and Target 4 (manual→fused +SDPA in paint DINO). E2E flag-on-vs-off measurement pending after those.