catalog: Form D opt 3 landed; both pivots converge on compute-saturation

Form D Option 3 (QECCOPS2 packed op format) shipped at foxhop
commit 90484ca. Numbers:

  n_batches  unpacked  packed  speedup
       16    5842 ms   5428    1.076x
       64    6226 ms   5830    1.068x
      128    6604 ms   6201    1.065x

On-disk shrink: 716 MB → 307 MB (2.33x). Storage win, not compute win.

Critical diagnostic correction from the opt 3 agent: the 3.5x
bandwidth projection was WRONG because ops_loader.c already
narrowed u64 → u32 on load, so in-VRAM Op was already 28 B, not
56 B. Max realistic VRAM-reduction was 28 → 24 B = 1.17x best
case. The measured 1.07x matches: per-shot state traffic (qubits
+ bits per thread) is ~85x larger than the op stream, which
warp-broadcasts through L1/L2. Op-stream bandwidth was not the
bottleneck.

Both Form D pivots (opt 1 axis-flip, opt 3 packing) converged on
the same finding: the 3090 is compute-saturated at ~250 Mops/s on
the kickmix circuit, not bandwidth-saturated. Algorithm + layout
tweaks already extracted; the real next macro-lever is multi-GPU
fan-out across the fleet (3090-ai + ai.foxhop.net 4090 + future
nodes, each saturating its own ceiling in parallel).

cuda-sim-axis-flip remains LIVE as a tool with specific use:
many-candidates × few-shots search-loop early-screen. ops.bin
packing remains useful for fleet rsync (3.5x smaller payloads
across the LAN matters when shipping candidate variants).
This commit is contained in:
russell@unturf.com 2026-06-05 14:16:20 -04:00
parent f8705f2e0d
commit 95b3b1af21
No known key found for this signature in database
2 changed files with 25 additions and 11 deletions

View file

@ -188,19 +188,32 @@ when there's no superposition; AG reduces to exactly what
sim_gpu.cu already does, at one bit per qubit per shot.
The 1.07x cuda-sim-ops-bin ceiling traces to memory-bandwidth on
per-shot striped state, not algorithm. Two pivots queued; opt 1 landed 2026-06-05 with a key correction:
per-shot striped state, not algorithm. Both pivots landed 2026-06-05; bandwidth-bound diagnosis confirmed FALSE
on the kickmix circuit. Empirical results below; see RESULTS docs for
detail.
- **axis-flip refactor of sim_gpu.cu** — DONE (Form D option 1,
commit foxhop 1f7ac9d). 217 Mops/s @ K=32 M=4; 23.7x over
per-shot N=4 at same M. CORRECTION: bandwidth-bound diagnosis
was WRONG — both kernels saturate at ~220-250 Mops/s. Axis
flip's win is **occupancy-amortization** at small M, not
per-shot N=4 at same M. Both kernels saturate at ~220-250 Mops/s.
Axis flip's win is **occupancy-amortization** at small M, not
bandwidth redistribution. Right tool for many-candidates ×
few-shots search-loop early-screen pattern.
- **ops.bin packing** — 56 -> 16 bytes per op halves global-memory
traffic (Form D option 3). Still in flight. Given the bandwidth
diagnosis flipped, may not deliver expected gain — letting
the agent report empirical numbers.
- **ops.bin packing (QECCOPS2)** — DONE (Form D option 3, commit
foxhop 90484ca). 1.07x kernel speedup, 2.33x on-disk shrink
(716 MB → 307 MB). The 3.5x projection was WRONG because
ops_loader.c already narrowed u64 → u32 on load, so in-VRAM Op
was already 28 B not 56 B; max realistic VRAM reduction 28→24 B
= 1.17x best case. Per-shot state traffic (qubits + bits per
thread) is ~85x larger than the op stream and dominates kernel
bandwidth. Storage win still useful for fleet rsync; compute
win small.
Both pivots converged on the same diagnosis: **the 3090 is
compute-saturated at ~250 Mops/s on the kickmix circuit, not
bandwidth-saturated.** Real next macro-lever: multi-GPU fan-out
(3090-ai + ai.foxhop.net 4090, each hitting its own ceiling in
parallel — see task #30).
Form D as originally scoped (AG tableau for our circuit) is
**parked**. STABSim-class wins remain valid for QEC / surface-code

View file

@ -99,11 +99,12 @@ make gpu-worker LUMBDA=asm # smallest footprint</code></pre>
<h3>Form D structural finding &mdash; 2026-06-05</h3>
<p><code>cuda-clifford-stabilizer</code> as originally scoped does not apply to our point-add circuit. Build agent measured Toffoli fraction 13.87% (well under the 40% threshold), then noticed the circuit contains no Hadamard or S gates &mdash; only X / CX / CCX / CZ / CCZ / SWAP / R / HMR / Z / NEG. State never leaves the computational basis. Aaronson-Gottesman tableau compression buys nothing when superposition does not exist; it reduces to exactly what <code>sim_gpu.cu</code> already does, at one bit per qubit per shot.</p>
<p>The <code>cuda-sim-ops-bin</code> 1.07&times; ceiling traces to memory-bandwidth on per-shot striped state, not algorithm choice. STABSim-class wins remain valid for QEC / surface-code workloads where H + S exist; that's a future workload, not point-add today.</p>
<p>Two replacement directions in flight:</p>
<p>Both replacement directions landed 2026-06-05; the bandwidth-bound diagnosis they were chasing turned out FALSE for our circuit.</p>
<ul>
<li><strong>Axis-flip refactor of <code>sim_gpu.cu</code></strong> &mdash; per-candidate parallelism over per-shot (Form D option 1). ~3 days. Reuses BSHK with new op_id.</li>
<li><strong><code>ops.bin</code> packing</strong> &mdash; 56 &rarr; 16 bytes per op halves global-memory traffic (Form D option 3). Addresses the actual measured bottleneck.</li>
<li><strong>Axis-flip refactor of <code>sim_gpu.cu</code></strong> &mdash; DONE (foxhop commit <code>1f7ac9d</code>). 217 Mops/s @ K=32 M=4 on a 3090; 23.7&times; over per-shot N=4 at same M. Both kernels saturate at ~220&ndash;250 Mops/s. Axis flip's win is occupancy-amortization, not bandwidth redistribution. Right tool for lumbda's many-candidates &times; few-shots search-loop early-screen pattern.</li>
<li><strong><code>ops.bin</code> packing (QECCOPS2)</strong> &mdash; DONE (foxhop commit <code>90484ca</code>). 1.07&times; kernel speedup, 2.33&times; on-disk shrink (716 MB &rarr; 307 MB). The 3.5&times; projection assumed 56 B/op was VRAM-resident; <code>ops_loader.c</code> already narrowed to 28 B on load, so the realistic ceiling was 1.17&times;. Per-shot state traffic (qubits + bits per thread) dominates kernel bandwidth ~85&times; over the op stream.</li>
</ul>
<p>Both pivots converged on the same diagnosis: <strong>the 3090 is compute-saturated at ~250 Mops/s on the kickmix circuit, not bandwidth-saturated.</strong> Real next macro-lever: multi-GPU fan-out across our fleet.</p>
<h3>Status legend</h3>
<ul>