Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ECC decoder pipeline #209

Closed
wants to merge 22 commits into from
Closed

Conversation

Benzillaist
Copy link
Contributor

The evaluate_decoder method should be the only public-facing method as the rest should only need to be called by evaluate_classical_decoder.

  • Created 2 versions of evaluate_classical_decoder. One of them should work, and it takes in a decoder object. The type of the object determines which decoder is called later on in the function. The decoding is done with a Pauli frame simulation based upon code written by Anthony for evaluating the belief propagation decoder.
  • This is based on the CSS struct I have also included in this PR
  • Still needs to be tested, this is mainly just to get the code in the proper place

Benzillaist and others added 15 commits October 31, 2023 19:40
Added multiple methods:
code_generation:
- Methods for creating Bicycle and Unicycle codes
- Methods for assembling CSS codes
- Utility methods for working with codes

code_evaluation:
- Methods for evaluating codes with a belief propagation decoder
Added the following dependencies:
CairoMakie
LDPCDecoders
SparseArrays
Statistics
During discussion with Anthony, he mentioned that he would add his code himself later on
- Fixed naming and organization issued identified.
- Limited exports
- Added additional methods to easily create unicycle and bicycle codes
- Fixed issues with typing in bicycle gen methods
- Fixed issue with incorrectly copied methods for unicycle generation
- Fixed imports for Nemo methods
Fixed bugs preventing the generation of Bicycle and Unicycle codes
Remove LDPCDecoders import

Co-authored-by: Stefan Krastanov <[email protected]>
Remove LDPCDecoders import

Co-authored-by: Stefan Krastanov <[email protected]>
Updated use case description

Co-authored-by: Stefan Krastanov <[email protected]>
Remove unused import

Co-authored-by: Stefan Krastanov <[email protected]>
Update use case of Bicycle matrix

Co-authored-by: Stefan Krastanov <[email protected]>
Updated CSS struct to use Hx and Hz instead of just the full tableau form.

Updated CSS methods to work with the new struct form
Instead of adding the widths of the two CSS sub-matrices, instead adds the heights
Added decoder pipeline, still needs to be tested as this is just an initial commit to build off of
Copy link
Contributor

Benchmark Result

Judge result

Benchmark Report for /home/runner/work/QuantumClifford.jl/QuantumClifford.jl

Job Properties

  • Time of benchmarks:
  • Target: 30 Dec 2023 - 06:11
  • Baseline: 30 Dec 2023 - 06:15
  • Package commits:
  • Target: 330ea0
  • Baseline: c8d531
  • Julia commits:
  • Target: 2b2f53
  • Baseline: 2b2f53
  • Julia command flags:
  • Target: None
  • Baseline: None
  • Environment variables:
  • Target: None
  • Baseline: None

Results

A ratio greater than 1.0 denotes a possible regression (marked with ❌), while a ratio less
than 1.0 denotes a possible improvement (marked with ✅). Only significant results - results
that indicate possible regressions or improvements - are shown below (thus, an empty table means that all
benchmark results remained invariant between builds).

ID time ratio memory ratio
["circuitsim", "mctrajectories", "q101_r1"] 1.10 (5%) ❌ 1.00 (1%)
["circuitsim", "pftrajectories", "q1001_r1"] 1.09 (5%) ❌ 1.00 (1%)
["circuitsim", "pftrajectories", "q1001_r100"] 1.14 (5%) ❌ 1.00 (1%)
["circuitsim", "pftrajectories", "q101_r1"] 1.09 (5%) ❌ 1.00 (1%)
["clifford", "dense", "cnot250_on_diag500_destab"] 0.88 (5%) ✅ 1.00 (1%)
["pauli", "mul", "20000000"] 0.94 (5%) ✅ 1.00 (1%)
["stabilizer", "canon", "md_cano500"] 0.95 (5%) ✅ 1.00 (1%)
["stabilizer", "tensor", "diag_pow5_20"] 1.61 (5%) ❌ 1.00 (1%)
["stabilizer", "tensor", "pow5_20"] 1.08 (5%) ❌ 1.00 (1%)
["stabilizer", "trace", "destabilizer"] 1.07 (5%) ❌ 1.00 (1%)

