QuEST
A multithreaded, distributed, GPU-accelerated simulator of quantum computers
Install / Use
/learn @QuEST-Kit/QuESTREADME
The Quantum Exact Simulation Toolkit (QuEST) is a high-performance simulator of quantum statevectors and density matrices.
It hybridises multithreading, GPU acceleration and distribution to run lightning fast on laptops, desktops and
supercomputers, parallelising over multiple cores, CPUs and GPUs. Behind the scenes, QuEST leverages OpenMP,
MPI, CUDA, HIP,
Thrust, cuQuantum and GPUDirect
for cutting-edge performance on modern multi-GPU clusters, and compatibility with older NVIDIA and AMD GPUs. These deployments can
be combined in any combination, or automatically decided at runtime, yet are abstracted behind a single, seamless interface, accessible
by both C and C++ and all the major compilers (detailed here).
As of v4.2, QuEST development is led by the EPCC team at the University of Edinburgh, with support and former development by the QTechTheory group at the University of Oxford. QuEST has also received contributions and support from the below organisations.
In particular, QuEST v4.0 was made possible through the support of the UK National Quantum Computing centre (NQCC200921) and the UKRI SEEQA project.
<img src="https://raw.githubusercontent.com/QuEST-Kit/QuEST/refs/heads/main/utils/docs/logos/nqcc.png" alt="NQCC" height=30> <img src="https://raw.githubusercontent.com/QuEST-Kit/QuEST/refs/heads/main/utils/docs/logos/amd.png" alt="AMD" height=25> <img src="https://raw.githubusercontent.com/QuEST-Kit/QuEST/refs/heads/main/utils/docs/logos/nvidia.png" alt="NVIDIA" height=25> <img src="https://raw.githubusercontent.com/QuEST-Kit/QuEST/refs/heads/main/utils/docs/logos/qmt.png" alt="Quantum Motion" height=25> <img src="https://raw.githubusercontent.com/QuEST-Kit/QuEST/refs/heads/main/utils/docs/logos/edinburgh.png" alt="University of Edinburgh" height=25> <img src="https://raw.githubusercontent.com/QuEST-Kit/QuEST/refs/heads/main/utils/docs/logos/oxford.png" alt="University of Oxford" height=28>
</div> <!-- <a> used below for doxygen compatibility -->To learn more:
- view the <a href="#main_documentation">documentation</a>
- visit the website
- read the whitepaper, which featured in Scientific Report's Top 100 in Physics :trophy:
<!-- BEWARE that we use two non-breaking spaces after each emoji in a section title, to add spacing between emoji and text -->
🎉 Introduction
QuEST has a simple interface which is agnostic to whether it's running on CPUs, GPUs or a networked supercomputer.
Qureg qureg = createQureg(30);
initRandomPureState(qureg);
applyHadamard(qureg, 0);
applyControlledRotateX(qureg, 0, 1, angle);
applyFullQuantumFourierTransform(qureg);
reportQureg(qureg);
qreal prob = calcProbOfQubitOutcome(qureg, 0, outcome);
qreal expec = calcExpecPauliStr(qureg, getPauliStr("XYZ"));
Yet, it is flexible
mixDepolarising(qureg, targ, prob);
mixKrausMap(qureg, targs, ntargs, krausmap);
applyQubitMeasurement(qureg, targ);
applyMultiQubitProjector(qureg, targs, outcomes, ntargs);
applyControlledPauliGadget(qureg, ctrl, paulistr, angle);
applyMultiStateControlledSwap(qureg, ctrls, states, nctrls, targ1, targ2);
leftapplyCompMatr1(qureg, targ, getInlineCompMatr1( {{1,2i},{3i,4}} ));
leftapplyDiagMatrPower(qureg, targs, ntargs, diagmatr, exponent);
and extremely powerful
setFullStateDiagMatrFromMultiVarFunc(fullmatr, myfunc, ntargsPerVar, nvars);
applyFullStateDiagMatrPower(qureg, fullmatr, exponent);
CompMatr matr = createCompMatr(10);
setCompMatr(matr, ...);
applyCompMatr(qureg, targs, 10, matr);
PauliStrSum observ = createInlinePauliStrSum(R"(
0.123 XXIXX
1.23i XYZXZ
-1-6i IIZII
)");
applyTrotterizedPauliStrSumGadget(qureg, observ, time, order, nreps);
Qureg reduce = calcPartialTrace(qureg, targs, ntargs);
qreal expec1 = calcExpecPauliStrSum(reduce, observ);
qreal expec2 = calcExpecFullStateDiagMatr(qureg, fullmatr);
✅ Features
<!-- BEWARE that a bug in Doxygen v1.13.2 (github.com/doxygen/doxygen/issues/11515) means we cannot immediately follow a non-breaking space (inserted below after each emoji to effect spacing) with markdown syntax like **. Instead, we insert one final regular/non-breaking space before ** which isn't rendered, and which works around the bug -->QuEST supports:
- ☑️ density matrices for precise simulation of noisy quantum computers
- ☑️ general unitaries with any number of control, control-states, and target qubits
- ☑️ general decoherence channels of any dimension
- ☑️ general observables in the Pauli or diagonal-Z bases
- ☑️ many many operators, including Pauli gadgets, trotterised time evolutions, and projectors
- ☑️ many tools to analyse quantum states, such as calculations of probability, fidelity, expectation value, distances and partial traces
- ☑️ variable precision through
qrealandqcompnumerical types which can use single, double or quad precision - ☑️ direct access to amplitudes for rapid custom modification of the quantum state
- ☑️ native compilation on MacOS, Linux and Windows, through Clang, GNU, Intel, and MSVC compilers
- ☑️ hybridisation of multithreading, GPU-acceleration, distribution and GPU-distribution
- ☑️ optimisation using NVLink'd GPUs, cuQuantum, and CUDA-aware MPI
- ☑️ automatic deployment of a
Quregto the optimal hardware at runtime - ☑️ hardware probing to determine how many qubits can be simulated at runtime
- ☑️ bespoke algorithms to optimally simulate a wide variety of esoteric operations
<!-- permit doxygen to reference section -->
<a id="main_documentation"></a>
📖 Documentation
[!IMPORTANT] QuEST v4's documentation is still under construction!
Visit the docs for guides and tutorials, or the API which is divided into:
<!-- hiding test doc since too large, but preserved here for useful links --> <!-- You can also browse QuEST's extensive [tests](https://quest-kit.github.io/QuEST/group__tests.html): - [test utilities](https://quest-kit.github.io/QuEST/group__testutils.html) - [cache](https://quest-kit.github.io/QuEST/group__testutilscache.html) - [compare](https://quest-kit.github.io/QuEST/group__testutilscompare.html) - [conveRelated Skills
node-connect
344.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
99.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
344.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
344.4kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
