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.