Simulation Guidance

Overview

The table below specifies details corresponding to each simulation modality.

Simulation Options

Simulator

Usage Guidance

Limitations

Scaling Behaviour

Statevector

A general-purpose and brute-force method to simulate user programs.
Simulations are fast up to 20 qubits.

Qubit Constraint: \( \leq 32\)
Gateset Constraints: None

Memory: \(2^{n+3}\) bytes.

Runtime: \(O(n)\) in program length and \(O(2^n)\) in number of qubits.

Stabilizer

Use for Clifford-only programs, like QEC.
Much cheaper than Statevector simulation.

Qubit Constraint: Very low (supports 1000s of qubits)
Gateset Constraint: Clifford-only

Memory: \(O(n^2)\).

Runtime: \(O(d n^3)\).

MPS (CPU)

Bond-dimension truncation (\(\chi\)). Used when statevector is unfeasible.

Qubit Constraint scales with \(\chi\).

Memory: \(n 2^{4} {\chi}^{2}\) bytes.

Runtime: \(O(n \chi^3)\)

MPS (GPU)

Used when \(\chi\) > 256 and CPU simulation is slow.

Qubit Constraint scales with \(\chi\)

Same as CPU scaling

Coinflip

Used for syntax checking and cost estimation only.

Additional Considerations

  1. Statevector (Stabilizer) simulation uses the opensource Quest (Stim) package, integrated with Selene as a plugin, via the extensibility API.

  2. Nexus provides the following compute for simulators:

    • 1 vCPU and 4 GB Memory for statevector and MPS simulators.

    • 1 vCPU and 2 GB Memory for stabilizer and Coinflip simulators.

  3. MPS (GPU) is only available with hardware-tier emulators.

  4. Memory scaling is specified for complex numbers defined by 2 32-bit floating-point numbers.