QCCDSim
Prakash Murali, Dripto M. Debroy, Kenneth R. Brown, Margaret Martonosi. Architecting Noisy Intermediate-Scale Trapped Ion Quantum Computers. ISCA 2020. arXiv:2004.04706 · their code: prakashmurali/QCCDSim (no license)
Two six-trap machines, a line (L6) and a two-by-three grid (G2x3), trap capacity swept from 14 to 34 ions, six NISQ benchmarks; the simulator every later paper in this list builds on.
- Rules R1, R12, R13 cite it as a source.
- The transport times of the default timing table, from the paper's Table I: moving an ion through one segment 5 µs, split and merge 80 µs each, crossing a Y-junction 100 µs and crossing an X-junction 120 µs.
- The two-qubit gate's error growing with the chain length N in the gate zone as N/ln N, in the default machine and the noise model.
- The grid generator and the grid baseline machine, a QCCDSim-style grid.
No license file: we ran it locally and publish only the schedules it produced, never its code.
| configuration | time: their code | our replay | the paper | the paper's rules |
|---|---|---|---|---|
| BV-64 on L6, capacity 14, Greedy mapper ▶ watch it in the Studio | 13,274 µs = ours | 13,274 µs | 13,270 µs matchesFig. 6(a), plotted (vector data in the source) | all 11 rules hold |
| fidelity | 0.9776 = ours | 0.9776 | 0.9776 matchesFig. 6(c), plotted | |
| BV-64 on L6, capacity 20, Greedy mapper ▶ watch it in the Studio | 18,297 µs = ours | 18,297 µs | 18,300 µs matchesFig. 6(a) | all 11 rules hold |
| fidelity | 0.9697 = ours | 0.9697 | 0.9697 matchesFig. 6(c) | |
| BV-64 on G2x3, capacity 14, Greedy mapper ▶ watch it in the Studio | 14,354 µs = ours | 14,354 µs | 14,350 µs matchesFig. 7(b) | all 11 rules hold |
| fidelity | 0.9775 = ours | 0.9775 | 0.9775 matchesFig. 7(b) | |
| QAOA-64 (20 layers) on L6, capacity 14, program-order mapper ▶ watch it in the Studio | 162,360 µs = ours | 162,360 µs | 162,400 µs matchesFig. 6(a) | all 11 rules hold |
| fidelity | 0.4758 = ours | 0.4758 | 0.4758 matchesFig. 6(d) | |
| QAOA-64 (20 layers) on L6, capacity 20, program-order mapper ▶ watch it in the Studio | 254,144 µs = ours | 254,144 µs | 254,100 µs matchesFig. 6(a) | all 11 rules hold |
| fidelity | 0.3827 = ours | 0.3827 | 0.3827 matchesFig. 6(d) | |
| QAOA-64 (20 layers) on G2x3, capacity 14, program-order mapper ▶ watch it in the Studio | 191,807 µs = ours | 191,807 µs | 191,800 µs matchesFig. 7(d) | all 11 rules hold |
| fidelity | 0.4004 = ours | 0.4004 | 0.4004 matchesFig. 7(d) | |
| Adder (32-bit) on L6, capacity 14, program-order mapper ▶ watch it in the Studio | 90,135 µs = ours | 90,135 µs | 90,130 µs matchesFig. 6(a) | all 11 rules hold |
| fidelity | 0.803 = ours | 0.803 | 0.803 matchesFig. 6(c) | |
| Adder (32-bit) on L6, capacity 20, program-order mapper ▶ watch it in the Studio | 126,477 µs = ours | 126,477 µs | 126,500 µs matchesFig. 6(a) | all 11 rules hold |
| fidelity | 0.7648 = ours | 0.7648 | 0.7648 matchesFig. 6(c) | |
| QFT-64 on L6, capacity 14, Greedy mapper ▶ watch it in the Studio | 333,074 µs = ours | 333,074 µs | 333,100 µs matchesFig. 6(a) | all 11 rules hold |
| fidelity | 9.701e-04 = ours | 9.701e-04 | 9.701e-04 matchesFig. 6(e) | |
| QFT-64 on L6, capacity 20, Greedy mapper ▶ watch it in the Studio | 550,560 µs = ours | 550,560 µs | 550,600 µs matchesFig. 6(a) | all 11 rules hold |
| fidelity | 0.001295 = ours | 0.001295 | 0.001295 matchesFig. 6(e) | |
| Supremacy-64 on L6, capacity 20, program-order mapper ▶ watch it in the Studio | 223,295 µs = ours | 223,295 µs | 223,300 µs matchesFig. 6(a) | all 11 rules hold |
| fidelity | 0.1563 = ours | 0.1563 | 0.1563 matchesFig. 6(d) | |
| BV-64 on L6, capacity 14, Greedy mapper, ion swaps ▶ watch it in the Studio | 21,634 µs = ours | 21,634 µs | 21,630 µs matchesFig. 8(h), ion swap | all 11 rules hold |
| fidelity | 0.9813 = ours | 0.9813 | 0.9813 matchesFig. 8(b) |
How the column “the paper” is made. The paper prints none of these numbers; it plots them. Its figures are vector drawings in its arXiv source, so every plotted point is stored as coordinates, to a thousandth of a typographic point or finer. Each value is a point's height mapped through the labelled ticks of its axis and rounded to four significant digits. Unrounded, the plotted points are their code's own outputs to within 0.02 % (2 µs at most); the small differences from the column “their code” are that rounding. “matches” means within 0.5 % of our replay, the precision allowed for a number read from a plot; the largest difference here is 0.03 %.
Made by sched, a list scheduler we wrote for the QCCDSim family's model; it is not the compiler that compiles this website's leaderboard entries.
A list scheduler of our own over QCCDSim's primitives: every candidate step is timed exactly before it is chosen, with look-ahead; the qubits are spread over all six traps; a gate swap is used only where the chain bookkeeping of QCCDSim and of the physical machine agree, so the schedule passes under both. 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 | fidelity: theirs | ours | the paper's rules | |
|---|---|---|---|---|---|---|
| BV-64 on L6, capacity 14 against: BV-64 on L6, capacity 14, Greedy mapper ▶ watch ours in the Studio | 13,274 µs | 12,287 µs | 1.08× faster | 0.9776 | 0.9824 1.00× higher | all 11 rules hold all 11 rules hold under QCCDSim's chain bookkeeping and the physical one, each qubit's order kept |
| BV-64 on L6, capacity 20 against: BV-64 on L6, capacity 20, Greedy mapper ▶ watch ours in the Studio | 18,297 µs | 17,240 µs | 1.06× faster | 0.9697 | 0.9775 1.01× higher | all 11 rules hold all 11 rules hold under QCCDSim's chain bookkeeping and the physical one, each qubit's order kept |
| Adder on L6, capacity 14 against: Adder (32-bit) on L6, capacity 14, program-order mapper ▶ watch ours in the Studio | 90,135 µs | 68,480 µs | 1.32× faster | 0.803 | 0.856 1.07× higher | all 11 rules hold all 11 rules hold under QCCDSim's chain bookkeeping and the physical one, each qubit's order kept |
| Adder on L6, capacity 20 against: Adder (32-bit) on L6, capacity 20, program-order mapper ▶ watch ours in the Studio | 126,477 µs | 102,080 µs | 1.24× faster | 0.7648 | 0.8195 1.07× higher | all 11 rules hold all 11 rules hold under QCCDSim's chain bookkeeping and the physical one, each qubit's order kept |
| QAOA-64 on L6, capacity 14 against: QAOA-64 (20 layers) on L6, capacity 14, program-order mapper ▶ watch ours in the Studio | 162,360 µs | 55,139 µs | 2.94× faster | 0.4758 | 0.458 1.04× lower | all 11 rules hold all 11 rules hold under QCCDSim's chain bookkeeping and the physical one, each qubit's order kept |
| QAOA-64 on L6, capacity 20 against: QAOA-64 (20 layers) on L6, capacity 20, program-order mapper ▶ watch ours in the Studio | 254,144 µs | 80,491 µs | 3.16× faster | 0.3827 | 0.412 1.08× higher | all 11 rules hold all 11 rules hold under QCCDSim's chain bookkeeping and the physical one, each qubit's order kept |
| Supremacy-64 on L6, capacity 20 against: Supremacy-64 on L6, capacity 20, program-order mapper ▶ watch ours in the Studio | 223,295 µs | 108,864 µs | 2.05× faster | 0.1563 | 0.3792 2.43× higher | all 11 rules hold all 11 rules hold under QCCDSim's chain bookkeeping and the physical one, each qubit's order kept |
| QFT-64 on L6, capacity 14 against: QFT-64 on L6, capacity 14, Greedy mapper ▶ watch ours in the Studio | 333,074 µs | 770,215 µs | 2.31× slower | 9.701e-04 | 1.558e-15 622735025495.33× lower | all 11 rules hold all 11 rules hold under QCCDSim's chain bookkeeping and the physical one, each qubit's order kept |
| QFT-64 on L6, capacity 20 against: QFT-64 on L6, capacity 20, Greedy mapper ▶ watch ours in the Studio | 550,560 µs | 699,806 µs | 1.27× slower | 0.001295 | 0.002331 1.80× higher | all 11 rules hold all 11 rules hold under QCCDSim's chain bookkeeping and the physical one, each qubit's order kept |
QFT-64 is a loss: every trap crossing costs two gate swaps under both bookkeepings, only one travelling ion fits in a trap at a time, and finished ions have nowhere to go at these capacities.
The rules each run is judged by
This paper's model is written as the rule sets QCCDSim's rules, QCCDSim's rules, with a physical gate swap. 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 | R27 | R29 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| BV-64 on L6, capacity 14, Greedy mapper · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| BV-64 on L6, capacity 20, Greedy mapper · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| BV-64 on G2x3, capacity 14, Greedy mapper · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| QAOA-64 (20 layers) on L6, capacity 14, program-order mapper · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| QAOA-64 (20 layers) on L6, capacity 20, program-order mapper · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| QAOA-64 (20 layers) on G2x3, capacity 14, program-order mapper · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Adder (32-bit) on L6, capacity 14, program-order mapper · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Adder (32-bit) on L6, capacity 20, program-order mapper · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| QFT-64 on L6, capacity 14, Greedy mapper · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| QFT-64 on L6, capacity 20, Greedy mapper · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Supremacy-64 on L6, capacity 20, program-order mapper · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| BV-64 on L6, capacity 14, Greedy mapper, ion swaps · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ours: BV-64 on L6, capacity 14 · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ours: BV-64 on L6, capacity 14 · QCCDSim's rules, with a physical gate swap | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ours: BV-64 on L6, capacity 20 · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ours: BV-64 on L6, capacity 20 · QCCDSim's rules, with a physical gate swap | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ours: Adder on L6, capacity 14 · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ours: Adder on L6, capacity 14 · QCCDSim's rules, with a physical gate swap | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ours: Adder on L6, capacity 20 · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ours: Adder on L6, capacity 20 · QCCDSim's rules, with a physical gate swap | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ours: QAOA-64 on L6, capacity 14 · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ours: QAOA-64 on L6, capacity 14 · QCCDSim's rules, with a physical gate swap | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ours: QAOA-64 on L6, capacity 20 · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ours: QAOA-64 on L6, capacity 20 · QCCDSim's rules, with a physical gate swap | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ours: Supremacy-64 on L6, capacity 20 · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ours: Supremacy-64 on L6, capacity 20 · QCCDSim's rules, with a physical gate swap | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ours: QFT-64 on L6, capacity 14 · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ours: QFT-64 on L6, capacity 14 · QCCDSim's rules, with a physical gate swap | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ours: QFT-64 on L6, capacity 20 · QCCDSim's rules | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ours: QFT-64 on L6, capacity 20 · QCCDSim's rules, with a physical gate swap | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
✓ 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 where not exchange(t): occupancy(j, t) <= 1Where three or more rails meet, only one ion may be at any moment, resting or passing through. An ion here is a qubit ion with the coolant ion that shares its well: a qubit-coolant pair crosses a junction as one crystal, as the Ba-Yb pair does through an X-junction. Two qubit ions in one junction at once is what the rule refuses -- except during a swap-or-stay exchange on a C2LR machine, where the shared junction waveform exchanges the two wells nearest it by design, and the routes are the machine's own matching, never the programme's.
for all r in rails, t in instants where not exchange(t): occupancy(r, t) <= capacity(r)No more ions travel along one rail at once than the rail is built for (one, on most machines). A swap-or-stay exchange on a C2LR machine carries its two crystals along the junction's two rails by design, and is not judged here.
(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 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.