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.
- Rules R1, R7, R11, R12, R13 cite it as a source.
- Rigid rotation of a ring with the data parked and the ancillas riding, half of the question this project started from and the pass our compiler's rotate mode runs.
- The base ring device (cyclone_base) and the cyclone timing table: move 10 µs, junction crossings by degree, split and merge 80 µs.
- Assigning checks to ancillas as they arrive, in the bivariate-bicycle schedules.
| configuration | time: their code | our replay | the paper | the paper's rules |
|---|---|---|---|---|
| HGP [[225,9,6]], Cyclone, as published ▶ watch it in the Studio | 123,140 µs = ours | 123,140 µs | 123,140 µs equalFig. 6, printed | R24 fails 9 others hold |
| HGP [[225,9,6]], Cyclone with the Z checks fixed ▶ watch it in the Studio | 124,140 µs = ours | 124,140 µs | – | all 10 rules hold |
| HGP [[375,15,6]], Cyclone, as published ▶ watch it in the Studio | 204,200 µs = ours | 204,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 = ours | 204,800 µs | – | all 10 rules hold |
| HGP [[625,25,8]], Cyclone, as published ▶ watch it in the Studio | 340,300 µs = ours | 340,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 = ours | 341,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 = ours | 502,675 µs | 502,675 µs equalFig. 6, printed | R1 fails 10 others hold |
| BB [[72,12,6]], Cyclone ▶ watch it in the Studio | 42,280 µs = ours | 42,280 µs | 42,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 = ours | 52,450 µs | 52,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 = ours | 81,860 µs | 81,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 = ours | 164,520 µs | 164,520 µs equalthe artifact's recorded output, plotted in Fig. 19 | R1 fails 10 others hold |
| BB [[90,8,10]], the baseline grid (10x10 traps, capacity 5) ▶ watch it in the Studio | 188,595 µs = ours | 188,595 µs | 188,595 µs equalthe artifact's recorded output, plotted in Fig. 19 | R1 fails 10 others hold |
| BB [[144,12,12]], the baseline grid (12x12 traps, capacity 5) ▶ watch it in the Studio | 270,145 µs = ours | 270,145 µs | 270,145 µs equalthe artifact's recorded output, plotted in Fig. 19 | R1 fails 10 others hold |
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.
| configuration | their code | ours | the 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 µs | 209,285 µs | 1.69× slower | all 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 µs | 379,315 µs | 1.85× slower | all 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 µs | 674,810 µs | 1.98× slower | all 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 µs | 764,945 µs | 18.09× slower | all 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 µs | 387,790 µs | 7.39× slower | all 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 µs | 3,181,350 µs | 38.86× slower | all 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.
| run | R0 | R1 | R2 | R3 | R6b | R8 | R14 | R24 | R25 | R26 | R27 | R29 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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
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.
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.
for all j in junctions, t in instants: occupancy(j, t) <= 1Where three or more rails meet, only one ion may be at any moment, resting or passing through.
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).
(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.
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.
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.
(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.
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.
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.
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.
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.