Skip to content

v4.2.0

Latest

Choose a tag to compare

@TysonRayJones TysonRayJones released this 14 Oct 01:39
9d7618d

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 effects exp(i x H) where x is 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_GPU and DEFAULT_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 effect exp(i t H) as documented, whereas it previously erroneously effected exp(-i t H) (#647).
  • Patched Trotterisation of order >= 4. Previously, the order >= 4 scenario of Trotterisation did not correctly invoke recursion, but instead called first order Trotterisation five times without symmetrisation. This meant passing order=4 erroneously excluded symmetrisation (halving the Trotter depth), and passing order>=6 merely 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 isCuQuantumEnabled to the QuESTEnv struct, so that it can be determined at runtime whether or not the cuQuantum GPU backend is being utilised. This is also now reported by reportQuESTEnv() (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 new setQuregToWeightedSum() (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: