cuStateVec Ex: State Vector Updater#

The State Vector Updater (SVUpdater) provides a comprehensive simulation pipeline for accelerated state vector updates through gate fusion and noise channel support.

API Overview#

The queuing system supports three types of operations: unitary gate matrix applications through custatevecExSVUpdaterEnqueueMatrix(), mixed unitary channels through custatevecExSVUpdaterEnqueueUnitaryChannel(), and general quantum channels using Kraus operators through custatevecExSVUpdaterEnqueueGeneralChannel(). Each operation type can be queued with specific parameters.

Queued operators are applied to a specified state vector instance by calling custatevecExSVUpdaterApply(). This API accepts user-generated random numbers for noise channel application. The number of required random numbers is retrieved by custatevecExSVUpdaterGetMaxNumRequiredRandnums().

This design enables reuse of queued operators across multiple state vector instances. Since random number sequences are user-generated, different noise effects can be simulated through successive custatevecExSVUpdaterApply() calls, each with different sets of random numbers.

Noise Channel Integration#

The noise channels are integrated into the SVUpdater pipeline with performance considerations. Mixed unitary channels are randomly sampled and appropriately fused with other operations. For general quantum channels, Kraus operators are sampled considering the probability lower bound computed from eigenvalues, incorporating a delayed expectation value computation as an optimization for low-noise simulations. This optimization leverages the advanced techniques described in arXiv:2111.02396.

Configuration and Optimization#

The SVUpdater provides reasonable defaults while allowing users to control fusion parameters and other optimization settings through the custatevecExConfigureSVUpdater() API for specific performance requirements.

Distributed State Vector Support#

For distributed state vectors, SVUpdater operations are performed on local portions of the state vector. Gates affecting only local wires are executed independently on each device/process. Gates involving global index bits trigger inter-process communication through the configured communication layers.