Two-Qubits Randomized Benchmarking Made Simple
A new tool for a not-so-new problem
Randomized Benchmarking (RB) is a great example of why you need a processor-based quantum controller. One that does not only play pulses from memory but can actually generate waveforms in real-time. This is the fundamental and unique strength of our Pulse Processing Unit (PPU) technology, the heart of the OPX platform.
Playing from memory means calculate first, upload to memory, play later. Now imagine calculating and uploading 1,000 individual random instances for each of 10,000 sequences of gates to perform a deep Randomized Benchmarking. How many millions of waveforms is that? How fast will memory limitation start being a factor?
With OPX, the Pulse Processing Unit only takes commands from our pulse-level language QUA. There’s very minimal memory involved. Everything is calculated, randomized if needed, generated, and played in real-time during the sequence. Such unique architecture and the ease of use of QUA allow the OPX to routinely implement qubit characterization and single-qubit RB within 48 hours of opening the OPX box.
From single- to two-qubits RB: the PPU way
The obvious step forward is two-qubit RB, the standard way we measure gate errors for all gates necessary for general quantum computation. It can be used to measure errors in operating your quantum computer of any size. The issue for memory-based systems is that increasing qubit counts from one to two exponentially increases the possible gate sequences, making randomization and memory requirements much more strict. This is where the PPU comes into its own.
Knowing the complexity of the topic and how hard it is to implement two-qubits RB makes me all the happier to showcase the new tool available to OPX users: a QUA package streamlining two-qubits RB. All the complexity and hardcore calculations are handled behind the curtains and in the most efficient way by the PPU, leaving the user with just two simple lines of QUA code to configure and run their experiment:
rb = TwoQubitRb(local_config, phased_xz, {“CZ”: cz}, prep, meas)
result = rb.run(qmm, sequence_depths=[10, 100, 1000, 10000], repeats=100, avgs=10000)
Two lines of code allow you to run RB simply AND with the best performance: a couple of minutes runtime for 10,000-depth two-qubits RB, no uploading, <1s compilation time.
Here is a short video introducing the package and its functionalities. We will keep working on it to add more and more, so stay tuned to what’s to come (or ping us to suggest features)!
If any characterization experiment takes more than a couple of lines of code, then it’s not simple enough. Ping me, and let’s change it!
Lorenzo