This commit is contained in:
parent
79fbb6da99
commit
80a1eca011
5 changed files with 0 additions and 160 deletions
|
|
@ -1,70 +0,0 @@
|
||||||
#import "@preview/fletcher:0.5.1": diagram, node, edge
|
|
||||||
#import "@preview/gentle-clues:0.9.0": example
|
|
||||||
#import "@preview/quill:0.3.0": quantum-circuit, lstick, rstick, ctrl, targ, mqgate, meter
|
|
||||||
|
|
||||||
|
|
||||||
= Background
|
|
||||||
== Quantum Computation and Quantum Circuits
|
|
||||||
A quantum computer is a device that performs calculations by using certain phenomena of quantum mechanics.
|
|
||||||
The algorithms that run on this device are specified in quantum circuits.
|
|
||||||
|
|
||||||
#example[
|
|
||||||
@example_qc shows a simple quantum circuit that implements a specific quantum algorithm.
|
|
||||||
|
|
||||||
#figure(
|
|
||||||
quantum-circuit(
|
|
||||||
lstick($|0〉$), $H$, mqgate($U$, n: 2, width: 5em, inputs: ((qubit: 0, label: $x$), (qubit: 1, label: $y$)), outputs: ((qubit: 0, label: $x$), (qubit: 1, label: $y plus.circle f(x)$))), $H$, meter(), [\ ],
|
|
||||||
lstick($|1〉$), $H$, 1, 1, 1
|
|
||||||
),
|
|
||||||
caption: [A quantum circuit implementing the Deutsch-Jozsa algorithm]
|
|
||||||
) <example_qc>
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
== Decision Diagrams
|
|
||||||
Decision diagrams in general are directed acyclical graphs, that may be used to express control flow through a series of conditions.
|
|
||||||
It consists of a set of decision nodes and terminal nodes.
|
|
||||||
The decision nodes represent an arbitrary decision based on an input value and may thus have any number of outgoing edges.
|
|
||||||
The terminal nodes represent output values and may not have outgoing edges.
|
|
||||||
|
|
||||||
A @bdd is a specific kind of decision diagram, where there are two terminal nodes (0 and 1) and each decision node has two outgoing edges, depending solely on a single bit of an input value.
|
|
||||||
@bdd[s] may be used to represent any boolean function.
|
|
||||||
|
|
||||||
#example[
|
|
||||||
Example @bdd[s] implementing boolean functions with an arity of $2$ are show in @example_bdd_xor and @example_bdd_and.
|
|
||||||
|
|
||||||
#figure(
|
|
||||||
diagram(
|
|
||||||
node-stroke: .1em,
|
|
||||||
node((0, 0), [$x_0$], radius: 1em),
|
|
||||||
edge((0, 0), (-1, 1), [0], "->"),
|
|
||||||
edge((0, 0), (1, 1), [1], "->"),
|
|
||||||
node((-1, 1), [$x_1$], radius: 1em),
|
|
||||||
node((1, 1), [$x_1$], radius: 1em),
|
|
||||||
edge((-1, 1), (-1, 2), [0], "->"),
|
|
||||||
edge((-1, 1), (1, 2), [1], "->"),
|
|
||||||
edge((1, 1), (1, 2), [0], "->"),
|
|
||||||
edge((1, 1), (-1, 2), [1], "->"),
|
|
||||||
node((-1, 2), [$0$]),
|
|
||||||
node((1, 2), [$1$]),
|
|
||||||
),
|
|
||||||
caption: [A @bdd for an XOR gate.]
|
|
||||||
) <example_bdd_xor>
|
|
||||||
|
|
||||||
#figure(
|
|
||||||
diagram(
|
|
||||||
node-stroke: .1em,
|
|
||||||
node((1, 0), [$x_0$], radius: 1em),
|
|
||||||
edge((1, 0), (0, 2), [0], "->"),
|
|
||||||
edge((1, 0), (1, 1), [1], "->"),
|
|
||||||
node((1, 1), [$x_1$], radius: 1em),
|
|
||||||
edge((1, 1), (0, 2), [0], "->"),
|
|
||||||
edge((1, 1), (1, 2), [1], "->"),
|
|
||||||
node((0, 2), [$0$]),
|
|
||||||
node((1, 2), [$1$]),
|
|
||||||
),
|
|
||||||
caption: [A @bdd for an AND gate.]
|
|
||||||
) <example_bdd_and>
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
#import "@preview/tablex:0.0.8": tablex
|
|
||||||
#import "@preview/unify:0.6.0": qty
|
|
||||||
|
|
||||||
= Benchmarks
|
|
||||||
== Google Benchmark
|
|
||||||
|
|
||||||
== MQT QCEC Bench
|
|
||||||
To generate test cases for the application schemes, @mqt Bench was used. @quetschlich2023mqtbench
|
|
||||||
|
|
||||||
#tablex(
|
|
||||||
columns: (1fr, 1fr, 1fr),
|
|
||||||
rows: (auto, auto, auto),
|
|
||||||
[*Benchmark Name*], [*Diff Run Time*], [*Proportional Run Time*],
|
|
||||||
[DJ], [$qty("1.2e-6", "s")$], [$qty("1.5e-6", "s")$],
|
|
||||||
[Grover], [$qty("1.3e-3", "s")$], [$qty("1.7e-3", "s")$]
|
|
||||||
)
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
||||||
#import "@preview/glossarium:0.4.1": *
|
|
||||||
|
|
||||||
= Comparison of @smhdt and @bach
|
|
||||||
|
|
||||||
During the course of this work, we took a look at two distinct helper-data algorithms: the S-Metric Helper Data method and the newly presented method of optimization through Boundary Adaptive Clustering with helper-data.
|
|
||||||
|
|
||||||
The S-Metric method will always outperform BACH considering the amount of helper data needed for operation.
|
|
||||||
This comes from the nature of S-Metric quickly approaching an optimal @ber for a certain bit width and not improving any further for higher amounts of metrics.
|
|
||||||
|
|
||||||
Comparing both formulas for the extracted-bits to helper-data-bits ratio for both methods we can quickly see that S-Metric will always yield more extracted bits per helper-data bit than BACH.
|
|
||||||
|
|
||||||
Considering #glspl("ber"), S-Metric does outperform BACH for smaller symbol widths.
|
|
||||||
But while the error rate for higher order quantization rises exponentially for higher-order bit quantizations, the #glspl("ber") of BACH do seem to rise rather linear than exponentially for higher-order bit quantizations.
|
|
||||||
This behaviour might be attributed to the general procedure of shaping the input values for the quantizer in such a way that they are clustered around the center of a quantizer step, which is a property that carries on for higher order bit quantizations.
|
|
||||||
|
|
||||||
|
|
||||||
We can now compare both the S-Metric Helper Data method and the newly presented method of optimization through Boundary Adaptive Clustering with Helper data based on the @ber and the amount of helper data bits, more specifically the extracted bit to helper data bit ratio $cal(r)$.
|
|
||||||
The ratios $cal(r)$ for both methods are defined as:
|
|
||||||
$
|
|
||||||
cal(r)_"SMHD" = frac(M, log_2(S))\
|
|
||||||
cal(r)_"BACH" = frac(M, N-1)
|
|
||||||
$
|
|
||||||
|
|
||||||
A good outline to compare both performances of @bach and @smhdt is if $cal(r) = 1$ for varying values of $M$.
|
|
||||||
|
|
||||||
#figure(
|
|
||||||
table(
|
|
||||||
columns: 7,
|
|
||||||
|
|
||||||
[*M*], [$1$], [$2$], [$3$], [$4$], [$5$], [$6$],
|
|
||||||
[*@ber @smhdt*], [$8 dot 10^(-6)$], [$4 dot 10^(-5)$], [$1 dot 10^(-3)$], [$0.02$], [$0.08$], [$0.15$],
|
|
||||||
[*@ber @bach*], [$0.09$], [$0.05$], [$0.05$], [$0.22$], [$0.23$], [$0.23$]
|
|
||||||
),
|
|
||||||
caption: [#glspl("ber") for @bach and @smhdt configurations that equal the bit width of the quantized symbol and the amount of helper data bits]
|
|
||||||
)
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
#import "@preview/lovelace:0.3.0": pseudocode-list
|
|
||||||
|
|
||||||
= Implementation
|
|
||||||
== Visualisation
|
|
||||||
Initially, a visualisation of the diff algorithms applied to quantum circuits was created to assess their usefulness in equivalence checking.
|
|
||||||
Additionally, this served as exercise to better understand the algorithms to be used for the implementation in @qcec.
|
|
||||||
|
|
||||||
|
|
||||||
== QCEC Application Scheme
|
|
||||||
The Myers' Algorithm was implemented as an application scheme in @qcec.
|
|
||||||
|
|
||||||
#figure(
|
|
||||||
block(
|
|
||||||
pseudocode-list[
|
|
||||||
+ do something
|
|
||||||
+ do something else
|
|
||||||
+ *while* still something to do
|
|
||||||
+ do even more
|
|
||||||
+ *if* not done yet *then*
|
|
||||||
+ wait a bit
|
|
||||||
+ resume working
|
|
||||||
+ *else*
|
|
||||||
+ go home
|
|
||||||
+ *end*
|
|
||||||
+ *end*
|
|
||||||
],
|
|
||||||
width: 100%
|
|
||||||
),
|
|
||||||
caption: [Myers' algorithm.]
|
|
||||||
) <myers_algorithm>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
== QCEC Benchmarking Tool
|
|
||||||
As @qcec doesn’t have built-in benchmarks, a benchmarking tool was developed to test different configurations on various circuit pairs.
|
|
||||||
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
= State of the Art
|
|
||||||
There are a variety of existing approaches to providing a suitable oracle for quantum circuit equivalence checking based on @dd[s].
|
|
||||||
@qcec currently implements gate-cost, lookahead, one-to-one, proportional and sequential application schemes. @burgholzer2021ec
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue