Run Settings

Overview

Run settings control how a circuit is executed: numerical precision, number of shots, synchronous vs asynchronous execution, performance vs accuracy trade-offs, and optional advanced behavior such as amplitude generation or GPU transfer.

Some options are set when acquiring the backend. Others are passed to backend.run() or to the Sampler/Estimator when using the Qiskit toolkit.

Precision

The SDK supports single and double precision. The default is single.

Core SDK — set at backend acquisition:

backend = provider.get_backend(
    backend="scarlet_quantum_rings",
    precision="double"
)

Core SDK — set at run time:

job = backend.run(
    qc,
    shots=100,
    mode="async",
    precision="double"
)

If precision is set at backend acquisition, it remains fixed until you re-acquire the backend or override it in run().

Shots and execution mode

  • shots — integer > 1. Number of bitstrings sampled.

  • mode"sync" or "async".

When mode="async", the job runs in a background thread and returns immediately.

Example:

job = backend.run(qc, shots=100, mode="async")

Getting results: synchronous vs asynchronous execution

For short scripts and tutorials, the simplest pattern is to run synchronously so job.result() is ready immediately after backend.run(...) returns:

job = backend.run(qc, shots=100, mode="sync")
result = job.result()

When you run asynchronously (mode="async", or the default mode when execution is asynchronous), backend.run(...) can return before the job has finished. In that case, calling job.result() too early may produce an incomplete Result (for example, get_counts() may return an empty dict {} until the job completes).

For asynchronous execution, wait for completion before job.result() — for example using job_monitor (see job_monitor module) or wait_for_final_state (see Job lifecycle helpers below).

Warning

If you use asynchronous execution, do not assume job.result() is populated immediately. Empty or incomplete counts can indicate the job has not finished yet.

Threshold and performance modes

The performance option selects internal execution behavior (efficiency vs accuracy trade-offs).

Available values:

  • "HIGHESTEFFICIENCY"

  • "BALANCEDACCURACY"

  • "HIGHESTACCURACY"

  • "AUTOMATIC"

  • "CUSTOM"

If performance="CUSTOM", you must provide:

  • threshold — integer >= 2

Example:

job = backend.run(
    qc,
    performance="CUSTOM",
    threshold=32
)

Note

Legacy documentation states threshold is > 16. Current behavior supports threshold >= 2. If you encounter examples that use > 16, treat that as a legacy constraint rather than a strict requirement.

Advanced options

The following advanced options are available for run-time configuration.

  • transfer_to_cpu — In GPU mode, set to False to keep operations on the GPU during measurement.

  • generate_amplitude — If enabled, generates amplitudes for measured bitstrings. A file name must be provided via file. Legacy documentation states this is supported only in QrBackendV2.run; if you use it via core backend.run(), validate behavior for your version.

  • file — File path for storing measurements and/or amplitudes (used with generate_amplitude).

  • max_threads — Maximum number of threads during measurement. Legacy documentation states this is supported only in QrBackendV2.run; validate behavior for your version.

Toolkit-only parameters

When using the Quantum Rings toolkit for Qiskit, settings are typically provided via:

  • backend creation, or

  • options / run_options dictionaries for Sampler or Estimator.

Toolkit configuration parameters include:

  • token

  • name

  • backend

  • gpu (GPU id in multi-GPU systems)

See Toolkit for Qiskit.

Job lifecycle helpers

You can monitor job execution using:

from QuantumRingsLib import job_monitor
job_monitor(job)

To reduce output:

job_monitor(job, quiet=True)

To block until completion:

def jobCallback(job_id, state, job):
    pass

job.wait_for_final_state(0, 5, jobCallback)

Refer to the API reference for full signatures.

Potential inconsistencies to review

  • performance option casing appears in multiple forms in legacy examples (uppercase, lowercase, mixed case). Confirm whether casing is significant.

  • Legacy documentation states that generate_amplitude / file / max_threads are supported only in QrBackendV2.run; confirm supported behavior in core backend.run().