Skip to main content
IBM Quantum Platform

TwoQubitPeepholeOptimization

class qiskit.transpiler.passes.TwoQubitPeepholeOptimization(*args, **kwargs)

GitHub

Basen: TransformationPass

Vereinheitlichte Optimierung von unitären Peephole-Prozessen mit zwei Qubits

Dieser Transpiler-Durchlauf dient dazu, eine unitäre Peephole-Optimierung für zwei Qubits durchzuführen. Dieser Durchlauf ermittelt alle 2-Qubit-Blöcke im Schaltkreis, berechnet die Unitarität dieses Blocks und synthetisiert diese anschließend. Ist die synthetisierte 2-Qubit-Unitar-Operation „besser“ als der ursprüngliche Teilschaltkreis, wird dieser Teilschaltkreis verwendet, um den ursprünglichen zu ersetzen. Die Heuristik, mit der ermittelt wird, welche Variante besser ist, prüft zunächst die Anzahl der Zwei-Qubit-Gatter im Schaltkreis und bevorzugt die Synthese mit weniger Zwei-Qubit-Gattern. Sind die Anzahlen der Zwei-Qubit-Gatter gleich, wird die geschätzte Fidelity des Schaltkreises herangezogen und der Teilschaltkreis mit der höheren geschätzten Fidelity ausgewählt. Schließlich wird, falls erforderlich, der Teilschaltkreis mit der geringsten Gesamtanzahl an Gattern ausgewählt.

Falls das Ziel überkomplett ist, probiert der Durchlauf alle unterstützten Zerleger für alle Gatter aus, die auf einem bestimmten Qubit unterstützt werden. Die Zerlegung, die unter Verwendung der oben genannten Heuristik die beste erwartete Leistung aufweist, wird ausgewählt und zum Ersetzen des Blocks verwendet.

Dieser Durchlauf ist für die Ausführung auf einer physikalischen Schaltung ausgelegt, und es wird davon ausgegangen, dass es sich bei den Operationen an einem bestimmten Qubit um das Hardware-Qubit aus dem Zielsystem handelt. Die Ausgabe des Durchlaufs nutzt jedoch möglicherweise keine Hardware-Operationen; insbesondere können Einzelqubit-Gatter außerhalb der vom Ziel unterstützten Operationen ausgegeben werden, in der Regel jedoch nur dann, wenn ein vom Ziel TwoQubitControlledUDecomposer unterstütztes parametrisiertes Gatter für die Synthese verwendet wird. Wenn dieser Durchlauf also in einer physikalischen Optimierungsphase (z. B. der Optimierungsphase ) ausgeführt wird, sollte er mit Durchläufen wie BasisTranslator und/oder Optimize1qGatesDecomposition kombiniert werden, um sicherzustellen, dass diese fehlerhaften Einzelqubit-Gatter vor dem Verlassen der Phase durch hardwareunterstützte Operationen ersetzt werden.

Dieser Durchlauf ist multithreaded und führt die Analyse parallel durch, wobei alle auf Ihrem lokalen System verfügbaren Kerne genutzt werden. Weitere Informationen dazu, wie Sie das Threading-Verhalten von Qiskit allgemein steuern können – wodurch auch dieser Durchlauf gesteuert wird –, finden Sie im Konfigurationshandbuch.

Dieser Pass entspricht in seiner Funktionsweise der sequenziellen Ausführung von ConsolidateBlocks und UnitarySynthesis in Ihrem Pass-Manager. Dieser Durchlauf bietet jedoch eine verbesserte Laufzeitleistung, da die Synthese parallel durchgeführt wird. Zudem verfügt es über verbesserte Heuristiken, die durch die Optimierung in einem einzigen Schritt ermöglicht werden und zu einer besseren Ausgabequalität führen können, insbesondere bei übervollständigen und/oder heterogenen Zielfunktionen. Diese Heuristiken und dieser Durchlauf als Ganzes gelten jedoch nur für physikalische Schaltungen. Außerdem werden hier – anders als bei UnitarySynthesis „pass“ – keine Plugins zur unitären Synthese verwendet. Dies ist ein Kompromiss zugunsten der Leistung, bei dem auf die über diese Schnittstelle bereitgestellte Erweiterbarkeit verzichtet wird. TwoQubitBasisDecomposer Intern werden derzeit nur und TwoQubitControlledUDecomposer zur Synthese der Zwei-Qubit-Unitarien verwendet. UnitarySynthesisSie sollten diesen Pass nicht verwenden, wenn Sie die pluggable Schnittstelle und die Möglichkeit zur Nutzung verschiedener Synthesealgorithmen benötigen; stattdessen sollten Sie eine Kombination aus ConsolidateBlocks und UnitarySynthesis verwenden, um den Plugin-Mechanismus in zu nutzen.

from qiskit.circuit import QuantumCircuit
from qiskit.transpiler.passes import TwoQubitPeepholeOptimization
from qiskit.providers.fake_provider import GenericBackendV2

# Build an unoptimized 2 qubit circuit
unoptimized = QuantumCircuit(2)
for i in range(10):
  if i % 2:
    unoptimized.cx(0, 1)
  else:
    unoptimized.cx(1, 0)
# Generate a target with random error rates
backend = GenericBackendV2(2, ["u", "cx"], coupling_map=[[0, 1], [1, 0]])
# Instantiate pass
peephole_pass = TwoQubitPeepholeOptimization(backend.target)
# Run pass and visualize output
optimized = peephole_pass(unoptimized)
optimized.draw("mpl")
Optimierte Schaltung

Den Pass initialisieren

Parameter

  • Ziel – Das Ziel, für das der Durchlauf ausgeführt werden soll
  • approximation_degree – Heuristischer Regler zur Schaltungsnäherung ( 1.0=no -Näherung, 0.0=maximal -Näherung). Durch eine Näherung lässt sich die Anzahl der in den synthetisierten Unitarien verwendeten Gatter verringern, allerdings auf Kosten einer Abweichung vom ursprünglichen Unitar. targetIn Nonediesem Fall erfolgt die Approximation auf der Grundlage der im … angegebenen Gattertreuewerte.

Attribute

is_analysis_pass

Prüfen Sie, ob es sich bei dem Durchlauf um einen Analysedurchlauf handelt.

Wenn es sich bei dem Pass um einen „ AnalysisPass, “ handelt, bedeutet dies, dass der Pass den DAG analysieren und die Ergebnisse dieser Analyse in den Eigenschaftssatz schreiben kann. Änderungen am DAG sind bei dieser Art von Durchlauf nicht zulässig.

is_transformation_pass

Prüfe, ob es sich bei dem Pass um einen Transformations-Pass handelt.

Wenn es sich bei dem Pass um einen „ TransformationPass, “ handelt, bedeutet dies, dass der Pass den DAG bearbeiten kann, die Eigenschaften jedoch nicht ändern darf (sie können jedoch gelesen werden).


Methoden

execute

execute(passmanager_ir, state, callback=None)

GitHub

Optimierungsaufgabe für die Qiskit-IR-Eingabe ausführen.

Parameter

  • passmanager_ir (DAGCircuit) – Qiskit IR zur Optimierung.
  • state (DAGCircuit) – Zustand, der mit der Ausführung des Workflows durch den Pass-Manager selbst verbunden ist.
  • callback (Callable[[Task, DAGCircuit, PropertySet, float, int], None] | None) – Eine Callback-Funktion, die bei jeder Ausführung einer Optimierungsaufgabe aufgerufen wird.

Rückgabe

Optimiertes Qiskit-IR und aktueller Stand des Workflows.

Rückgabetyp

Tupel [ DAGCircuit, PassManagerState ]

name

name()

GitHub

Name des Passes.

Rückgabetyp

str

run

run(dag)

GitHub

Führen Sie einen Durchlauf auf dem DAGCircuit durch. Dies wird vom Pass-Entwickler umgesetzt.

Parameter

dag (DAGCircuit) – der Tag, an dem die Passfahrt stattfindet.

Erhöhungen

NotImplementedError – wenn dies für einen Durchlauf nicht umgesetzt wird.

Rückgabetyp

DAGCircuit

update_status

update_status(state, run_state)

GitHub

Status des Workflows aktualisieren.

Parameter

  • state (PassManagerState) – Übergeben Sie den Status des Managers zur Aktualisierung.
  • run_state (RunState) – Fertigstellungsstatus der aktuellen Aufgabe.

Rückgabe

Status des Pass-Managers aktualisiert.

Rückgabetyp

PassManagerState

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.