Paper The following article is Open access

QuESTlink—Mathematica embiggened by a hardware-optimised quantum emulator*

and

Published 25 May 2020 © 2020 The Author(s). Published by IOP Publishing Ltd
, , Citation Tyson Jones and Simon Benjamin 2020 Quantum Sci. Technol. 5 034012 DOI 10.1088/2058-9565/ab8506

2058-9565/5/3/034012

Abstract

We introduce QuESTlink,pronounced 'quest link', an open-source Mathematicapackage which efficiently emulates quantum computers. By integratingwith the Quantum Exact Simulation Toolkit (QuEST), QuESTlink offers ahigh-level, expressive and usable interface to a high-performance, hardware-accelerated emulator. Requiring no installation, QuESTlink streamlines the powerful analysis capabilities of Mathematica into the study of quantum systems, even utilising remote multi-core and GPU hardware. We demonstrate the use of QuESTlink to concisely and efficiently simulate several quantum algorithms, and present some comparative benchmarking against core QuEST.

Export citation and abstract BibTeX RIS

Original content from this work may be used under the terms of the Creative Commons Attribution 4.0 licence. Any further distribution of this work must maintain attribution to the author(s) and the title of the work, journal citation and DOI.

1. Foreward

This manuscript uses the phrases 'simulation' and 'emulation' interchangeably, to refer to any use of a classical computer to study, mimic or approximate the behaviour of a digital quantum computer. While QuESTlink can be classed as a strong simulator [1], we use the phrase emulation to distinguish from 'quantum simulation', that is the use of a quantum computer to study a quantum system.

2. Introduction

Classical emulation is crucial in the design of quantum computers and algorithms. Despite the recent demonstration of quantum supremacy [2], today's quantum computers are of insufficient quality to run and test many interesting algorithms. Even precise quantum computers of tomorrow may provide limited help in writing new algorithms, since unlike emulators, they offer limited information about the evolving quantum state. Furthermore, some algorithms, particularly those for noisy intermediate-scale quantum (NISQ) devices [3] like the variational class of algorithms [4], admit limited analytic treatment. Hence, the value of classical emulation is undeniable.

The research community needs high-level usable tools that are easy to deploy, offer rapid numerical study, and integrate with other established software. However, the exponentially-growing cost of classically simulating a quantum device makes emulation of even NISQ computers very resource intensive. Emulators must therefore make good use of classical high-performance computing techniques, like multithreading and GPU parallelisation, and be written in low-level performant languages like C. This requirement is at odds with the need for usable tools, which can be used by non-expert programmers and the wider quantum community.

Within this context we have developed QuESTlink: a high-performance Mathematica package for numerically emulating quantum computers, by off-loading expensive computation to remote accelerated hardware, running QuEST [5]. Mathematica is both a language and computational tool, prevalent among physicists, which offers a convenient interactive interface (through notebooks), and an extremely comprehensive and powerful set of utilities. Although the most widely used tool for calculations in the physical sciences [6, 7], Mathematica does not have an intrinsic toolset specifically dedicated to quantum computing emulation. QuESTlink provides a high-performance emulator with a usable Mathematical interface, without compromising the excellent performance and simulation capacity of QuEST.

From a laptop environment, a user can symbolically specify a circuit in an intuitive high-level operator format akin to how they appear in the literature. Behind a platform-agnostic Mathematica interface, QuESTlink sends the circuit to a C++ backend, either locally or on remote high-performance hardware, where it is efficiently emulated. QuESTlink offers multithreaded and GPU simulation of state vectors and density matrices, multi-qubit multi-controlled general unitaries, general noise processes, circuit drawing, and a wide range of standard gates. Like QuEST, QuESTlink is free, open-source and can be used stand-alone; furthermore, without setup, compilation or installation of any kind.

2.1. QuESTlink facilities