Benchmark Group List

Here's a list of all the benchmark groups executed by this job:

  • ["circuitsim", "mctrajectories"]
  • ["circuitsim", "mctrajectories_sumtype"]
  • ["circuitsim", "mctrajectories_union"]
  • ["circuitsim", "pftrajectories"]
  • ["circuitsim", "pftrajectories_sumtype"]
  • ["circuitsim", "pftrajectories_union"]
  • ["clifford", "dense"]
  • ["clifford", "symbolic"]
  • ["pauli", "mul"]
  • ["stabilizer", "canon"]
  • ["stabilizer", "project"]
  • ["stabilizer", "tensor"]
  • ["stabilizer", "trace"]

Julia versioninfo

Target

Julia Version 1.11.0-DEV.1168
Commit 2b2f5344138 (2023-12-29 23:37 UTC)
Build Info:
 Official https://julialang.org/ release
Platform Info:
 OS: Linux (x86_64-linux-gnu)
 Ubuntu 22.04.3 LTS
 uname: Linux 6.2.0-1018-azure #18~22.04.1-Ubuntu SMP Tue Nov 21 19:25:02 UTC 2023 x86_64 x86_64
 CPU: AMD EPYC 7763 64-Core Processor: 
 speed user nice sys idle irq
 #1 2445 MHz 852 s 0 s 111 s 4780 s 0 s
 #2 2445 MHz 1074 s 0 s 96 s 4541 s 0 s
 #3 3256 MHz 1495 s 0 s 103 s 4052 s 0 s
 #4 3243 MHz 1613 s 0 s 124 s 3905 s 0 s
 Memory: 15.60690689086914 GB (13828.3984375 MB free)
 Uptime: 588.61 sec
 Load Avg: 1.07 1.0 0.58
 WORD_SIZE: 64
 LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)

Baseline

Julia Version 1.11.0-DEV.1168
Commit 2b2f5344138 (2023-12-29 23:37 UTC)
Build Info:
 Official https://julialang.org/ release
Platform Info:
 OS: Linux (x86_64-linux-gnu)
 Ubuntu 22.04.3 LTS
 uname: Linux 6.2.0-1018-azure #18~22.04.1-Ubuntu SMP Tue Nov 21 19:25:02 UTC 2023 x86_64 x86_64
 CPU: AMD EPYC 7763 64-Core Processor: 
 speed user nice sys idle irq
 #1 3259 MHz 1747 s 0 s 131 s 6712 s 0 s
 #2 3243 MHz 2032 s 0 s 113 s 6413 s 0 s
 #3 2445 MHz 1861 s 0 s 126 s 6510 s 0 s
 #4 2445 MHz 2288 s 0 s 148 s 6053 s 0 s
 Memory: 15.60690689086914 GB (13726.72265625 MB free)
 Uptime: 873.97 sec
 Load Avg: 1.0 1.0 0.71
 WORD_SIZE: 64
 LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)

Target result

Benchmark Report for /home/runner/work/QuantumClifford.jl/QuantumClifford.jl

Job Properties

  • Time of benchmark: 30 Dec 2023 - 6:11
  • Package commit: 330ea0
  • Julia commit: 2b2f53
  • Julia command flags: None
  • Environment variables: None

Results

Below is a table of this job's results, obtained by running the benchmarks.
The values listed in the ID column have the structure [parent_group, child_group, ..., key], and can be used to
index into the BaseBenchmarks suite to retrieve the corresponding benchmarks.
The percentages accompanying time and memory values in the below table are noise tolerances. The "true"
time/memory value for a given benchmark is expected to fall within this percentage of the reported value.
An empty cell means that the value was zero.

ID time GC time memory allocations
["circuitsim", "mctrajectories", "q1001_r1"] 16.443 ms (5%) 500.77 KiB (1%) 18019
["circuitsim", "mctrajectories", "q101_r1"] 191.748 μs (5%) 50.53 KiB (1%) 1818
["circuitsim", "mctrajectories_sumtype", "q1001_r1"] 14.290 ms (5%) 496 bytes (1%) 9
["circuitsim", "mctrajectories_sumtype", "q101_r1"] 125.975 μs (5%) 256 bytes (1%) 8
["circuitsim", "mctrajectories_union", "q1001_r1"] 14.003 ms (5%) 496 bytes (1%) 9
["circuitsim", "mctrajectories_union", "q101_r1"] 124.933 μs (5%) 256 bytes (1%) 8
["circuitsim", "pftrajectories", "q1001_r1"] 65.172 μs (5%) 93.80 KiB (1%) 2001
["circuitsim", "pftrajectories", "q1001_r100"] 190.876 μs (5%) 93.80 KiB (1%) 2001
["circuitsim", "pftrajectories", "q1001_r10000"] 1.088 ms (5%) 93.80 KiB (1%) 2001
["circuitsim", "pftrajectories", "q101_r1"] 6.562 μs (5%) 9.42 KiB (1%) 201
["circuitsim", "pftrajectories_sumtype", "q1001_r1"] 36.188 μs (5%) 48 bytes (1%) 1
["circuitsim", "pftrajectories_sumtype", "q1001_r100"] 143.227 μs (5%) 48 bytes (1%) 1
["circuitsim", "pftrajectories_sumtype", "q1001_r10000"] 1.023 ms (5%) 48 bytes (1%) 1
["circuitsim", "pftrajectories_sumtype", "q1001_r10000_fastrow"] 5.815 ms (5%) 48 bytes (1%) 1
["circuitsim", "pftrajectories_sumtype", "q101_r1"] 3.706 μs (5%) 48 bytes (1%) 1
["circuitsim", "pftrajectories_union", "q1001_r1"] 22.922 μs (5%) 96 bytes (1%) 2
["circuitsim", "pftrajectories_union", "q1001_r100"] 128.770 μs (5%) 96 bytes (1%) 2
["circuitsim", "pftrajectories_union", "q1001_r10000"] 1.000 ms (5%) 96 bytes (1%) 2
["circuitsim", "pftrajectories_union", "q101_r1"] 2.374 μs (5%) 96 bytes (1%) 2
["clifford", "dense", "cnot250_on_dense500_destab"] 11.433 ms (5%) 512 bytes (1%) 8
["clifford", "dense", "cnot250_on_dense500_stab"] 5.785 ms (5%) 512 bytes (1%) 8
["clifford", "dense", "cnot250_on_diag500_destab"] 1.125 ms (5%) 512 bytes (1%) 8
["clifford", "dense", "cnot250_on_diag500_stab"] 638.352 μs (5%) 512 bytes (1%) 8
["clifford", "dense", "cnot_on_dense500_destab"] 48.320 μs (5%) 368 bytes (1%) 10
["clifford", "dense", "cnot_on_dense500_stab"] 23.945 μs (5%) 368 bytes (1%) 10
["clifford", "dense", "cnot_on_diag500_destab"] 26.741 μs (5%) 368 bytes (1%) 10
["clifford", "dense", "cnot_on_diag500_stab"] 13.706 μs (5%) 368 bytes (1%) 10
["clifford", "dense", "dense500_on_dense500_destab"] 11.493 ms (5%) 512 bytes (1%) 8
["clifford", "dense", "dense500_on_dense500_stab"] 5.816 ms (5%) 512 bytes (1%) 8
["clifford", "dense", "dense500_on_diag500_destab"] 1.123 ms (5%) 512 bytes (1%) 8
["clifford", "dense", "dense500_on_diag500_stab"] 638.382 μs (5%) 512 bytes (1%) 8
["clifford", "symbolic", "cnot250_on_dense500_destab"] 1.515 ms (5%)
["clifford", "symbolic", "cnot250_on_dense500_stab"] 698.434 μs (5%)
["clifford", "symbolic", "cnot250_on_diag500_destab"] 1.250 ms (5%)
["clifford", "symbolic", "cnot250_on_diag500_stab"] 588.980 μs (5%)
["clifford", "symbolic", "cnot_on_dense500_destab"] 5.059 μs (5%)
["clifford", "symbolic", "cnot_on_dense500_stab"] 2.394 μs (5%)
["clifford", "symbolic", "cnot_on_diag500_destab"] 5.039 μs (5%)
["clifford", "symbolic", "cnot_on_diag500_stab"] 2.404 μs (5%)
["pauli", "mul", "100"] 14.225 ns (5%)
["pauli", "mul", "1000"] 18.128 ns (5%)
["pauli", "mul", "100000"] 706.431 ns (5%)
["pauli", "mul", "20000000"] 184.866 μs (5%)
["stabilizer", "canon", "cano500"] 3.061 ms (5%)
["stabilizer", "canon", "diag_cano500"] 766.901 μs (5%)
["stabilizer", "canon", "diag_gott500"] 4.215 ms (5%) 5.19 MiB (1%) 34521
["stabilizer", "canon", "diag_rref500"] 532.365 μs (5%)
["stabilizer", "canon", "gott500"] 6.661 ms (5%) 5.19 MiB (1%) 34531
["stabilizer", "canon", "md_cano500"] 1.525 ms (5%)
["stabilizer", "canon", "md_rref500"] 1.554 ms (5%)
["stabilizer", "canon", "rref500"] 3.116 ms (5%)
["stabilizer", "project", "destabilizer"] 13.806 μs (5%) 288 bytes (1%) 5
["stabilizer", "project", "stabilizer"] 6.182 μs (5%) 80 bytes (1%) 2
["stabilizer", "tensor", "diag_pow5_20"] 1.457 ms (5%) 23.97 MiB (1%) 34
["stabilizer", "tensor", "pow5_20"] 2.751 μs (5%) 6.44 KiB (1%) 31
["stabilizer", "trace", "destabilizer"] 33.502 μs (5%) 80 bytes (1%) 2
["stabilizer", "trace", "stabilizer"] 23.735 μs (5%) 112 bytes (1%) 3

Benchmark Group List

Here's a list of all the benchmark groups executed by this job:

  • ["circuitsim", "mctrajectories"]
  • ["circuitsim", "mctrajectories_sumtype"]
  • ["circuitsim", "mctrajectories_union"]
  • ["circuitsim", "pftrajectories"]
  • ["circuitsim", "pftrajectories_sumtype"]
  • ["circuitsim", "pftrajectories_union"]
  • ["clifford", "dense"]
  • ["clifford", "symbolic"]
  • ["pauli", "mul"]
  • ["stabilizer", "canon"]
  • ["stabilizer", "project"]
  • ["stabilizer", "tensor"]
  • ["stabilizer", "trace"]

Julia versioninfo

Julia Version 1.11.0-DEV.1168
Commit 2b2f5344138 (2023-12-29 23:37 UTC)
Build Info:
 Official https://julialang.org/ release
Platform Info:
 OS: Linux (x86_64-linux-gnu)
 Ubuntu 22.04.3 LTS
 uname: Linux 6.2.0-1018-azure #18~22.04.1-Ubuntu SMP Tue Nov 21 19:25:02 UTC 2023 x86_64 x86_64
 CPU: AMD EPYC 7763 64-Core Processor: 
 speed user nice sys idle irq
 #1 2445 MHz 852 s 0 s 111 s 4780 s 0 s
 #2 2445 MHz 1074 s 0 s 96 s 4541 s 0 s
 #3 3256 MHz 1495 s 0 s 103 s 4052 s 0 s
 #4 3243 MHz 1613 s 0 s 124 s 3905 s 0 s
 Memory: 15.60690689086914 GB (13828.3984375 MB free)
 Uptime: 588.61 sec
 Load Avg: 1.07 1.0 0.58
 WORD_SIZE: 64
 LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)

Baseline result

Benchmark Report for /home/runner/work/QuantumClifford.jl/QuantumClifford.jl

Job Properties

  • Time of benchmark: 30 Dec 2023 - 6:15
  • Package commit: c8d531
  • Julia commit: 2b2f53
  • Julia command flags: None
  • Environment variables: None

Results

Below is a table of this job's results, obtained by running the benchmarks.
The values listed in the ID column have the structure [parent_group, child_group, ..., key], and can be used to
index into the BaseBenchmarks suite to retrieve the corresponding benchmarks.
The percentages accompanying time and memory values in the below table are noise tolerances. The "true"
time/memory value for a given benchmark is expected to fall within this percentage of the reported value.
An empty cell means that the value was zero.

ID time GC time memory allocations
["circuitsim", "mctrajectories", "q1001_r1"] 16.284 ms (5%) 500.77 KiB (1%) 18019
["circuitsim", "mctrajectories", "q101_r1"] 174.316 μs (5%) 50.53 KiB (1%) 1818
["circuitsim", "mctrajectories_sumtype", "q1001_r1"] 15.009 ms (5%) 496 bytes (1%) 9
["circuitsim", "mctrajectories_sumtype", "q101_r1"] 125.855 μs (5%) 256 bytes (1%) 8
["circuitsim", "mctrajectories_union", "q1001_r1"] 14.704 ms (5%) 496 bytes (1%) 9
["circuitsim", "mctrajectories_union", "q101_r1"] 124.853 μs (5%) 256 bytes (1%) 8
["circuitsim", "pftrajectories", "q1001_r1"] 59.521 μs (5%) 93.80 KiB (1%) 2001
["circuitsim", "pftrajectories", "q1001_r100"] 166.842 μs (5%) 93.80 KiB (1%) 2001
["circuitsim", "pftrajectories", "q1001_r10000"] 1.045 ms (5%) 93.80 KiB (1%) 2001
["circuitsim", "pftrajectories", "q101_r1"] 6.011 μs (5%) 9.42 KiB (1%) 201
["circuitsim", "pftrajectories_sumtype", "q1001_r1"] 35.896 μs (5%) 48 bytes (1%) 1
["circuitsim", "pftrajectories_sumtype", "q1001_r100"] 142.245 μs (5%) 48 bytes (1%) 1
["circuitsim", "pftrajectories_sumtype", "q1001_r10000"] 1.020 ms (5%) 48 bytes (1%) 1
["circuitsim", "pftrajectories_sumtype", "q1001_r10000_fastrow"] 5.823 ms (5%) 48 bytes (1%) 1
["circuitsim", "pftrajectories_sumtype", "q101_r1"] 3.676 μs (5%) 48 bytes (1%) 1
["circuitsim", "pftrajectories_union", "q1001_r1"] 23.523 μs (5%) 96 bytes (1%) 2
["circuitsim", "pftrajectories_union", "q1001_r100"] 129.362 μs (5%) 96 bytes (1%) 2
["circuitsim", "pftrajectories_union", "q1001_r10000"] 1.003 ms (5%) 96 bytes (1%) 2
["circuitsim", "pftrajectories_union", "q101_r1"] 2.434 μs (5%) 96 bytes (1%) 2
["clifford", "dense", "cnot250_on_dense500_destab"] 11.433 ms (5%) 512 bytes (1%) 8
["clifford", "dense", "cnot250_on_dense500_stab"] 5.766 ms (5%) 512 bytes (1%) 8
["clifford", "dense", "cnot250_on_diag500_destab"] 1.277 ms (5%) 512 bytes (1%) 8
["clifford", "dense", "cnot250_on_diag500_stab"] 638.621 μs (5%) 512 bytes (1%) 8
["clifford", "dense", "cnot_on_dense500_destab"] 48.220 μs (5%) 368 bytes (1%) 10
["clifford", "dense", "cnot_on_dense500_stab"] 23.354 μs (5%) 368 bytes (1%) 10
["clifford", "dense", "cnot_on_diag500_destab"] 26.349 μs (5%) 368 bytes (1%) 10
["clifford", "dense", "cnot_on_diag500_stab"] 13.375 μs (5%) 368 bytes (1%) 10
["clifford", "dense", "dense500_on_dense500_destab"] 11.477 ms (5%) 512 bytes (1%) 8
["clifford", "dense", "dense500_on_dense500_stab"] 5.778 ms (5%) 512 bytes (1%) 8
["clifford", "dense", "dense500_on_diag500_destab"] 1.123 ms (5%) 512 bytes (1%) 8
["clifford", "dense", "dense500_on_diag500_stab"] 638.723 μs (5%) 512 bytes (1%) 8
["clifford", "symbolic", "cnot250_on_dense500_destab"] 1.523 ms (5%)
["clifford", "symbolic", "cnot250_on_dense500_stab"] 691.531 μs (5%)
["clifford", "symbolic", "cnot250_on_diag500_destab"] 1.267 ms (5%)
["clifford", "symbolic", "cnot250_on_diag500_stab"] 579.751 μs (5%)
["clifford", "symbolic", "cnot_on_dense500_destab"] 5.099 μs (5%)
["clifford", "symbolic", "cnot_on_dense500_stab"] 2.364 μs (5%)
["clifford", "symbolic", "cnot_on_diag500_destab"] 5.049 μs (5%)
["clifford", "symbolic", "cnot_on_diag500_stab"] 2.374 μs (5%)
["pauli", "mul", "100"] 14.276 ns (5%)
["pauli", "mul", "1000"] 18.179 ns (5%)
["pauli", "mul", "100000"] 694.584 ns (5%)
["pauli", "mul", "20000000"] 197.539 μs (5%)
["stabilizer", "canon", "cano500"] 3.117 ms (5%)
["stabilizer", "canon", "diag_cano500"] 766.922 μs (5%)
["stabilizer", "canon", "diag_gott500"] 4.264 ms (5%) 5.19 MiB (1%) 34521
["stabilizer", "canon", "diag_rref500"] 540.539 μs (5%)
["stabilizer", "canon", "gott500"] 6.572 ms (5%) 5.19 MiB (1%) 34531
["stabilizer", "canon", "md_cano500"] 1.612 ms (5%)
["stabilizer", "canon", "md_rref500"] 1.602 ms (5%)
["stabilizer", "canon", "rref500"] 3.087 ms (5%)
["stabilizer", "project", "destabilizer"] 13.756 μs (5%) 288 bytes (1%) 5
["stabilizer", "project", "stabilizer"] 6.101 μs (5%) 80 bytes (1%) 2
["stabilizer", "tensor", "diag_pow5_20"] 903.227 μs (5%) 23.97 MiB (1%) 34
["stabilizer", "tensor", "pow5_20"] 2.554 μs (5%) 6.44 KiB (1%) 31
["stabilizer", "trace", "destabilizer"] 31.188 μs (5%) 80 bytes (1%) 2
["stabilizer", "trace", "stabilizer"] 23.614 μs (5%) 112 bytes (1%) 3

