Parallelism#
We provide CPU multi-processing methods for circuit evaluation for multiple input states and multiple parameters for fixed input state.
When using the methods below the processes option controls the number of
processes used by the parallel algorithms through the multiprocessing
library. By default processes=None, in this case the total number of logical
cores are used. Make sure to select the appropriate number of processes for your
computer specification, taking in consideration memory and physical cores. In
order to obtain optimal results you can control the number of threads used by
each process with the qibo.set_threads method. For example, for small-medium
size circuits you may benefit from single thread per process, thus set
qibo.set_threads(1) before running the optimization.
Resources for parallel circuit evaluation.
- qibo.parallel.parallel_execution(circuit, states, processes=None, backend=None)[source]#
Execute circuit for multiple states.
Example
import qibo qibo.set_backend('qibojit') from qibo import set_threads from qibo.models import QFT from qibo.parallel import parallel_execution import numpy as np # create circuit nqubits = 22 circuit = QFT(nqubits) # create random states states = [ np.random.random(2**nqubits) for _ in range(5)] # set threads to 1 per process (optional, requires tuning) set_threads(1) # execute in parallel results = parallel_execution(circuit, states, processes=2)
- qibo.parallel.parallel_circuits_execution(circuits, states=None, nshots=1000, processes=None, backend=None)[source]#
Execute multiple circuits
Example
import qibo qibo.set_backend('qibojit') from qibo import set_threads from qibo.models import QFT from qibo.parallel import parallel_circuits_execution import numpy as np # create different circuits circuits = [QFT(n) for n in range(5, 16)] # set threads to 1 per process (optional, requires tuning) set_threads(1) # execute in parallel results = parallel_circuits_execution(circuits, processes=2)
- Parameters:
circuits (list) – list of circuits to execute.
states (optional, list) – list of states to use as initial for each circuit. Must have the same length as
circuits. If one state is given it is used on all circuits. If not given the default initial state on all circuits.nshots (int) – Number of shots when performing measurements, same for all circuits.
processes (int) – number of processes for parallel evaluation.
- Returns:
Circuit evaluation for input states.
- qibo.parallel.parallel_parametrized_execution(circuit, parameters, initial_state=None, processes=None, backend=None)[source]#
Execute circuit for multiple parameters and fixed initial_state.
Example
import numpy as np from qibo import Circuit, gates, set_backend, set_threads from qibo.parallel import parallel_parametrized_execution set_backend('qibojit') # create circuit nqubits = 6 nlayers = 2 circuit = Circuit(nqubits) for l in range(nlayers): circuit.add((gates.RY(q, theta=0) for q in range(nqubits))) circuit.add((gates.CZ(q, q+1) for q in range(0, nqubits-1, 2))) circuit.add((gates.RY(q, theta=0) for q in range(nqubits))) circuit.add((gates.CZ(q, q+1) for q in range(1, nqubits-2, 2))) circuit.add(gates.CZ(0, nqubits-1)) circuit.add((gates.RY(q, theta=0) for q in range(nqubits))) # create random parameters size = len(circuit.get_parameters()) parameters = [ np.random.uniform(0, 2*np.pi, size) for _ in range(10) ] # set threads to 1 per process (optional, requires tuning) set_threads(1) # execute in parallel results = parallel_parametrized_execution(circuit, parameters, processes=2)
- Parameters:
circuit (
qibo.models.Circuit) – the input circuit.parameters (list) – list of parameters for the circuit evaluation.
initial_state (ndarray) – initial state for the circuit evaluation.
processes (int) – number of processes for parallel evaluation. This corresponds to the number of threads, if a single thread is used for each circuit evaluation. If more threads are used for each circuit evaluation then some tuning may be required to obtain optimal performance. Default is
Nonewhich corresponds to a single thread.
- Returns:
Circuit evaluation for input parameters.