While the forthcoming sections give a thorough overview of QuESTlink's facilities, we here provide a short summary to acquaint the reader with the essentials. QuESTlink is, offers, features or enables:

  • Multithreaded and GPU-accelerated emulation of quantum computers.
  • State-vector and density matrix simulation.
  • Off-loading of simulation to remote hardware, through a backend-agnostic interface.
  • Seamless integration with Mathematica's powerful and comprehensive toolset, and interactive notebook programing style.
  • Rapid development with Mathematica's concise, functional language.
  • A concise but expressive circuit language, akin to the symbolic description of circuits in the literature.
  • Stand-alone with no required external downloading, compiling, or installation of any kind whatsoever.
  • Through Mathematica, is compatible with all major operating systems.
  • Free and open-source, hosted publicly on Github [8].
  • Rendering of circuit diagrams, which can be exported to any file format through Mathematica.
  • A suite of functions for higher-level calculations, like computing Hamiltonian expectation values, and derivatives of unitary circuits.
  • Analytic generation of matrices from circuit specifications, which can include symbols.
  • A comprehensive suite of unitary gates and decoherence channels, including multi-controlled multi-qubit general unitaries, and multi-qubit Kraus maps.
  • A rigorous user-input validation scheme to catch user errors, like supplying non-unitary matrices or physically invalid noise parameters.

3. Technical summary

This section provides an overview of the inner workings of QuESTlink, and the technologies used to build it. Readers intending to use QuESTlink right away may wish to skip to section 4.2.

3.1. Architecture

QuESTlink consists of both a Mathematica package (QuESTlink.m) and an underlying C++ programme (quest_link.cpp), which interface using C/Link; an implementation of the Wolfram Symbolic Transfer Protocol (WSTP) [9] (formerly called MathLink [10]). QuESTlink emulates quantum computers using the Quantum Exact Simulation Toolkit (QuEST) [5], which is an open-source, high-performance emulator written in C. QuEST is multi-threaded, GPU-accelerated and distributed, and the first two of these facilities are made available to QuESTlink.

C/Link facilitates conversion of Mathematica types, utilised in the user's notebook, into C types, and maps Mathematica-callable functions to C functions. The executable quest_link (quest_link.c compiled with WSTP) sits below as a 'backend' process, performing intermediate processing and invoking QuEST's API. This software stack is visualised in figure 1.

Figure 1.

Figure 1. The QuESTlink software stack, from the user's code (user.nb) to the driving QuEST [5] framework. This stack can run entirely on a user's local machine, achieving an interactive Mathematica interface to a C/C++ based emulator. Note the distinction between WSTP (the protocol for communicating between Mathematica and an external process) and C/Link (an implementation for C) is unimportant, and hereafter disregarded.

Standard image High-resolution image

Through this stack, QuESTlink offers a high-level Mathematica interface to quantum emulation which is numerically performed in C/C++ (a significantly faster but lower level language than Mathematica), using memory persistent in the C process, and potentially using accelerated hardware. The expensive numerical representations of the quantum states reside only in the C backend (and through QuEST, may also be persistent also in GPU memory), and each are identified by a unique ID. Quantum circuits are represented symbolically in their entirety in Mathematica, and sent to the C backend (at a small runtime overhead) only at emulation-time, compactly encoded into arrays of real numbers. The circuit language, and details of the QuESTlink interface, are presented in section 4.2.

QuESTlink leverages QuEST's extensive user-input validation, so that user errors are detected early and reported. For example, this includes validation that input matrices are unitary, that a gate's control and target qubits are unique, and that parameters of a decoherence channel result in a completely positive map. As of QuESTlink v0.3 (integrating QuEST v3.1.0), there are 72 unique forms of input validation. This helps users avoid logical errors in their code, to mitigate the risk of drawing incorrect conclusions from the results of QuESTlink.

Core QuEST performs validation before any modification to a quantum register. If a problem is detected, a C++ exception is thrown and caught by QuESTlink, and a descriptive error message is propagated to the Mathematica kernel. Some QuESTlink validation is performed on the fly. For example, a problem in a gate may only be detected after applying the prior gates in a circuit. In these instances, QuESTlink always reverts the affected register to its original state before the circuit was applied. This means no register is left in an uncertain state.

