diff --git a/citations.bib b/citations.bib index c22512e..88c1076 100644 --- a/citations.bib +++ b/citations.bib @@ -763,12 +763,65 @@ journal = {Physical Review A} } +@software{cirq2022, + author = {{Cirq Developers}}, + title = {Cirq}, + month = dec, + year = 2022, + note = {{See full list of authors on Github: https://github + .com/quantumlib/Cirq/graphs/contributors}}, + publisher = {Zenodo}, + version = {v1.1.0}, + doi = {10.5281/zenodo.7465577}, + url = {https://doi.org/10.5281/zenodo.7465577} +} + +@manual{cirq2022simulator, + author = {{Cirq Developers}}, + title = {cirq.Simulator}, + year = {2023}, + month = {06}, + note = {\url{https://quantumai.google/reference/python/cirq/Simulator}} +} + @software{qsim2020, - author = {Quantum AI team and collaborators}, - title = {qsim}, + author = {{Quantum AI team} and collaborators}, + title = {qsim, qsimh}, month = Sep, year = 2020, publisher = {Zenodo}, doi = {10.5281/zenodo.4023103}, url = {https://doi.org/10.5281/zenodo.4023103} +} + +@article{numpy2020, + title = {Array programming with {NumPy}}, + author = {Charles R. Harris and K. Jarrod Millman and St{\'{e}}fan J. + van der Walt and Ralf Gommers and Pauli Virtanen and David + Cournapeau and Eric Wieser and Julian Taylor and Sebastian + Berg and Nathaniel J. Smith and Robert Kern and Matti Picus + and Stephan Hoyer and Marten H. van Kerkwijk and Matthew + Brett and Allan Haldane and Jaime Fern{\'{a}}ndez del + R{\'{i}}o and Mark Wiebe and Pearu Peterson and Pierre + G{\'{e}}rard-Marchant and Kevin Sheppard and Tyler Reddy and + Warren Weckesser and Hameer Abbasi and Christoph Gohlke and + Travis E. Oliphant}, + year = {2020}, + month = sep, + journal = {Nature}, + volume = {585}, + number = {7825}, + pages = {357--362}, + doi = {10.1038/s41586-020-2649-2}, + publisher = {Springer Science and Business Media {LLC}}, + url = {https://doi.org/10.1038/s41586-020-2649-2} +} + +@manual{microsoft2023, + author = {Microsoft}, + title = {What are {Q\#} and the Quantum Development Kit?}, + year = {2023}, + url = {https://learn.microsoft.com/en-gb/azure/quantum/overview-what-is-qsharp-and-qdk}, + urldate = {\today}, + note = {\url{https://learn.microsoft.com/en-gb/azure/quantum/overview-what-is-qsharp-and-qdk}}, } \ No newline at end of file diff --git a/main.pdf b/main.pdf index d46c98b..04a2696 100644 Binary files a/main.pdf and b/main.pdf differ diff --git a/main.tex b/main.tex index e0ddb1a..18986e7 100644 --- a/main.tex +++ b/main.tex @@ -16,44 +16,55 @@ \usepackage{physics} \usepackage{float} \usepackage{qcircuit} -\usepackage{marginnote} \newtheorem{theorem}{Theorem} \newtheorem{lemma}{Lemma} \newtheorem{definition}{Definition} \ExplSyntaxOn - \clist_new:N \l_my_footlist - \cs_new:Nn \my_footnotelater:n { - \clist_gput_right:Nn \l_my_footlist {{#1}} - } - \cs_new:Nn \my_footnotenow: { - \clist_gpop:NN \l_my_footlist \l_tmpa_tl - \exp_args:Nv\footnote{l_tmpa_tl} - } - \NewDocumentCommand{\FootnoteLater}{m}{\my_footnotelater:n{#1}} - \NewDocumentCommand{\FootnoteNow}{}{\my_footnotenow:} -\ExplSyntaxOff +\clist_new:N \l_my_footlist +\cs_new:Nn \my_footnotelater:n { + \clist_gput_right:Nn \l_my_footlist {{#1}} +} +\cs_new:Nn \my_footnotenow: { + \clist_gpop:NN \l_my_footlist \l_tmpa_tl + \exp_args:Nv\footnote{l_tmpa_tl} +} +\NewDocumentCommand{\FootnoteLater}{m}{\my_footnotelater:n{#1}} +\NewDocumentCommand{\FootnoteNow}{}{\my_footnotenow:} -\ExplSyntaxOn - \cs_new:Nn \postulate:nn { - \emph{#2} - %\hyperlink{#1}{#2} - } - \NewDocumentCommand \Postulate { m } +\cs_new:Nn \postulate:nn { + \emph{#2} + %\hyperlink{#1}{#2} +} +\NewDocumentCommand \Postulate { m } +{ + \str_case_e:nnF { \str_foldcase:n { #1 } } { - \str_case_e:nnF { \str_foldcase:n { #1 } } - { - { state\space space }{\postulate:nn{postulate:state-space}{#1}} - { evolution }{\postulate:nn{postulate:evolution}{#1}} - { measurement }{\postulate:nn{postulate:measurement}{#1}} - { composite\space systems }{\postulate:nn{postulate:composite-systems}{#1}} - }{ - \textbf{!!}#1\textbf{!!} - } + { state\space space }{\postulate:nn{postulate:state-space}{#1}} + { evolution }{\postulate:nn{postulate:evolution}{#1}} + { measurement }{\postulate:nn{postulate:measurement}{#1}} + { composite\space systems }{\postulate:nn{postulate:composite-systems}{#1}} + }{ + \textbf{!!}#1\textbf{!!} } +} + +\cs_new:Nn \my_simulator_slug:Nn { + \tl_set:Nn #1 {#2} + \tl_set:Nx #1 {\text_lowercase:n {#2}} + \tl_remove_all:Nn #1 { () } + \tl_replace_all:Nnn #1 { ~_/ } { - } + \tl_put_left:Nn #1 {sec:simulator-} +} +\NewDocumentCommand{\Simulator}{m}{ + \my_simulator_slug:Nn \l_tmpa_tl {#1} + \subsubsection{#1} + \exp_args:No \label \l_tmpa_tl +} \ExplSyntaxOff +\def\Cpp{{C\nolinebreak[4]\hspace{-.05em}\raisebox{.4ex}{\tiny\bf ++}}} \def\viz.{\textit{viz}.} \NewDocumentCommand{\Naturals}{}{\mathbb{N}} \let\NN\Naturals @@ -666,7 +677,7 @@ eliminated, by giving a superclass of Clifford circuits, ``$HT$ circuits'', that is equivalent to classical computation and can be weakly simulated. Finally, note also that certain classes of efficiently simulatable circuits not -discussed here, such as \emph{matchgate} circuits, may relate non-trivially +discussed here, such as \emph{matchgate circuits}, may relate non-trivially with Clifford circuits \cite{Valiant2002,Jozsa2008,Brod2016}. \subsection{Schr\"{o}dinger simulation} @@ -925,21 +936,74 @@ exhaustive in the number of simulators considered, nor on the benchmarking the considered solutions. The large and growing number of quantum circuit simulators available, and the different possible goals for such software (e.g., small-scale \textit{vs.}~supremacy-scale simulation), would make it impossible -for a complete and even comparison. Thus, we focused on offline, small-scale, -industry-recognized simulators, such as those that a researcher might use to -validate their algorithms in toy-settings using their laptop. +for a complete and even comparison. Thus, we focused on a subset of offline, +small-scale, industry-recognized simulators, such as those that a researcher +might use to validate their algorithms in toy-settings using their laptop. \subsection{Methodology} \FootnoteLater{As of July $16$, $2023$, the Github repositories for the Cirq, the Microsoft Quantum, and the Qiskit simulators have, respectively, - $3,\!823$, $3,\!737$, and $3,\!678$, ``stars''.} + $3,\!823$, $3,\!737$, and $3,\!678$ ``stars''.} We began with the $3$ most popular (at the time of writing) quantum circuit simulators under the Github ``quantum-computing'' tag\FootnoteNow. Then, we -considered every quantum circuit simulator for which Qiskit provided a backend -interface. For providers of quantum hardware interfacing with Qiskit, we -considered the provider's simulation solution, if it existed. +considered simulators for which Qiskit or Cirq provided backend interface. For +providers of quantum hardware interfacing with Qiskit, we considered the +provider's simulation solution, if it existed. We then proceeded to traverse +the reference graph of the simulator's reference publications, gathering a +total of $20$ simulators. A graph outlining the citation chains followed is +given in figure \ref{fig:citation-graph}. + +\begin{figure}[thb] + \includegraphics[page=2]{assets/reference_spider.pdf} + \caption{Graph illustrating the citation chains followed to enumerate the + simulators considered.} + \label{fig:citation-graph} +\end{figure} + +\subsection{Simulators} + +\Simulator{Cirq (internal/qsim/qsimh simulators)} + +Cirq \cite{cirq2022} is Google's solution for quantum circuit related tasks, +from design to real-world execution. Besides third-party backends (see sections +\ref{sec:simulator-qflex},\ref{sec:simulator-quimb}), Cirq contains three +separate simulators: the built-in Python simulator \cite{cirq2022simulator}, +qsim, and qsimh \cite{qsim2020}. The built-in Python simulator performs +\Schrodinger-based simulation (thus, maintains the state vector) using a Numpy +\cite{numpy2020} sparse-matrix representation, and is meant for testing small +circuits. qsim and qsimh, in contrast, are Google's optimized and +high-performance simulation solutions. Both are written in \Cpp, and are, +respectively, a \Schrodinger\ and a \Schrodinger-Feynman simulator (\viz.\ +sections +\ref{sec:schrodinger-simulation},\ref{sec:schrodinger-feynman-simulation}). +qsim and qsimh employ gate fusion, vectorized instructions and multi-threading +for computational speed-up. qsimh supports trading computational time by +lower-fidelity simulation, as outlined in section \ref{sec:feynman-simulation}. +Both qsim and qsimh integrate with Cirq's Python interface. + +\Simulator{Microsoft Quantum} + +Microsoft's ``Quantum Development Kit'' is a tool-kit for quantum computation, +including quantum circuit simulation \cite{microsoft2023}. It is integrated with + +\Simulator{Qiskit} +\Simulator{qFlex} +\Simulator{quimb} +\Simulator{Rigetti Forest} +\Simulator{NVIDIA cuStateVec} +\Simulator{NVIDIA cuTensorNet} +\Simulator{Amazon SV1} +\Simulator{Amazon TN1} +\Simulator{Amazon DM1} +\Simulator{MQT/DDSIM} +\Simulator{Intel Quantum Simulator} +\Simulator{Xanadu's Strawberry Fields} +\Simulator{Pennylane Lightning} +\Simulator{Qibo} +\Simulator{QCGPU} +\Simulator{Quantum++} \appendix