Overview
This release adds exciting new Trotter functionality, including imaginary-time and Lindbladian simulation, as well as functions for more general manipulation of density matrices (like left or right-applying operators). It also patches critical performance regressions in CPU simulation, a maths error in the Trotter functions, and build issues when installing QuEST.
New features
- Added real, imaginary and noisy/open (Lindblad) time evolution via Trotterisation (#647). Specifically:
- Added
applyNonUnitaryPauliGadget()which permits rotating about a Pauli string by a complex angle, effecting a non-unitary operation (#637). - Added
applyTrotterizedNonUnitaryPauliStrSumGadget()which effectsexp(i x H)wherexis any complex scalar (#647). - Added controlled Trotter functions (d4706b9, 2110b74, 211d4e8), i.e.
applyTrotterizedControlledPauliStrSumGadget()applyTrotterizedMultiControlledPauliStrSumGadget()applyTrotterizedMultiStateControlledPauliStrSumGadget()
- Added optimised functions to prepare superpositions and mixtures of an arbitrary number of
Qureg(d4a5714). Specifically: - Added environment variables
PERMIT_NODES_TO_SHARE_GPUandDEFAULT_VALIDATION_EPSILON, replacing their original macros, which now permits changing their values pre-runtime without recompilation (#653, #655). - Added left- and right-application of operators upon density matrices (#657, #668, c49f8d2, 53c6828), i.e.
leftapplyCompMatr1()rightapplyCompMatr1()leftapplyCompMatr2()rightapplyCompMatr2()leftapplyCompMatr()rightapplyCompMatr()leftapplyDiagMatr1()rightapplyDiagMatr1()leftapplyDiagMatr2()rightapplyDiagMatr2()leftapplyDiagMatr()rightapplyDiagMatr()leftapplyDiagMatrPower()rightapplyDiagMatrPower()leftapplyFullStateDiagMatr()rightapplyFullStateDiagMatr()leftapplyFullStateDiagMatrPower()rightapplyFullStateDiagMatrPower()leftapplySwap()rightapplySwap()leftapplyPauliX()rightapplyPauliX()leftapplyPauliY()rightapplyPauliY()leftapplyPauliZ()rightapplyPauliZ()leftapplyPauliStr()rightapplyPauliStr()leftapplyPauliGadget()rightapplyPauliGadget()leftapplyPhaseGadget()rightapplyPhaseGadget()leftapplyMultiQubitNot()rightapplyMultiQubitNot()leftapplyQubitProjector()rightapplyQubitProjector()leftapplyMultiQubitProjector()rightapplyMultiQubitProjector()leftapplyPauliStrSum()rightapplyPauliStrSum()
- Function
reportQuESTEnv()will now additionally display the available RAM (#636).
Patches
- Restored NUMA awareness, greatly improving multithreaded CPU performance (#658).
- Patched a performance regression (from QuEST v3) in CPU simulation, related to complex arithmetic (60f9b3a).
- Patched a performance regression (from QuEST v3) in the one-qubit Pauli functions, by redirecting them to make use of the one-qubit dense matrix functions (as performed by v3) (#682).
- Patched
applyTrotterizedPauliStrSumGadget()to effectexp(i t H)as documented, whereas it previously erroneously effectedexp(-i t H)(#647). - Patched Trotterisation of
order >= 4. Previously, theorder >= 4scenario of Trotterisation did not correctly invoke recursion, but instead called first order Trotterisation five times without symmetrisation. This meant passingorder=4erroneously excluded symmetrisation (halving the Trotter depth), and passingorder>=6merely performed unsymmetrised fourth-order Trotterisation (e0a0e96). - Patched installation of QuEST, which now correctly records the compile-time configuration. Beware that several macros became exclusively cmake options (#645, #685).
- The unit test of
createFullStateDiagMatr()'s input validation now expects the correct error message (aa11c23), and does not break CUDA execution thereafter (37e222e).
Other changes
- Attached boolean field
isCuQuantumEnabledto theQuESTEnvstruct, so that it can be determined at runtime whether or not the cuQuantum GPU backend is being utilised. This is also now reported byreportQuESTEnv()(c357267). - Made
createPauliStrSum()validate ahead of time whether it can fit the necessary data structures into RAM (ca6e9f8). - Updated the dynamics examples to use the new evolution functions (19e18b2).
- Deprecated
setQuregToSuperposition()since superseded by the newsetQuregToWeightedSum()(ab8b560). - Added
docs/news.md(5bd864b). - Added yet more missing documentation (but the battle continues!) (cb682b2)
New contributors
This release contained patches from new contributors:
- Mai Đức Khang in #636.
- Diogo Pratas Maia in #637.