3.2. Deployment

QuESTlink can be obtained and deployed entirely within a Mathematica notebook, without any installation or configuration. This is done by hosting the package code and quest_link executable(s) online in a Github repository, which the qtechtheory.org server redirects to. Figure 2 presents the process of serving the package to a user's Mathematica kernel.

Figure 2.

Figure 2. The protocol for stand-alone deployment of QuESTlink. First, a user calls Mathematica's Import[url] function to fetch a copy of the QuESTlink.m package, hosted on Github, but redirected from qtechtheory.org. This provides the QuEST' namespace, and defines functions to connect to a quest_link backend; this backend can exist on the calling machine, or remotely as here pictured. More details on so called 'QuEST environments' are presented in detail in the proceeding sections. Note the featured code snippets are simplified here for clarity, and their syntax is reviewed in section 4.1.

Standard image High-resolution image

The quest_link executables for Windows, MacOS and Linux are automatically recompiled on the Github repository with every new release, using Github's integrated continuous-delivery service (Github actions [11]). This is for both security, ease of development, and its facility to push bug-fixes and updates seamlessly to the end user.

3.3. Remote computation

QuESTlink even enables quantum emulation using remote computing resources. Through WSTP, the quest_link process can run on a remote machine (e.g. a supercomputer) and communicate with the user's local Mathematica kernel via TCP/IP. The remote machine can employ more powerful hardware than available on the user's machine, and potentially emulate larger quantum states than can fit in the user's local memory. The protocol of off-loading a circuit emulation to remote hardware is outlined in figure 3. The tools and documentation for setting up a remote QuESTlink server are provided between the Github repo [8], and questlink.qtechtheory.org.

Figure 3.

Figure 3. Protocol for off-loading an emulation task onto a remote QuEST environment. Simulation structures declared in Mathematica are actually allocated remotely, possibly even in accelerated hardware memory. Quantum circuits, by first being encoded into arrays of numbers, are communicated to the server over the internet (via TCP/IP). Note the syntax used in the code snippets in this diagram are reviewed in section 4.1

Standard image High-resolution image

In this remote configuration, Mathematica calls to QuESTlink functions will involve network communication with the remote environment, and hence incur overheads; this is worthwhile if the remote hardware sufficiently accelerates an expensive emulation which otherwise dominates runtime.

Despite QuESTlink's effort to minimise the communication cost, this network overhead will be prohibitively costly for some applications. For example, when large simulated quantum states undergo processing by the Mathematica kernel, and hence need to be copied back and forth between the localkernel and the remote environment. To mitigate this slowdown while still running QuESTlink remotely, one can launch their Mathematica kernel on the remote machine, using Mathematica's remote kernel facilities [12]. QuESTlink can also be used inside other Mathematica packages, and so be launched remotely and non-interactively, without a local notebook.

4. User guide

4.1. Mathematica review

Before continuing, we offer a quick review of the Mathematica syntax used in this manuscript.

Evaluation of function f with input a is denoted by f[a], or equivalently f @ a. The expression g[f[a]] can be formed using prefix notation as g @ f @ a, or postfix notation as a //f //g. Matrix multiplication between (possibly complex) matrices a and b is denoted by a.b, and a denotes the conjugate transpose of a. Expressions with a trailing; suppress their otherwise displayed result. While f[] = a denotes immediate evaluation of a and assignment to f[], the syntax f[]:= a denotes delayed assignment, whereby later invoking f[] will evaluate a (which may have changed) each time. Elements of a list x = {a, b, c} are accessed as x[[i]] where index i ⩾ 1, and x[[m;;n]] returns the sublist spanning indices m to n. The shortcut ex /.ab replaces sub-expressions of ex which match pattern a, with b. Comments appear in parentheses (* like this *).

Finally, for those copying code into Mathematica, subscripts can be quickly entered into a notebook with keyboard shortcut & .

In the code snippets featured in this manuscript, context should make clear what is input to the Mathematica notebook, and what is a rendered output.

4.2. QuESTlink overview

The QuESTlink package requires no installation, and can be downloaded directly from within Mathematica:

The user then has a choice of several 'QuEST environments' in which to perform quantum emulation, all of which provide an identical user experience.

The first, CreateDownloadedQuESTEnv[], enables simulation on the user's machine by downloading a serial QuESTlink executable, pre-compiled for the user's operating system. This requires no apriori setup whatsoever.

CreateLocalQuESTEnv[fn] will attempt to launch an existing local QuESTlink executable, located at fn. This allows local simulation using serial, multi-core or GPU resources, depending on how the executable was compiled. Users can compile QuESTlink for their platform using the tools on the Github repo [8].

CreateRemoteQuESTEnv[ip, port1, port2] connects to a remote QuESTlink environment at the given ip address and ports. The remote machine can use serial, multithreading or GPU-acceleration to emulate quantum systems. The facilities to setup a remote QuESTlink server are provided in the Github repo [8].

Once connected to a QuEST environment, a full list of the supported QuESTlink facilities and gate symbols can be obtained by evaluating

and the documentation of a particular function or operator obtained similarly using ?.

Emulation begins by creating quantum registers (a 'Qureg'), each represented by a state-vector or density-matrix.

These functions return a unique ID for each Qureg, the memory for which is stored in the QuEST environment. Once created, QuESTlink provides a few functions to initialise Quregs:

or directly modify them (here, creating a random density matrix):

A quantum circuit u can be applied to a Qureg, agnostic of whether it is a state vector (effecting u |ψ⟩) or a density matrix (effecting u ρ u), using ApplyCircuit[u, qureg]. QuESTlink features a concise and expressive language for specifying gates and decoherence processes, where target qubits are denoted with subscript integers to gate symbols, and control gates 'wrap' the base gate. The below example makes use of the Circuit function, which disables commutation and allows a concise product representation of the circuit. In combination, this enables a syntax akin to how circuits are denoted in the quantum computing literature.

The result of Circuit[] is just a list of operators, allowing easy circuit manipulation. Mathematica features many tools for such lists allowing the user to easily extend, alter, join, compare, etc, their quantum circuit. For example:

These circuits can be swiftly visualised with DrawCircuit[u], which supports saving rendered circuit diagrams to raster and vector images.

After applying a unitary circuit, one can of course opt to obtain the entire state vector or density matrix, as for example:

However, it is typically more efficient to calculate desired quantities, like the expectation value of a Hamiltonian in the Pauli-basis, in the QuEST environment itself.

At any time, Quregs can be individually (or, all-together) destroyed to free up memory in the QuEST environment.

By leveraging Mathematica's powerful suite of symbolic calculations, QuESTlink can even build analytic matrices from circuit specifications.

With these facilities, QuESTlink offers a seamless integration with Mathematica's comprehensive range of computational and graphical tools, as illustrated in the following demonstrations.

5. Demonstrations

To demonstrate the concision [13] offered by QuESTlink, we provide several examples of somewhat sophisticated computations ritten in only several lines, and efficiently simulated. For users wishing to run these demonstrations directly, they are compiled into a single notebook at questlink.qtechtheory.org/paper_demos.nb.

5.1. Decoherence

To begin, we very compactly demonstrate the effect of two-qubit depolarising noise on the expected measurement of a simple Hamiltonian h. Starting in a random pure state ψ, a depolarising channel with probability 0.1 of any Pauli error occurring is repeatedly applied, in total 100 times.

Note that undisclosed variable opts contained additional code for customising the plot.

5.2. Variational imaginary-time

In this demonstration, we emulate the quantum variational imaginary-time simulation routine [14] to approximate the ground-state of a molecular Hamiltonian.

