@@ -468,31 +468,35 @@ The full 137-row table — every shot count, plus the 73 cells that exceeded the
468468per-cell budget and were therefore * not measured* — is in
469469` official_benchmark_results.md ` .
470470
471- Findings, stated per-cell and not generalised (see
472- ` docs/REPRODUCIBILITY_CHECKLIST.md ` ):
473-
474- - ** ` qector_blossom ` matches PyMatching exactly.** At ` d = 3 ` and ` d = 5 ` both
475- returned the same number of logical failures on the same 100,000 samples —
476- 1891 and 1596. Identical to the digit, which is a checkable claim.
477- - ** PyMatching leads on throughput at every distance measured** , consistent
478- with the long-standing note elsewhere in this project that it leads on plain
479- MWPM. Not a regression, and not hidden.
480- - ** The GPU kernels are fast and above threshold.** ` qector_cuda ` reaches
481- 1.29M dec/s at ` d = 3 ` , but its LER * stops improving with distance* : 0.061 at
482- ` d = 5 ` , 0.043 at ` d = 7 ` , 0.038 at ` d = 15 ` , against PyMatching's 0.016 →
483- 0.012 → 0.0031 over the same range. A decoder whose logical error rate
484- plateaus while ` d ` grows is above threshold — scaling the code does not help
485- it. The cause is not the kernel: ` CUDABatchDecoder ` /` OpenCLBatchDecoder ` take
486- ` (check_to_qubits, n_qubits) ` and no ` edge_weights ` , so they decode
487- topology-only. ` docs/BENCHMARK_COMPETITIVE.md ` records the same effect for
488- unweighted Union-Find on CPU. Weighted UF (UF-01) exists in the Rust core and
489- is the path to closing it.
490- - CUDA and OpenCL returned identical logical-failure counts wherever both ran
491- the same cell, consistent with the bit-identity claim made elsewhere.
492-
493- ** Do not quote a GPU throughput figure without its LER.** The two GPU columns
494- above are the reason: on speed alone they look like the headline result, and on
495- accuracy they are not yet usable for scaling a surface code.
471+ Findings apply to the cells listed above and are not generalised beyond them
472+ (see ` docs/REPRODUCIBILITY_CHECKLIST.md ` ).
473+
474+ ** Accuracy parity with PyMatching.** At ` d = 3 ` and ` d = 5 ` , ` qector_blossom `
475+ and PyMatching 2 recorded identical logical-failure counts on identical sample
476+ sets — 1891 and 1596 in 100,000 shots respectively.
477+
478+ ** Throughput.** PyMatching 2 leads at every distance measured here. This is
479+ consistent with the position recorded elsewhere in this project that PyMatching
480+ leads on plain MWPM.
481+
482+ ** GPU accuracy depends on whether matching weights are supplied.**
483+ ` CUDABatchDecoder ` and ` OpenCLBatchDecoder ` accept an optional ` edge_weights `
484+ argument. Omitting it selects topology-only cluster growth, and the resulting
485+ logical error rate does not improve with code distance — 0.061 at ` d = 5 ` ,
486+ 0.043 at ` d = 7 ` , 0.038 at ` d = 15 ` — which is the signature of operation above
487+ threshold. Supplying the DEM's ` log((1-p)/p) ` weights restores distance
488+ scaling: 0.026 at ` d = 5 ` , 0.010 at ` d = 9 ` , 0.007 at ` d = 13 ` . The weighted
489+ path costs roughly 32× the throughput of the unweighted one.
490+ ` docs/BENCHMARK_COMPETITIVE.md ` records the same effect for unweighted
491+ Union-Find on CPU. See the quick-start above for the weighted construction.
492+
493+ ** Backend agreement.** CUDA and OpenCL returned identical logical-failure counts
494+ in every cell where both ran, consistent with the bit-identity property recorded
495+ elsewhere in this project.
496+
497+ GPU throughput and GPU logical error rate should be cited together. The
498+ unweighted configuration is the fastest column in the table and simultaneously
499+ the least accurate; either figure alone misrepresents it.
496500
497501Neither finding generalises beyond the cells above. Regenerate on quiesced
498502hardware, and state the noise model, before any number here is used in a claim.
0 commit comments