Decoding SpeedΒΆ

[1]:
# This cell is tagged `parameters` and will be override by `papermill`
decoder: str = "mwpm"
json_filename: str = "speed-rsc-mwpm.json"  # where to save the result, must be provided

rounds: int = 200
kwargs = dict(
    min_time = 60,
    min_shots = 50,
    min_init_time = 0.1,
    min_init_shots = 1,
)
max_per_round_time: float = 0.1  # if each round takes more than 100ms to decode, then do not run the next `d`, since it is not meaningful anymore
[2]:
# Parameters
decoder = "bpuf"
json_filename = "speed-rsc-bpuf.json"

[3]:
%load_ext autoreload
%autoreload 2
[4]:
# import psutil
# psutil.Process().nice(0)# if on *ux
# psutil.Process().nice(psutil.IDLE_PRIORITY_CLASS)# if on win
[5]:
from qec_lego_bench.cli.decoding_speed import decoding_speed, DecodingSpeedResult
from qec_lego_bench.hpc.job_store import Job, JobStore
from qec_lego_bench.hpc.plotter.logical_error_rate_plotter import *
[6]:
def generate_d_vec(ratio: float = 1.18, max_d: int = 51) -> list[int]:
    d = 3
    d_vec = [d]
    while d <= max_d:
        int_d = 2 * round(d / 2) + 1
        if int_d != d_vec[-1]:
            d_vec.append(int_d)
        d *= ratio
    return d_vec
d_vec = generate_d_vec()
print("d_vec:", d_vec)
p_vec = [0.00001, 0.0001, 0.001, 0.003, 0.01]

def evaluation_function(d: int, p: float, rounds: int, verbose: bool = True) -> DecodingSpeedResult:
    if verbose:
        print(f"d: {d}, p: {p}")
    return decoding_speed(decoder=decoder, code=f"rsc(d={d},p={p})", **kwargs, no_print=not verbose)

jobs = [Job(d=d, p=p, rounds=rounds) for p in p_vec for d in d_vec[:1]]  # only add the smallest d and dynamically add others
# evaluation_function(min(d_vec), min(p_vec), rounds)
d_vec: [3, 5, 7, 9, 11, 13, 15, 17, 19, 23, 27, 31, 37, 43, 51]





Evaluating initialization of 64 shots, elapsed: 0.172413s, average: 2.694e-03s per shot
initialization time: 2.694e-03s













Evaluating decoding of 3585698 shots, elapsed: 65.603199s, average: 1.830e-05s per shot
decoding time: 1.830e-05s
[6]:
DecodingSpeedResult(elapsed=65.60319942576461, shots=3585698)

Define the plot functionality

[7]:
from decoding_time_plotter import DecodingTimePlotter

plotter = DecodingTimePlotter(p_vec=p_vec, d_vec=d_vec, rounds=rounds, max_per_round_time=max_per_round_time)
../../../_images/notebooks_evaluation_speed_decoding_speed_bpuf_8_0.png
<Figure size 640x480 with 0 Axes>
[ ]:
job_store = JobStore(evaluation_function, jobs, result_type=DecodingSpeedResult, filename=json_filename)
job_store.execute(loop_callback=plotter)
d: 23, p: 1e-05
Evaluating initialization of 1 shots, elapsed: 3.361548s, average: 3.362e+00s per shot
initialization time: 3.362e+00s

Evaluating initialization of 1 shots, elapsed: 0.742562s, average: 7.426e-01s per shot
initialization time: 7.426e-01s


Evaluating decoding of 100 shots, elapsed: 107.877588s, average: 1.079e+00s per shot
decoding time: 1.079e+00s
d: 15, p: 0.0001

Evaluating initialization of 1 shots, elapsed: 0.743064s, average: 7.431e-01s per shot
initialization time: 7.431e-01s

Evaluating decoding of 50 shots, elapsed: 215.223921s, average: 4.304e+00s per shot
decoding time: 4.304e+00s
d: 13, p: 0.01

Evaluating initialization of 1 shots, elapsed: 40.605314s, average: 4.061e+01s per shot
initialization time: 4.061e+01s

Evaluating decoding of 50 shots, elapsed: 2006.447966s, average: 4.013e+01s per shot
decoding time: 4.013e+01s
d: 17, p: 1e-05

Evaluating initialization of 1 shots, elapsed: 1.272002s, average: 1.272e+00s per shot
initialization time: 1.272e+00s

Evaluating decoding of 50 shots, elapsed: 245.466330s, average: 4.909e+00s per shot
decoding time: 4.909e+00s
d: 17, p: 0.0001

Evaluating initialization of 1 shots, elapsed: 1.140445s, average: 1.140e+00s per shot
initialization time: 1.140e+00s

Evaluating decoding of 50 shots, elapsed: 1229.138986s, average: 2.458e+01s per shot
decoding time: 2.458e+01s
d: 19, p: 1e-05

Evaluating initialization of 1 shots, elapsed: 1.687424s, average: 1.687e+00s per shot
initialization time: 1.687e+00s

Evaluating decoding of 50 shots, elapsed: 546.008690s, average: 1.092e+01s per shot
decoding time: 1.092e+01s
d: 23, p: 1e-05

Evaluating initialization of 1 shots, elapsed: 3.017487s, average: 3.017e+00s per shot
initialization time: 3.017e+00s

Evaluating decoding of 50 shots, elapsed: 1.197973s, average: 2.396e-02s per shot
[ ]: