Overview
This release integrates a cuQuantum backend (generously supported by the NQCC), optimises distributed communication, and improves the unit tests.
New features
- QuEST gained a new backend which integrates cuQuantum and Thrust for optimised simulation on modern NVIDIA GPUs. This is compiled with cmake argument
-DUSE_CUQUANTUM=1
, as detailed in the compile doc. Unlike QuEST's other backends, this does require prior installation of cuQuantum, outlined here. This deployment mode should run much faster than QuEST's custom GPU backend, and will soon enable multi-GPU simulation. The entirety of QuEST's API is supported! 🎉
This work was supported by the UK National Quantum Computing centre [NQCC200921]
Other changes
- QuEST's distributed communication has been optimised when exchanging states via many maximum-size messages, thanks to the work of Jakub Adamski as per this manuscript.
- Functions like
multiQubitUnitary()
andmixMultiQubitKrausMap()
have relaxed the precision of their unitarity and CPTP checks, so they will complain less about user matrices. Now, for example, a unitarity matrixU
is deemed valid only if every element ofU*dagger(U)
has a Euclidean distance of at mostREAL_EPS
from its expected identity-matrix element. - Unit tests now check that their initial register states are as expected before testing an operator. This ensures that some tests do not accidentally pass when they should be failing (like when run with an incorrectly specified GPU compute capability) due to an unexpected all-zero initial state.
- Unit tests now use an improved and numerically stable function for generating random unitaries and Kraus maps, so should trigger fewer precision errors and false test failures.