Benchmark circuits: MQT Bench and QASMBench
Benchmarks are the circuits the community uses to compare compilers, simulators and machines. QubitLab generates MQT Bench circuits on demand and ships a QASMBench-style gallery, so you can run the same algorithm family at any size, on any target, and compare.
MQT Bench (Munich Quantum Toolkit)
MQT Bench, from the Chair for Design Automation at TU Munich, generates benchmark circuits for 36 algorithm families at four abstraction levels: algorithmic, target-independent, native-gates and mapped. QubitLab bundles the generator (mqt.bench 2.3) and exposes the first two levels: open Examples → MQT Bench in the IDE, choose an algorithm and a qubit count from 2 to 16, and the OpenQASM 3 circuit loads into the editor. Compile maps it to any target; Debug steps through it up to 10 qubits; Cutting handles the larger ones.
| Family | Benchmarks |
|---|---|
| States and basics | ghz, ghz_dynamic, wstate, graphstate, randomcircuit |
| Oracle algorithms | dj, bv, grover, qwalk |
| Fourier and phase | qft, qftentangled, dynamic_qft, qpeexact, qpeinexact, iqpe, ae, hhl, shor |
| Arithmetic | half_adder, full_adder, modular_adder, cdkm_ripple_carry_adder, vbe_ripple_carry_adder, draper_qft_adder, multiplier, rg_qft_multiplier, hrs_cumulative_multiplier |
| Variational and QML | vqe_real_amp, vqe_su2, vqe_two_local, qaoa, qnn, bmw_quark_cardinality, bmw_quark_copula |
| Error correction | seven_qubit_steane_code, shors_nine_qubit_code |
Some families constrain the size (half_adder needs an odd count ≥ 3, the Steane code multiples of 13, Shor only 18+ qubits); the generator says so instead of failing silently. Circuits that use gates outside the palette (rzz, u, custom definitions) still run and debug; the composer shows them as code-only.
Dynamic circuits (ghz_dynamic, dynamic_qft, iqpe) measure in the middle and branch on the result. Generated programs are rewritten into one q and one c register, so the composer draws every if/else as a dashed frame with its condition on the tag; while loops, constant for loops (shown unrolled), switch/case and break/continue draw the same way. Conditions may combine bits with &&, ||, ^, !, == and != and compare whole registers; QubitLab lowers them to the single-bit tests Qiskit understands. They validate, compile and simulate (the ideal reference is sampled with 20 000 shots). Statevector views, the trace and the debugger need a single statevector, so they explain that they do not apply.
QASMBench (PNNL)
QASMBench is a suite of OpenQASM circuits collected by Pacific Northwest National Laboratory, grouped into small (2–5 qubits), medium (6–15) and large (16+) programs taken from real applications: adders, QFT, Grover, VQE, QAOA, error-correction codes, chemistry. QubitLab's Examples gallery follows the small and medium groups with 15 hand-written circuits in the same spirit, each verified against the API. For the full suite, download the original repository and paste any .qasm file into the code panel; OpenQASM 2 is converted to 3 in one click.
Running a benchmark across targets
- Compare levels: the same circuit transpiled at optimisation 0–3 for a fake backend, with depth and SWAP counts.
- Simulate: ideal plus up to 8 noisy fake backends in one job, with TVD and Hellinger fidelity per target.
- Hardware: up to 5 real IBM machines side by side (see the hardware chapter).
- Debug with a noise model: fidelity gate by gate for the same benchmark on different fake devices.
- MQT Bench website Browse and download pre-generated benchmarks at every level; the original source of the generator QubitLab bundles.
- munich-quantum-toolkit/bench on GitHub Source code, documentation and the paper to cite (Quetschlich, Burgholzer, Wille, 2023).
- QASMBench on GitHub (pnnl/QASMBench) The full suite of small, medium and large OpenQASM circuits with the accompanying paper.
- IBM Quantum Platform Create the free account and instance used for real-hardware runs.