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:
parent
f8705f2e0d
commit
95b3b1af21
2 changed files with 25 additions and 11 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -99,11 +99,12 @@ make gpu-worker LUMBDA=asm # smallest footprint</code></pre>
|
|||
<h3>Form D structural finding — 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 — 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× 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> — 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> — 56 → 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> — DONE (foxhop commit <code>1f7ac9d</code>). 217 Mops/s @ K=32 M=4 on a 3090; 23.7× over per-shot N=4 at same M. Both kernels saturate at ~220–250 Mops/s. Axis flip's win is occupancy-amortization, not bandwidth redistribution. Right tool for lumbda's many-candidates × few-shots search-loop early-screen pattern.</li>
|
||||
<li><strong><code>ops.bin</code> packing (QECCOPS2)</strong> — DONE (foxhop commit <code>90484ca</code>). 1.07× kernel speedup, 2.33× on-disk shrink (716 MB → 307 MB). The 3.5× 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×. Per-shot state traffic (qubits + bits per thread) dominates kernel bandwidth ~85× 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>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue