Skip to content

Commit

Permalink
Merge pull request #119 from unitaryfund/111-qiskit_accelerate-no-lon…
Browse files Browse the repository at this point in the history
…ger-imports

Use Qiskit `ConsolidateBlocks` instead of UCC customized pass
  • Loading branch information
Misty-W authored Dec 10, 2024
2 parents 8168b2e + 7c7554e commit 4ba1358
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 46 deletions.
16 changes: 8 additions & 8 deletions benchmarks/load_ucc_benchmarks.ipynb

Large diffs are not rendered by default.

25 changes: 25 additions & 0 deletions benchmarks/results/results_2024-12-04_14-48-34.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
circuit_name,compiler,compile_time,raw_multiq_gates,compiled_multiq_gates,gate_reduction_per_s,reduction_factor,compiled_ratio
prep_select,cirq,30.036226987838745,9744.0,9712.0,0.033402826970318225,1.0032948929159802,0.9967159277504105
prep_select,pytket,0.06528472900390625,9744.0,9712.0,15.367987402627481,1.0032948929159802,0.9967159277504105
prep_select,qiskit,2.6683719158172607,9744.0,9708.0,0.37615006959103237,1.003708281829419,0.9963054187192119
prep_select,ucc,1.6959500312805176,9744.0,9702.0,0.5921925680620975,1.0043290043290043,0.9956896551724138
qaoa_barabasi_albert,cirq,1.9393212795257568,1176.0,1176.0,0.515644318740493,1.0,1.0
qaoa_barabasi_albert,pytket,0.012243986129760742,1176.0,1176.0,81.67274851523707,1.0,1.0
qaoa_barabasi_albert,qiskit,0.22677993774414062,1176.0,1176.0,4.409561136436273,1.0,1.0
qaoa_barabasi_albert,ucc,0.16925907135009766,1176.0,1176.0,5.908102839177151,1.0,1.0
qcnn,cirq,0.8736429214477539,388.0,388.0,1.1446324069596465,1.0,1.0
qcnn,pytket,0.0077588558197021484,388.0,388.0,128.88498294564116,1.0,1.0
qcnn,qiskit,0.08816099166870117,388.0,388.0,11.342885113609935,1.0,1.0
qcnn,ucc,0.05583906173706055,388.0,388.0,17.90861036864982,1.0,1.0
qft,cirq,12.922126054763794,10050.0,4648.0,0.16732697859835224,2.1622203098106714,0.46248756218905474
qft,pytket,0.055418968200683594,10050.0,5890.0,30.788769423448986,1.7062818336162988,0.5860696517412936
qft,qiskit,11.507505893707275,10050.0,3244.0,0.26921794832169615,3.098027127003699,0.3227860696517413
qft,ucc,1.4449641704559326,10050.0,2740.0,2.5383904228722134,3.667883211678832,0.272636815920398
qv,cirq,81.68747806549072,15000.0,14856.0,0.012360438554637457,1.0096930533117932,0.9904
qv,pytket,1.8517069816589355,15000.0,15000.0,0.5400422474532686,1.0,1.0
qv,qiskit,11.313803911209106,15000.0,14856.0,0.08924434798727983,1.0096930533117932,0.9904
qv,ucc,3.818204879760742,15000.0,14856.0,0.26444182151248596,1.0096930533117932,0.9904
square_heisenberg,cirq,2.4363739490509033,2160.0,540.0,1.6417840954005487,4.0,0.25
square_heisenberg,pytket,0.03080010414123535,2160.0,2160.0,32.46742268839262,1.0,1.0
square_heisenberg,qiskit,0.2524127960205078,2160.0,540.0,15.847057134437081,4.0,0.25
square_heisenberg,ucc,0.1512289047241211,2160.0,540.0,26.44997004571969,4.0,0.25
25 changes: 25 additions & 0 deletions benchmarks/results/results_2024-12-09_11-32-45.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
circuit_name,compiler,compile_time,raw_multiq_gates,compiled_multiq_gates,gate_reduction_per_s,reduction_factor,compiled_ratio
prep_select,cirq,30.363166332244873,9744.0,9712.0,0.03304315768446414,1.0032948929159802,0.9967159277504105
prep_select,pytket,0.06487512588500977,9744.0,9712.0,15.465016510246254,1.0032948929159802,0.9967159277504105
prep_select,qiskit,0.5075030326843262,9744.0,9708.0,1.9777384905869897,1.003708281829419,0.9963054187192119
prep_select,ucc,2.4537041187286377,9744.0,9702.0,0.40931137404186585,1.0043290043290043,0.9956896551724138
qaoa_barabasi_albert,cirq,2.006441116333008,1176.0,1176.0,0.49839489026600997,1.0,1.0
qaoa_barabasi_albert,pytket,0.007610797882080078,1176.0,1176.0,131.3922686548462,1.0,1.0
qaoa_barabasi_albert,qiskit,0.0509798526763916,1176.0,1176.0,19.6155921898749,1.0,1.0
qaoa_barabasi_albert,ucc,0.15455985069274902,1176.0,1176.0,6.469985546168192,1.0,1.0
qcnn,cirq,0.8724081516265869,388.0,388.0,1.146252471547315,1.0,1.0
qcnn,pytket,0.007628917694091797,388.0,388.0,131.080192512032,1.0,1.0
qcnn,qiskit,0.024214982986450195,388.0,388.0,41.296745926254125,1.0,1.0
qcnn,ucc,0.04055976867675781,388.0,388.0,24.654972960263343,1.0,1.0
qft,cirq,13.109501838684082,10050.0,4648.0,0.1649353527248685,2.1622203098106714,0.46248756218905474
qft,pytket,0.055985212326049805,10050.0,5890.0,30.477366481690904,1.7062818336162988,0.5860696517412936
qft,qiskit,0.1860363483428955,10050.0,3244.0,16.652805511391392,3.098027127003699,0.3227860696517413
qft,ucc,0.7190699577331543,10050.0,2740.0,5.100871163136505,3.667883211678832,0.272636815920398
qv,cirq,271.8302810192108,15000.0,14856.0,0.003714424491362815,1.0096930533117932,0.9904
qv,pytket,1.8324270248413086,15000.0,15000.0,0.5457243243215111,1.0,1.0
qv,qiskit,6.1341681480407715,15000.0,14856.0,0.1646014633026134,1.0096930533117932,0.9904
qv,ucc,2.500671863555908,15000.0,14856.0,0.40376871033212197,1.0096930533117932,0.9904
square_heisenberg,cirq,3.3163862228393555,2160.0,540.0,1.2061321363756488,4.0,0.25
square_heisenberg,pytket,0.03437614440917969,2160.0,2160.0,29.089940631415413,1.0,1.0
square_heisenberg,qiskit,0.0907599925994873,2160.0,540.0,44.07228213042622,4.0,0.25
square_heisenberg,ucc,0.09435701370239258,2160.0,540.0,42.3921852022175,4.0,0.25
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
qiskit==1.2.0
qiskit==1.3.0
cirq-core>=1.4.0
pytket>=1.3.0
qbraid>=0.7.3
Expand Down
2 changes: 1 addition & 1 deletion ucc/transpiler_passes/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from .commutative_cancellation import CommutativeCancellation
from .collect_2q_blocks import Collect2qBlocks
from .commutation_analysis import CommutationAnalysis
from .consolidate_blocks import ConsolidateBlocks
# from .consolidate_blocks import ConsolidateBlocks
from .unitary_synthesis import UnitarySynthesis
from .collect_2q_blocks import Collect2qBlocks
from .collect_1q_runs import Collect1qRuns
Expand Down
36 changes: 6 additions & 30 deletions ucc/transpiler_passes/optimize_1q_decomposition.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
)
from qiskit.circuit import Qubit
from qiskit.circuit.quantumcircuitdata import CircuitInstruction
from qiskit.dagcircuit.dagcircuit import DAGCircuit
from qiskit.dagcircuit import DAGCircuit
from qiskit.dagcircuit.dagnode import DAGOpNode


Expand Down Expand Up @@ -113,37 +113,13 @@ def run(self, dag):
Returns:
DAGCircuit: the optimized DAG.
"""
runs = []
qubits = []
bases = []
for run in dag.collect_1q_runs():
qubit = dag.find_bit(run[0].qargs[0]).index
runs.append(run)
qubits.append(qubit)
bases.append(self._global_decomposers)
best_sequences = euler_one_qubit_decomposer.optimize_1q_gates_decomposition(
runs, qubits, bases, simplify=True
euler_one_qubit_decomposer.optimize_1q_gates_decomposition(
dag,
global_decomposers=self._global_decomposers,
basis_gates=self._basis_gates,
)
for index, best_circuit_sequence in enumerate(best_sequences):
run = runs[index]
qubit = qubits[index]
if best_circuit_sequence is not None:
(_, _, best_circuit_sequence) = best_circuit_sequence

first_node_id = run[0]._node_id
qubit = run[0].qargs
for gate, angles in best_circuit_sequence:
op = CircuitInstruction.from_standard(gate, qubit, angles)
node = DAGOpNode.from_instruction(op, dag=dag)
node._node_id = dag._multi_graph.add_node(node)
dag._increment_op(gate.name)
dag._multi_graph.insert_node_on_in_edges(node._node_id, first_node_id)
dag.global_phase += best_circuit_sequence.global_phase
# Delete the other nodes in the run
for current_node in run:
dag.remove_op_node(current_node)

return dag


def _possible_decomposers(basis_set):
decomposers = []
Expand Down
4 changes: 1 addition & 3 deletions ucc/transpiler_passes/unitary_synthesis.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
RGate,
)
from qiskit.converters import circuit_to_dag, dag_to_circuit
from qiskit.dagcircuit.dagcircuit import DAGCircuit, DAGOpNode
from qiskit.dagcircuit import DAGCircuit, DAGOpNode
from qiskit.exceptions import QiskitError
from qiskit.providers.models.backendproperties import BackendProperties
from qiskit.quantum_info import Operator
Expand Down Expand Up @@ -574,14 +574,12 @@ def _run_main_loop(
params=user_gate_node.params,
qubits=tuple(qubits[x] for x in qargs),
),
dag=out_dag,
)
else:
node = DAGOpNode.from_instruction(
CircuitInstruction.from_standard(
gate, tuple(qubits[x] for x in qargs), params
),
dag=out_dag,
)
out_dag._apply_op_node_back(node)
out_dag.global_phase += global_phase
Expand Down
6 changes: 3 additions & 3 deletions ucc/transpilers/ucc_defaults.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
from qiskit.transpiler import PassManager
from qiskit.circuit.equivalence_library import SessionEquivalenceLibrary as sel
from qiskit.transpiler import CouplingMap
from qiskit.transpiler.passes import CollectCliffords, HighLevelSynthesis, HLSConfig
from qiskit.transpiler.passes import BasisTranslator, ConsolidateBlocks, CollectCliffords, HighLevelSynthesis, HLSConfig
from qiskit.transpiler.passes.synthesis.unitary_synthesis import DefaultUnitarySynthesis


from ..transpiler_passes import BasisTranslator, CommutativeCancellation, Collect2qBlocks, ConsolidateBlocks, UnitarySynthesis, Optimize1qGatesDecomposition, CXCancellation, SpectralMapping, SabreLayout
from ..transpiler_passes import CommutativeCancellation, Collect2qBlocks, UnitarySynthesis, Optimize1qGatesDecomposition, CXCancellation, SpectralMapping, SabreLayout

from qiskit.transpiler.passes import Optimize1qGatesSimpleCommutation

Expand Down Expand Up @@ -45,7 +45,7 @@ def add_local_passes(self, local_iterations):
self.pass_manager.append(Collect2qBlocks())
self.pass_manager.append(ConsolidateBlocks(force_consolidate=True))
self.pass_manager.append(UnitarySynthesis(basis_gates=self.target_basis))
self.pass_manager.append(Optimize1qGatesDecomposition(basis=self._1q_basis))
# self.pass_manager.append(Optimize1qGatesDecomposition(basis=self._1q_basis))
self.pass_manager.append(CollectCliffords())
self.pass_manager.append(HighLevelSynthesis(hls_config=HLSConfig(clifford=["greedy"])))
self.pass_manager.append(BasisTranslator(sel, target_basis=self.target_basis))
Expand Down

0 comments on commit 4ba1358

Please sign in to comment.