Benchmark Group List

Here's a list of all the benchmark groups executed by this job:

  • ["circuitsim", "mctrajectories"]
  • ["circuitsim", "mctrajectories_sumtype"]
  • ["circuitsim", "mctrajectories_union"]
  • ["circuitsim", "pftrajectories"]
  • ["circuitsim", "pftrajectories_sumtype"]
  • ["circuitsim", "pftrajectories_union"]
  • ["clifford", "dense"]
  • ["clifford", "symbolic"]
  • ["pauli", "mul"]
  • ["stabilizer", "canon"]
  • ["stabilizer", "project"]
  • ["stabilizer", "tensor"]
  • ["stabilizer", "trace"]

Julia versioninfo

Julia Version 1.11.0-DEV.1168
Commit 2b2f5344138 (2023-12-29 23:37 UTC)
Build Info:
 Official https://julialang.org/ release
Platform Info:
 OS: Linux (x86_64-linux-gnu)
 Ubuntu 22.04.3 LTS
 uname: Linux 6.2.0-1018-azure #18~22.04.1-Ubuntu SMP Tue Nov 21 19:25:02 UTC 2023 x86_64 x86_64
 CPU: AMD EPYC 7763 64-Core Processor: 
 speed user nice sys idle irq
 #1 3259 MHz 1747 s 0 s 131 s 6712 s 0 s
 #2 3243 MHz 2032 s 0 s 113 s 6413 s 0 s
 #3 2445 MHz 1861 s 0 s 126 s 6510 s 0 s
 #4 2445 MHz 2288 s 0 s 148 s 6053 s 0 s
 Memory: 15.60690689086914 GB (13726.72265625 MB free)
 Uptime: 873.97 sec
 Load Avg: 1.0 1.0 0.71
 WORD_SIZE: 64
 LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)

Runtime information

Runtime Info
BLAS #threads 2
BLAS.vendor() lbt
Sys.CPU_THREADS 4

lscpu output:

Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Address sizes: 48 bits physical, 48 bits virtual
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Vendor ID: AuthenticAMD
Model name: AMD EPYC 7763 64-Core Processor
CPU family: 25
Model: 1
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
Stepping: 1
BogoMIPS: 4890.85
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl tsc_reliable nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext invpcid_single vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves clzero xsaveerptr rdpru arat npt nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold v_vmsave_vmload umip vaes vpclmulqdq rdpid fsrm
Virtualization: AMD-V
Hypervisor vendor: Microsoft
Virtualization type: full
L1d cache: 64 KiB (2 instances)
L1i cache: 64 KiB (2 instances)
L2 cache: 1 MiB (2 instances)
L3 cache: 32 MiB (1 instance)
NUMA node(s): 1
NUMA node0 CPU(s): 0-3
Vulnerability Gather data sampling: Not affected
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Mmio stale data: Not affected
Vulnerability Retbleed: Not affected
Vulnerability Spec rstack overflow: Mitigation; safe RET, no microcode
Vulnerability Spec store bypass: Vulnerable
Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2: Mitigation; Retpolines, STIBP disabled, RSB filling, PBRSB-eIBRS Not affected
Vulnerability Srbds: Not affected
Vulnerability Tsx async abort: Not affected

Cpu Property Value
Brand AMD EPYC 7763 64-Core Processor
Vendor :AMD
Architecture :Unknown
Model Family: 0xaf, Model: 0x01, Stepping: 0x01, Type: 0x00
Cores 16 physical cores, 16 logical cores (on executing CPU)
No Hyperthreading hardware capability detected
Clock Frequencies Not supported by CPU
Data Cache Level 1:3 : (32, 512, 32768) kbytes
64 byte cache line size
Address Size 48 bits virtual, 48 bits physical
SIMD 256 bit = 32 byte max. SIMD vector size
Time Stamp Counter TSC is accessible via rdtsc
TSC runs at constant rate (invariant from clock frequency)
Perf. Monitoring Performance Monitoring Counters (PMC) are not supported
Hypervisor Yes, Microsoft

Copy link
Member

@Krastanov Krastanov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is great, thank you for taking care of it! I left in a bunch of comments, mostly stylistic, nothing significant.

We need to add tests to this functionality. Some possible options are:

  • Create a few small CSS codes and verify that the parity_check tableaux look fine. There is a QuantumClifford.stab_looks_good private function that can be used for such tests.
  • Run the decoder on some small codes with known results, and explicitly check what they say.
  • Run the decoder pipeline for a particular noise level and do a statistical test of the result, e.g. "some reasonably small bound < calculated logical error rate < some reasonably large bound"

.vscode/settings.json Outdated Show resolved Hide resolved
src/ecc/codes/css.jl Outdated Show resolved Hide resolved
src/ecc/codes/css.jl Show resolved Hide resolved
src/ecc/codes/css.jl Outdated Show resolved Hide resolved
src/ecc/codes/css.jl Show resolved Hide resolved
src/ecc/codes/simple_sparse_codes.jl Outdated Show resolved Hide resolved
src/ecc/codes/simple_sparse_codes.jl Outdated Show resolved Hide resolved
src/ecc/codes/simple_sparse_codes.jl Outdated Show resolved Hide resolved
src/ecc/codes/simple_sparse_codes.jl Outdated Show resolved Hide resolved
@@ -0,0 +1,228 @@
abstract type AbstractSyndromeDecoder end
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have not reviewed this file yet.

@Krastanov
Copy link
Member

To fix the test failures you need to add ... = 1 to the compact sections for the two new dependencies you have introduced.

…ruct

-Added tests for each of the methods used in creating bicycle or unicycle ECCs.
- Fixed the final return step of some CSS methods, specifically the constructor and boolean_tableau
- Changed name of `code_m` to `code_s`
@Benzillaist
Copy link
Contributor Author

Benzillaist commented Jan 6, 2024

This is great, thank you for taking care of it! I left in a bunch of comments, mostly stylistic, nothing significant.

We need to add tests to this functionality. Some possible options are:

  • Create a few small CSS codes and verify that the parity_check tableaux look fine. There is a QuantumClifford.stab_looks_good private function that can be used for such tests.
  • Run the decoder on some small codes with known results, and explicitly check what they say.
  • Run the decoder pipeline for a particular noise level and do a statistical test of the result, e.g. "some reasonably small bound < calculated logical error rate < some reasonably large bound"

I ran the stab_looks_good method for some small codes, and while the Bicycle code worked, the Unicycle code did not. What are some reasons that the stabilizer would not look good?

I have yet to test these codes with the pipeline, but I will as soon as I'm happy with the Unicycle code

Additionally, you mentioned adding something to a bibtex file, and it's probably super obvious, but could you point out where it is located?

Thank you for the reviews!

@Krastanov
Copy link
Member

I ran the stab_looks_good method for some small codes, and while the Bicycle code worked, the Unicycle code did not. What are some reasons that the stabilizer would not look good?

Check the content of the function -- it is a few relatively simple lines of checking whether rows commute, etc.

I have yet to test these codes with the pipeline, but I will as soon as I'm happy with the Unicycle code

Additionally, you mentioned adding something to a bibtex file, and it's probably super obvious, but could you point out where it is located?

It is in docs/src

Thank you for the reviews!

Thank you for contributing this!

- remove unrelated files and update .gitignore
-  add an auto-generated API documentation for the ECC submodule
-  remove unused `boolean_tableau`
- remove docstrings for already documented functions
- remove a redundant function definition (code_k is already defined in terms of code_n and code_s)
-  minor stilystic cleanup in simple_sparse_codes
- add some rudimentary CSS tests
@Krastanov
Copy link
Member

most of the code here was used in #212 and will be merged there

It would be great if the Bicycle and Unicycle codes can be submitted as a separate new PR after #212

@Krastanov Krastanov closed this Jan 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants