← all papers

Cyclone

Sahil Khan, Abhinav Anand, Kenneth R. Brown, Jonathan M. Baker. Cyclone: Designing Efficient and Highly Parallel QCCD Architectural Codesigns for Fault Tolerant Quantum Memory. HPCA 2026. arXiv:2511.15910 · their code: sahilkhan123/Cyclone (MIT)

A ring of traps where every ancilla moves one trap per step past stationary data, against a QCCDSim grid, for hypergraph-product and bivariate-bicycle codes.

What this website takes from this paper
Cyclone for BB [[144,12,12]]: 72 traps on a ring, one ancilla each
the baseline grid for BB [[72,12,6]]: 81 traps between rows of junctions
configurationtime: their codeour replaythe paperthe paper's rules
HGP [[225,9,6]], Cyclone, as published
▶ watch it in the Studio
123,140 µs = ours123,140 µs123,140 µs equalFig. 6, printedR24 fails 9 others hold
HGP [[225,9,6]], Cyclone with the Z checks fixed
▶ watch it in the Studio
124,140 µs = ours124,140 µs–all 10 rules hold
HGP [[375,15,6]], Cyclone, as published
▶ watch it in the Studio
204,200 µs = ours204,200 µs–R24 fails 9 others hold
HGP [[375,15,6]], Cyclone with the Z checks fixed
▶ watch it in the Studio
204,800 µs = ours204,800 µs–all 10 rules hold
HGP [[625,25,8]], Cyclone, as published
▶ watch it in the Studio
340,300 µs = ours340,300 µs–R24 fails 9 others hold
HGP [[625,25,8]], Cyclone with the Z checks fixed
▶ watch it in the Studio
341,500 µs = ours341,500 µs–all 10 rules hold
HGP [[225,9,6]], the baseline grid (QCCDSim, 15x15 traps, capacity 5)
▶ watch it in the Studio
502,675 µs = ours502,675 µs502,675 µs equalFig. 6, printedR1 fails 10 others hold
BB [[72,12,6]], Cyclone
▶ watch it in the Studio
42,280 µs = ours42,280 µs42,280 µs equalthe time behind Fig. 14 (the artifact's result files)all 10 rules hold
BB [[90,8,10]], Cyclone
▶ watch it in the Studio
52,450 µs = ours52,450 µs52,450 µs equalthe time behind Fig. 14 (the artifact's result files)all 10 rules hold
BB [[144,12,12]], Cyclone
▶ watch it in the Studio
81,860 µs = ours81,860 µs81,860 µs equalthe time behind Fig. 14 (the artifact's result files)all 10 rules hold
BB [[72,12,6]], the baseline grid (9x9 traps, capacity 5)
▶ watch it in the Studio
164,520 µs = ours164,520 µs164,520 µs equalthe artifact's recorded output, plotted in Fig. 19R1 fails 10 others hold
BB [[90,8,10]], the baseline grid (10x10 traps, capacity 5)
▶ watch it in the Studio
188,595 µs = ours188,595 µs188,595 µs equalthe artifact's recorded output, plotted in Fig. 19R1 fails 10 others hold
BB [[144,12,12]], the baseline grid (12x12 traps, capacity 5)
▶ watch it in the Studio
270,145 µs = ours270,145 µs270,145 µs equalthe artifact's recorded output, plotted in Fig. 19R1 fails 10 others hold
The Z checks of the hypergraph-product codesIn the artifact's compiler every Z check of a hypergraph-product code is built from the last row of the X check matrix: all 108 Z checks of [[225,9,6]] act on the same seven qubits. Our checker finds this from outside: in the Z phase, 732 of the 756 CX gates are not gates of the code's Z checks. With the Z checks read from the code's Z matrix, the same compiler gives 124,140 µs for [[225,9,6]] (the paper prints 123,140), 204,800 µs for [[375,15,6]] and 341,500 µs for [[625,25,8]]; the speedup over the grid becomes 4.05x instead of 4.08x.
Grid round times behind the BB error ratesThe bivariate-bicycle error rates of Fig. 14 were computed with grid round times of 292,540, 187,170 and 619,710 µs (recoverable from the artifact's committed result files). The artifact's grid compiler gives 164,520, 188,595 and 270,145 µs for the same codes, which are also the times its notebook records; we found no setting that produces the Fig. 14 values. With the compiler's own times, Cyclone is 3.9x, 3.6x and 3.3x faster than the grid, rather than 6.9x, 3.6x and 7.6x.
Rebalancing through a full trapThe grid baseline is QCCDSim's scheduler. Its rebalancing shuttles follow a min-cost-flow path that can pass through a full trap: in the [[225,9,6]] run, 14 merges put an eighth ion into a trap of capacity 5 + 2 until the ion splits out again 80 µs later. The round time is not affected.
Our schedule on the same machine, under the same rules

Made by opt_cyclone, a placement search we wrote for Cyclone's ring and its cost model; it is not the compiler that compiles this website's leaderboard entries.

The same ring, the same traps, one ancilla per trap, Cyclone's own clock. Every qubit runs its CNOTs in exactly the circuit's order, even where two commute: each ancilla does its check's CNOTs in the listed order, each data qubit meets its checks in the listed order (all X checks, then all Z checks), and X check i and Z check i stay on ancilla i, as in the circuit. An ancilla that passes a data qubit it may not touch yet touches it a lap later. We choose where the data sit and where each ancilla starts (ancilla i starts i traps behind ancilla 0): for the two smaller HGP codes by a SAT search over the round's length, otherwise with the data in index order, then a local search on Cyclone's exact bill. Each schedule below is replayed by the same checker as the paper's, with the same timing law and circuit; an operation the paper's law does not price is refused.

configurationtheir codeoursthe paper's rules
HGP [[225,9,6]]
against: HGP [[225,9,6]], Cyclone with the Z checks fixed
▶ watch ours in the Studio
124,140 µs209,285 µs1.69× slowerall 10 rules hold
under Cyclone's rules, each qubit's order kept
HGP [[375,15,6]]
against: HGP [[375,15,6]], Cyclone with the Z checks fixed
▶ watch ours in the Studio
204,800 µs379,315 µs1.85× slowerall 10 rules hold
under Cyclone's rules, each qubit's order kept
HGP [[625,25,8]]
against: HGP [[625,25,8]], Cyclone with the Z checks fixed
▶ watch ours in the Studio
341,500 µs674,810 µs1.98× slowerall 10 rules hold
under Cyclone's rules, each qubit's order kept
BB [[72,12,6]]
against: BB [[72,12,6]], Cyclone
▶ watch ours in the Studio
42,280 µs764,945 µs18.09× slowerall 10 rules hold
under Cyclone's rules, each qubit's order kept
BB [[90,8,10]]
against: BB [[90,8,10]], Cyclone
▶ watch ours in the Studio
52,450 µs387,790 µs7.39× slowerall 10 rules hold
under Cyclone's rules, each qubit's order kept
BB [[144,12,12]]
against: BB [[144,12,12]], Cyclone
▶ watch ours in the Studio
81,860 µs3,181,350 µs38.86× slowerall 10 rules hold
under Cyclone's rules, each qubit's order kept

Kept in the circuit's order, a round on Cyclone's ring is slower than Cyclone's own, which does not keep it: Cyclone's loop lets each ancilla take whichever CNOT of its check it finds in its trap, so its own schedules fail the checker in strict order. The BB checks list their CNOTs in IBM's interleaved order, which chains the round's checks one after another: a SAT solver proves that no placement runs even the X phase of [[72,12,6]] in 200 steps or fewer, or of [[90,8,10]] in 73 or fewer, where Cyclone's whole round takes 72 and 90. Our BB rounds come from a plain placement and a short local search, so they are upper bounds, not optima.

The rules each run is judged by

This paper's model is written as the rule sets Cyclone's rules, QCCDSim's rules. Every run above was replayed and each rule of the set evaluated on it. Our schedules are held to the same rules, and also keep each qubit's gates in the circuit's exact order (R25): we may not reorder a circuit, even where its gates commute.

runR0R1R2R3R6bR8R14R24R25R26R27R29
HGP [[225,9,6]], Cyclone, as published · Cyclone's rules✓✓✓✓✓✓·✗ 1464·✓✓✓
HGP [[225,9,6]], Cyclone with the Z checks fixed · Cyclone's rules✓✓✓✓✓✓·✓·✓✓✓
HGP [[375,15,6]], Cyclone, as published · Cyclone's rules✓✓✓✓✓✓·✗ 2472·✓✓✓
HGP [[375,15,6]], Cyclone with the Z checks fixed · Cyclone's rules✓✓✓✓✓✓·✓·✓✓✓
HGP [[625,25,8]], Cyclone, as published · Cyclone's rules✓✓✓✓✓✓·✗ 4152·✓✓✓
HGP [[625,25,8]], Cyclone with the Z checks fixed · Cyclone's rules✓✓✓✓✓✓·✓·✓✓✓
HGP [[225,9,6]], the baseline grid (QCCDSim, 15x15 traps, capacity 5) · QCCDSim's rules✓✗ 36✓✓✓✓✓✓✓·✓✓
BB [[72,12,6]], Cyclone · Cyclone's rules✓✓✓✓✓✓·✓·✓✓✓
BB [[90,8,10]], Cyclone · Cyclone's rules✓✓✓✓✓✓·✓·✓✓✓
BB [[144,12,12]], Cyclone · Cyclone's rules✓✓✓✓✓✓·✓·✓✓✓
BB [[72,12,6]], the baseline grid (9x9 traps, capacity 5) · QCCDSim's rules✓✗ 5✓✓✓✓✓✓✓·✓✓
BB [[90,8,10]], the baseline grid (10x10 traps, capacity 5) · QCCDSim's rules✓✗ 5✓✓✓✓✓✓✓·✓✓
BB [[144,12,12]], the baseline grid (12x12 traps, capacity 5) · QCCDSim's rules✓✗ 7✓✓✓✓✓✓✓·✓✓
ours: HGP [[225,9,6]] · Cyclone's rules✓✓✓✓✓✓·✓✓·✓✓
ours: HGP [[375,15,6]] · Cyclone's rules✓✓✓✓✓✓·✓✓·✓✓
ours: HGP [[625,25,8]] · Cyclone's rules✓✓✓✓✓✓·✓✓·✓✓
ours: BB [[72,12,6]] · Cyclone's rules✓✓✓✓✓✓·✓✓·✓✓
ours: BB [[90,8,10]] · Cyclone's rules✓✓✓✓✓✓·✓✓·✓✓
ours: BB [[144,12,12]] · Cyclone's rules✓✓✓✓✓✓·✓✓·✓✓

✓ the rule holds on that run; ✗ it fails, with the number of counterexamples (hover for the first); – it does not apply to that run (hover for why); · the rule is not in that run's rule set.

what each rule says
R0 Every operation finds its ions where it says they are
setup_ok()
and (for all o in operations: well_formed(o) and found(o))
and (for all i in ions: position(i, final()) != none)
Each operation names its ions and where they are; replaying the execution from the start must find them there, and every ion must end it standing in a site.
R1 A site holds at most its capacity
for all s in sites, t in instants:
  occupancy(s, t) <= capacity(s)
An ion standing in a site, or passing through it, takes one of its places.
R2 A junction holds one ion at a time
for all j in junctions, t in instants:
  occupancy(j, t) <= 1
Where three or more rails meet, only one ion may be at any moment, resting or passing through.
R3 A rail carries at most its capacity
for all r in rails, t in instants:
  occupancy(r, t) <= capacity(r)
No more ions travel along one rail at once than the rail is built for (one, on most devices).
R6b A two-ion gate acts on two ions standing in one site
(for all g in two_qubit_gates, i in ions(g): position(i, start(g)) = site(g))
and (for all g in two_qubit_gates where size(declared_sites(g)) > 0:
       site(g) in declared_sites(g))
Both ions of a two-qubit gate are in the same trap when it starts, and in the trap the programme names for it, if it names one.
R8 An ion does one thing at a time
for all a, b in operations where a != b and simultaneous(a, b):
  disjoint(ions(a), ions(b))
No ion takes part in two operations at once: it cannot be gated in one place while it is carried to another.
R14 A split takes the ion at the end of its chain, or pays to reorder
for all m in splits: at_chain_end(m) or swap_paid(m)
An ion leaves its chain from the end that faces the rail; an ion further in must first be swapped to that end, which costs gates.
R24 Every two-qubit gate of the circuit is performed, and no other
(for all c in circuit_ops where needs_gate(c): gate_count(c) >= 1)
and (for all g in two_qubit_gates: serves_circuit(g))
Each two-qubit gate of the input circuit is carried out, and the execution performs no two-qubit gate the circuit does not ask for.
R25 Each qubit's operations keep the circuit's order
for all c1, c2 in circuit_ops where next_on_qubit(c1, c2) and performed(c1) and performed(c2):
  end(last(c1)) <= start(first(c2))
On every qubit, each operation is over before the next one on that qubit begins, in the order the circuit is written -- even where two of them would commute.
R26 Each qubit's gates keep the circuit's order, up to commuting CNOTs
for all c1, c2 in circuit_ops where next_run(c1, c2) and performed(c1) and performed(c2):
  end(last(c1)) <= start(first(c2))
As R25, except that consecutive CNOTs in which a qubit plays the same role (always the control, or always the target) commute, and may run in any order among themselves.
R27 One operation at a time in a trap
for all a, b in operations where a != b and kind(a) in serial_kinds and kind(b) in serial_kinds
    and site(a) = site(b) and site(a) != none:
  not simultaneous(a, b)
The operations of the kinds listed in serial_kinds hold their trap: two of them in one trap never overlap in time.
R29 Every operation lasts what the clock says
for all o in operations where clocked(o): approx(duration(o), clock(o))
Each operation's duration is the one the model's duration law gives it.

How a paper is checked · all papers