Measure
Threads
Postselection
Trajectory sharing (Tsim)
View
Surface code d=7, r=7118 qubits · Clifford
Distillation d=585 qubits · 5 T gates · 5 rotations
Cultivation d=542 qubits · 91 T gates
Cultivation d=5, end-to-end463 qubits · 53 T gates
Cultivation d=7 (SymFT)80 qubits · 127 T gates

Run details
Machine
One AMD Ryzen 9 9900X (12 cores, 24 threads, 64 GB) running Linux; every measurement runs in a fresh process.
Sampling
Attempted shots per second, median of 3 timed repetitions of at least 5 s each, after compilation and one untimed warm-up call. Shots rejected by postselection count as attempted, so a rate with postselection on is a cost per attempt, not per accepted shot. Clifft samples with the batch size it calibrates during the warmup call (batch_size="tune"), as its own benchmark suite does.
Compilation
Wall time from circuit text to a sampler ready to sample, median over 3 fresh processes, with imports done before the clock starts, shown at 1 thread with postselection off. First-call JIT compilation inside sampling is not included. Clifft runs its default optimization passes plus its opt-in ActiveWidthSchedulePass (a search over operation orderings) with default settings, on every circuit, for both compilation and sampling.
Threads
Every engine gets the same budget, 1 or 10 threads: the harness caps the OpenMP and numba thread pools and passes the budget to engines that take a threads argument.
Postselection
With postselection on, every detector is postselected, except on Cultivation d=5, end-to-end, where only the injection and cultivation detectors are (the convention of Gidney et al.). SymFT can only postselect on all detectors, so it has no number there. Circuits without detectors show their postselection-off measurement in both views.
Output
Output contracts differ: Tsim returns full detector and observable arrays, bit-packed (8 detectors per byte) and counted inside the timed region; Clifft and SymFT return survivor counts.
Views
One row per circuit, one lane per simulator, on a shared log axis. Relative view puts the slowest engine in each row at 1×. Compare draws each lane from the baseline setting (open mark: 1 thread, postselection off, sharing off) to the target (filled mark) and labels it with how many times faster the target is. Hover or focus a row for details, or download the CSV.
K
The largest number of qubits held in a dense statevector at once, as each simulator reports it (Tsim: component width; Clifft: peak_active_width; SymFT: max_active_qubits). Sampling cost grows as 2K.
Versions
Tsim 1.0.0: bloqade-tsim 0.1.5 @ git 73656a2, numpy 2.4.4, numba 0.65.0, stim 1.15.0 · Clifft 0.12.0: clifft 0.12.0, numpy 2.5.4 · SymFT 0.1.1: symft 0.1.1, numpy 2.5.4
Circuits
Each circuit name links to its source on GitHub, at the commit measured. Sources: Clifft paper benchmarks; Gidney et al. cultivation circuits, as used by the Clifft paper; SymFT benchmark suite.