We first download a reduced 6-qubit representation of the electronic structure Hamiltonian of Lithium Hydride (LiH).

We create a simple 6-qubit ansatz circuit featuring 39 parameters, denoted with variables $\to {\theta }=\left\{{\theta }_{1},\dots ,\;{\theta }_{39}\right\}$.

This ansatz circuit consists of one and two qubit rotation gates; $\mathrm{exp}\left(-\mathrm{i}{\theta }_{j}\hat{\sigma }/2\right)$, for $\hat{\sigma }\in \left\{X,Y,Z,X\otimes X,Y\otimes Y,Z\otimes Z\right\}$, which in QuESTlink are denoted by Rxq[θ] (etc) and R[θ, Xq1Xq2]. In the diagram below, each such paired two-qubit rotation is marked by a vertical link.

We now create several Quregs with which to emulate the quantum algorithm.

ψ will be maintained as the output state of the ansatz circuit, and will store the result of applying the Hamiltonian h to ψ. ϕ will merely provide intermediate work-space for calculations, and will store a Qureg for each parameter in the ansatz (a total of ).

Next, we choose a random initial assignment of the ansatz parameters, and measure the energy of the resulting quantum state.

The variational imaginary-time algorithm [14] involves repeatedly measuring a matrix and vector of quantities,

Equation (1)

Equation (2)

and iteratively updating the parameters under

Equation (3)

which we now concisely emulate for nt iterations.

The energy of the output quantum state, as produced by the reached assignment of the parameters, is close to the true groundstate found through matrix diagonalisation.

Interestingly, a significantly slower but direct minimisation in Mathematica reveals the energy reached by imaginary-time was not quite the best possible of our chosen ansatz.

We invite the interested reader to compare the Mathematica code above to a native C implementation of imaginary time evolution, as hosted on Github [15].

5.3. Noisy trotterisation

In this demonstration, we emulate Trotterisation of a spin-ring Hamiltonian, with and without noise, and compare it to direct numerical solving of the Schrödinger equation. Our Hamiltonian is the one-dimensional nearest-neighbour (periodic boundary conditions) nQb-spin Heisenberg model with a random magnetic field in the z direction,

Equation (4)

Real-time simulation of this model to time t = nQb is nominated by Childs et al [16] as an early practical application of a quantum computer. In this example, we will study a five-spin chain Hamiltonian h.

To simulate evolution on a quantum computer, we will emulate circuits formed by the Suzuki-Trotter decompositions [17] of the unitary evolution operator of varying order n. Below, r is the number of repetitions of the order-n circuit to perform, to ultimately reach time t.

Note the original ordering of the Hamiltonian terms is arbitrary, and should ideally be optimised into commuting groups, or at least randomly shuffled. In particular, Childs et al's uniform randomisation scheme [18], whereby each repetition sees a random Hamiltonian ordering, is trivially implemented as:

Even Campbell's qDRIFT routine [19] can be given a compact implementation.

However, we opt instead to utilise only deterministic Trotterization for clarity. For example, the first-order (n = 1) single-repetition (r = 1) Trotter circuit (arbitrarily to time t = 1) has the form:

We compare the states produced from Trotter circuits with the 'true' (to numerical precision) time evolution, found by numerically solving the Schrödinger equation using Mathematica's in-built NDSolveValue routine.

In the proceeding solutions, the Qureg ψ0 will store the initial state (a random pure state), ψt will store the true state, and ψ will store outputs of the Trotter circuits.

We can now commence the computation by generating circuits of a varying Trotter order and number of repetitions, emulating their execution, and computing the fidelity of their output state with the true state.

We then plot the result below, using some undisclosed parameters opts to tweak the plot style. The horizontal axis is the total number of gates in the Trotter circuit.

We can even imitate an noisy quantum device by inserting decoherence operators into our circuit. In this demonstration, we will follow each Trotter-prescribed gate with one or two qubit depolarising operators, which effect the channel

Equation (5)

(noting σ = σ for Paulis) and similarly for the two-qubit analogue. We choose an error rate of p = 10−4, below the rates recently demonstrated in Google's Sycamore machine [2]. Below is a visualisation of the first five unitary gates of the resulting noisy circuit.

Our simulation of the noisy circuit is near-identical to our simulation of pure states, with the exception that we now operate upon density matrices.

As one might expect, the accuracy of the Trotter circuits have waned, and eventually decrease with increased circuit depth, due to the opportunity for additional errors to accrue.

5.4. Further examples

Complete notebooks demonstrating some extended computations in QuESTlink are available at questlink.qtechtheory.org.

6. Benchmarking

We now benchmark QuESTlink's local and remote emulation of some arbitrary quantum circuits, and compare to benchmarks of direct simulation in C, using QuEST. This quantifies the runtime overheads incurred by Mathematica integration, and whether QuESTlink is the right emulation tool for the user's target simulation regime.

We nominate a simple circuit consisting of X, Y, and Z axis rotations of random angles on each qubit, followed by tessellated controlled rotations on every pair of neighbouring qubits. This pattern is repeated in the circuit, and is illustrated in figure 4. These benchmarks will emulate 15-qubit circuits, with between 1 to 50 repetitions (an upper bound of 4350 gates), and each will be simulated 10 times with re-randomised angles.

Figure 4.

Figure 4. A 5-qubit 2-repetition example of the arbitrary circuit used for comparative benchmarking of QuESTlink and QuEST. Every gate involves a rotation of a uniformly random angle between 0 and 4π, which generate all rotations. The 15-qubit circuits employed for benchmarking feature 87 gates per repetition.

Standard image High-resolution image

Core QuEST is profiled directly in C, through precise timing of each full circuit execution. In contrast, QuESTlink is profiled through a notebook using Mathematica's AbsoluteTiming[] function; its runtime will include Mathematica evaluation, QuESTlink.m preprocessing and circuit encoding, the C/Link and WSTP overheads, quest_link.c's decoding of the circuit, and ultimately QuEST's simulation.

Benchmarking is performed on a 12-core Xeon W-2133 3.6 GHz CPU. At most 8 threads will be employed in multithreaded mode, so as not to interfere with threads used by the Mathematica kernel. GPU-accelerated testing will employ a 24 GB NVIDIA Quadro P6000 in the same machine.

The results of benchmarking are presented in figure 5, and are as expected. The Mathematica overhead of invoking serial QuEST through QuESTlink is small (a factor ≈1.1). This manifests from a fixed per-gate cost of encoding the circuit, though its proportion of the total runtime will depend on the total runtime, and hence the number of simulated qubits.

Figure 5.

Figure 5. Comparitive performance of QuEST and (local) QuESTlink emulating the 15-qubit circuit illustrated in figure 4, with a varying circuit depth (repetitions of the base circuit), in each of QuESTlink's supported parallelisation modes. Multithreaded emulation used 8 of 12 available threads, though were shared with the Mathematica kernel. Solid lines indicate the mean runtime of 10 random simulations, and shaded regions indicate three standard deviations. The circuit of 50 repetitions contains a total of 4350 gates.

Standard image High-resolution image

Multithreading with 8-threads offered a ≈5 × speedup but introduced additional variation in runtime, most likely due to dynamic reallocation of threads between the Mathematica kernel and the backend QuEST process. Otherwise, the multithreading overhead is similarly small (a factor ≈1.08 for these tests). This reveals that the Mathematica pre-processing itself is accelerated by multithreading with the remaining four available threads.

At first glance, GPU QuESTlink may appear anomalously slow; on average 7.2 times slower than core GPU QuEST. However, this is due to QuEST simulation being ve4ry rapid, yielding a proportionately larger Mathematica overhead. For example, in the largest serial simulation, QuESTlink was on average 5 × 10−2 seconds slower than QuEST. This is comparable to the largest overhead of 4 × 10−2 in the GPU tests.

