Performance at scale¶
LabOne Q compiles every experiment on your computer before the instruments run it, so compilation time adds to each measurement. We measure it for every release and keep working to bring it down. Since LabOne Q 2.41, our first reference experiments for QCCS compile up to 210 times faster.
Figure 1. Compilation time of the first reference experiments at their largest size on QCCS, from LabOne Q 2.41 to 26.10.
Calibration experiments¶
We also measure experiments modeled on the calibration routines of real QPUs, with up to 112 qubits and tunable couplers. They compile with LabOne Q 2.59 and later. On QCCS, LabOne Q 26.10 compiles them 6 to 11 times faster than 2.59. From 26.10 on, we measure them on ZQCS as well.
Figure 2. Compilation time of the calibration experiments at their largest size on QCCS, in each LabOne Q release.
| Experiment | 2.59 | 26.1.2 | 26.10 | Faster by | 26.10, ZQCS |
|---|---|---|---|---|---|
| Ramsey, 112 qubits | 5.8 s | 1.9 s | 1.0 s | 6× | 0.77 s |
| Ramsey with flux bias sweep, 112 qubits | 18 s | 4.1 s | 1.7 s | 11× | 11 s |
| RB, 18 qubits | 177 s | 125 s | 28 s | 6× | 12 s |
Experiment size¶
Figure 3. Compilation time against the number of qubits, in LabOne Q 2.59 and 26.10 on QCCS, and in 26.10 on ZQCS.
Compilation time grows roughly in proportion to the number of qubits.
Where the time goes¶
The scheduler works out when each pulse plays. The code generator turns the schedule into sequencer programs and waveforms. Other covers the rest of the compilation, including passing data between Python and the compiler core and compiling the sequencer programs for the instruments. In LabOne Q 26.10 on QCCS, the calibration experiments split as follows:
| Experiment | Scheduler | Code generator | Other |
|---|---|---|---|
| Ramsey, 112 qubits | 0.054 s | 0.37 s | 0.61 s |
| Ramsey with flux bias sweep, 112 qubits | 0.13 s | 0.79 s | 0.79 s |
| RB, 18 qubits | 7.0 s | 5.1 s | 16 s |
How we measured¶
The calibration experiments target a QPU with its qubits on a grid and a tunable coupler between neighboring qubits. They act on single qubits, leave the couplers at their idle bias, and read out all qubits at the end of each sequence.
| Experiment | Sequence |
|---|---|
| Ramsey | Two π/2 pulses with 102 different delays between them, on all qubits in parallel |
| Ramsey with flux bias sweep | Ramsey at two detunings, repeated in near time for 11 flux bias values |
| RB | 25 random sequences for each of 16 lengths from 1 to 1500 Clifford gates, on all qubits in parallel, each ending on a random Clifford gate in place of the recovery gate |
The QCCS setup drives the qubits with SHFSG, biases qubits and couplers with HDAWG, reads out 16 qubits per line with SHFQA, and averages the shots cyclically. The ZQCS setup reads out 10 qubits per line and acquires single shots, so the QCCS and ZQCS columns do not compare identical experiments. RB stops at 18 qubits, where LabOne Q 2.59 already takes three minutes to compile it.
The first reference experiments ran on a QCCS setup of SHFQC and HDAWG instruments. They were Ramsey with 201 delay steps on up to 180 qubits, a sequence of up to 8192 random Clifford gates on 4 qubits, and two-qubit RB with up to 256 Clifford gates generated by Qiskit.
We compiled each experiment without connecting to instruments, on a MacBook Pro (M1 Pro) with Python 3.12. Each LabOne Q release came from PyPI, together with the dependencies available on its release date. We compiled every qubit count until the runs took 10 s in total or 20 runs were done, and the figures and tables show the median. Compilations longer than 10 s therefore ran once. The 26.10 numbers come from the pre-release 26.10.0b4.
Timing your own experiments¶
To time your own experiments, measure how long Session.compile and
Session.run take, for example with time.perf_counter. If your application
already traces with OpenTelemetry,
LabOneQInstrumentor adds connecting, compiling and running to your traces. The
API reference describes it.