-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Closed
Labels
bugSomething isn't workingSomething isn't working
Milestone
Description
Environment
- Qiskit Terra version: 0.43.1 meta package, terra 0.24.1
- Python version: 3.10
- Operating system: docker continuumio/miniconda3
What is happening?
When transpiling (level 2) a circuit with a large multi-cx gate (see doc: here) with a large numebr of qubits (e.g. 28
) the commutation analysis
pass crashes.
How can we reproduce the issue?
Run this python script:
from qiskit import QuantumCircuit, transpile
qc = QuantumCircuit(29)
qc.mct(list(range(28)), qc.num_qubits - 1)
transpile(qc, optimization_level=2)
Produces this output and error:
Traceback (most recent call last):
File "myfile.py", line 7, in <module> transpile(qc, optimization_level=2)
File "...qiskit/compiler/transpiler.py", line 380, in transpile _serial_transpile_circuit(
File "...qiskit/compiler/transpiler.py", line 462, in _serial_transpile_circuit result = pass_manager.run(circuit, callback=callback, output_name=outpu
t_name) File "...qiskit/transpiler/passmanager.py", line 537, in run return super().run(circuits, output_name, callback)
File "...qiskit/transpiler/passmanager.py", line 231, in run return self._run_single_circuit(circuits, output_name, callback)
File "...qiskit/transpiler/passmanager.py", line 292, in _run_single_circuit result = running_passmanager.run(circuit, output_name=output_name, call
back=callback) File "...qiskit/transpiler/runningpassmanager.py", line 125, in run dag = self._do_pass(pass_, dag, passset.options)
File "...qiskit/transpiler/runningpassmanager.py", line 169, in _do_pass dag = self._do_pass(required_pass, dag, options)
File "...qiskit/transpiler/runningpassmanager.py", line 173, in _do_pass dag = self._run_this_pass(pass_, dag)
File "...qiskit/transpiler/runningpassmanager.py", line 227, in _run_this_pass pass_.run(FencedDAGCircuit(dag))
File "...qiskit/transpiler/passes/optimization/commutation_analysis.py", line 75, in run does_commute = self.comm_checker.commute(
File "...qiskit/circuit/commutation_checker.py", line 136, in commute operator_2 = Operator(op2, input_dims=(2,) * len(qarg2), output_dims=(2
,) * len(qarg2)) File "...qiskit/quantum_info/operators/operator.py", line 85, in __init__ self._data = self._init_instruction(data).data
File "...qiskit/quantum_info/operators/operator.py", line 610, in _init_instruction op = Operator(np.eye(dimension))
File "...numpy/lib/twodim_base.py", line 215, in eye m = zeros((N, M), dtype=dtype, order=order)
numpy.core._exceptions._ArrayMemoryError: Unable to allocate 2.00 EiB for a
n array with shape (536870912, 536870912) and data type float64
What should happen?
I would expect the optimizer to skip the pass if too large to optimize and leave it unoptimized.
Any suggestions?
I would skip the optimization pass when the number of qubits is too large (precise threshold to be determined based on ram memory of the current machine).
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working