To confirm this, we performed additional GPU benchmarking with a fixed circuit of 100 random rotations, and varying number of qubits. We study the overheads of local and remote emulation, using both CreateLocalQuESTEnv[] and CreateRemoteQuESTEnv[]. The results are presented in figure 6, and reveal a negligible overhead on all platforms.

Figure6.

Figure6. Benchmarking of afixed-length circuit simulation in QuESTlink, using differentenvironment configurations, though all ultimately running on the previously profiled Xeon machine's GPU. Remote used CreateRemoteQuESTEnv[] to connect from a 13-inch 2017 MacBook Pro, with an average latency of 0.38 ms, with wall time measured in Mathematica with AbsoluteTiming[]. Local ran in a notebook on the Xeon machine, also using AbsoluteTiming[]. Internal measured the time spent in the QuESTlink C++ backend, and so excludes any Mathematica and WSTP overheads. Each datum is the average of 50 tests with re-randomised gate parameters.

Standard image High-resolution image

In general, use of a remote QuEST environment will add a constant overhead to QuESTlink's performance, due to network latency. Though in principle the cost of communicating a circuit from Mathematica to a remote backend scales linearly with the emulated circuit depth, this cost should be overshadowed by the exponentially growing cost of quantum emulation, and other network overheads. Indeed, this is exhibited in figure 6. The size of an encoded circuit is upper bounded by 8Σ bytes, where Σ is the total number of gates, control qubits, target qubits and gate parameters (e.g. angles of rotation). A circuit would need to contain approximately 30 million single-qubit gates to saturate a 1 GB bandwidth network.

7. Future work

QuESTlink is currently under active development, with a growing list of planned work and new features. This list includes:

  • Integration with a GPU-accelerated linear algebra library, to perform fast numerical routines directly on the simulated quantum state. For example, diagonalisation of a density matrix enables rapid calculation of the Trace distance, which currently requires expensive communication with the Mathematica kernel.
  • Support for emulation on remote, distributed hardware.
  • A QASM [20] parser and generator, to and from QuESTlink's circuit specification language.

We caution that QuESTlink is still in an early form and likely to change, both in interface and architecture.

8. Conclusion

This manuscript introduced QuESTlink, a Mathematica package for emulating quantum circuits, state-vectors and density matrices. QuESTlink offers both high-level symbolic manipulation of quantum circuits, and rapid simulation using possibly remote hardware, such as multicore and GPU-accelerated supercomputers. We presented a broad technical overview of QuESTlink, including its protocol for stand-alone installation-free deployment. We then demonstrated the concision and flexibility possible of QuESTlink, by stepping through several examples of otherwise sophisticated simulations. These examples should enable an interested reader to begin using QuESTlink immediately. Lastly, we performed some simple benchmarks of QuESTlink to estimate the overhead over core QuEST, across its parallelisation modes. QuESTlink is open-source, and accessible at questlink.qtechtheory.org, or on Github [8].

Acknowledgments

The authors sincerely thank Balint Koczor for help porting QuESTlink to Windows, and performing extensive testing of QuESTlink's analytic capabilities. We also thank Suguru Endo and Balint Koczor for helping shape the functionality and direction of QuESTlink and bug-spotting. Thanks also goes to the early adopters of QuESTlink in the QTechTheory group, for their part in moulding a perfectly cromulent emulator. TJ additionally thanks Quantum Motion Technologies Ltd for financial support in extending QuESTlink, and Sinan Shi for his noble spirit and expertise in rubber duck debugging. SCB acknowledges EPSRC grants EP/M013243/1 and EP/T001062/1, the IARPA funded project LogiQ, and the EU Flagship project AQTION. The authors would like to acknowledge the use of the University of Oxford Advanced Research Computing facility (ARC, please see http://dx.doi.org/10.5281/zenodo.22558) in enabling the related QuEST work.

Footnotes

  • with additional support from Quantum Motion Technologies Ltd United Kingdom.

Please wait… references are loading.