Performance¶
Measured on an Apple M4 Pro (12 cores), rotated surface code memory, SI1000(0.002) noise, d rounds, detection events in shots per second.
Pauli noise¶
Pauli noise is sampled on Pauli frames, on one thread, as fast as Stim’s own detector sampler (1M shots, Maestro 0.3.14):
d=3 |
d=5 |
d=7 |
d=9 |
|
|---|---|---|---|---|
Maestro, |
14.8M |
2.64M |
530k |
240k |
Stim, |
14.9M |
2.55M |
510k |
230k |
Under sinter.collect decoding takes most of the time. The [[72,12,6]]
bivariate bicycle code (144 qubits, SI1000(0.003), 3 rounds, in
example_deltakit_codes.py) samples at about
46 µs/shot.
T1 decay¶
T1 decay is not a Pauli channel, so the stabilizer runs it shot by shot: about
19,000 shots/s at d=3 and 2,100 at d=5 on one thread. One sampler spreads its
shots over every core, about 25,000 and 11,000 shots/s here. max_simulators=
caps the threads.
Coherent noise¶
Coherent noise runs on an MPS: about 57 ms a shot per core on the rotated d=3
code at χ=32. One sampler again uses every core, about 6 ms a shot here, so a
single simulate or compile_sampler call is as fast as sinter.collect over
all the cores.
The cost grows quickly with the bond dimension a code needs, and only the rotated d=3 code is practical: see Bond dimension.