Skip to main content
IBM Quantum Platform

LookaheadSwap

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

GitHub

Basen: TransformationPass

Abbildung der Eingangsschaltung auf eine Backend-Topologie durch Einfügen von SWAPs.

Implementierung des von Sven Jandura eingereichten Swap-Mappers für den Qiskit Developer Challenge 2018, angepasst zur Integration in die Transpiler-Architektur.

Die Aufgabe des Swapper-Passes besteht darin, die Ausgangsschaltung so zu modifizieren, dass sie mit der Topologie des Zielgeräts kompatibel ist (die Menge der auf der Hardware verfügbaren Zwei-Qubit-Gatter) Zu diesem Zweck fügt der Pass SWAP-Gates ein, um die virtuellen Qubits für jedes kommende Gate auf einen Satz gekoppelter physischer Qubits zu verschieben. Da SWAP-Gates jedoch besonders verlustbehaftet sind, besteht das Ziel darin, dieses Remapping mit möglichst wenigen zusätzlichen SWAPs zu erreichen.

Dieser Algorithmus durchsucht die verfügbaren Kombinationen von SWAP-Gattern mit Hilfe einer eingeschränkten Best-First-Beam-Suche, die wie folgt beschrieben wird:

  • Beginnen Sie mit einer Anordnung von virtuellen Qubits auf physischen Qubits.
  • Finden Sie alle Gatter in der Eingabeschaltung, die mit dem aktuellen Layout ausgeführt werden können, und markieren Sie sie als abgebildet.
  • Berechnen Sie für alle möglichen SWAP-Gatter das Layout, das sich aus ihrer Anwendung ergeben würde, und ordnen Sie sie nach dem Abstand des resultierenden Layouts zu den kommenden Gattern (siehe _calc_layout_distance)
  • Für die vier (search_width) SWAPs mit dem höchsten Rang wiederholen Sie das obige Verfahren für das Layout, das bei Anwendung dieser SWAPs entstehen würde.
  • Wiederholen Sie diesen Vorgang bis zu einer Tiefe von vier (search_depth) SWAPs vom ursprünglichen Layout entfernt, so dass insgesamt 256 (search_width^search_depth) potenzielle Layouts entstehen.
  • Wählen Sie das Layout, das die Anzahl der durchführbaren Zwei-Qubits maximiert. Fügen Sie die zugeordneten Gatter, einschließlich der erzeugten SWAPs, zur Ausgangsschaltung hinzu.
  • Wiederholen Sie die obigen Schritte, bis alle Gatter der ursprünglichen Schaltung abgebildet sind.

Weitere Einzelheiten zu dem Algorithmus finden Sie in Svens Blogbeitrag: https://medium.com/qiskit/improving-a-quantum-compiler-48410d7a7084

LookaheadSwap initialisierung.

Parameter

  • coupling_map (Union[CouplingMap, Target]) – CouplingMap des Ziel-Backends.
  • search_depth (int) – vorausschauende Baumtiefe beim Ranking der besten SWAP-Optionen.
  • search_width (int) – breite des Vorausschau-Baums bei der Einstufung der besten SWAP-Optionen.
  • fake_run (bool) – wenn true, wird nur so getan, als ob ein Routing stattfindet, d.h. es wird kein Swap hinzugefügt.

Attribute

is_analysis_pass

Prüfen Sie, ob der Pass ein Analysepass ist.

Wenn der Pass ein AnalysisPass, ist, bedeutet dies, dass der Pass die DAG analysieren und die Ergebnisse dieser Analyse in den Eigenschaftssatz schreiben kann. Änderungen an der DAG sind bei dieser Art von Pass nicht zulässig.

is_transformation_pass

Prüfen Sie, ob der Pass ein Transformationspass ist.

Wenn es sich bei dem Pass um TransformationPass, handelt, bedeutet dies, dass der Pass die DAG manipulieren kann, aber den Eigenschaftssatz nicht ändern kann (aber er kann gelesen werden).


Methoden

execute

execute(passmanager_ir, state, callback=None)

GitHub

Ausführen der Optimierungsaufgabe für die Eingabe Qiskit IR.

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

Optimierte Qiskit IR und Stand des Workflows.

Rückgabetyp

Tupel [ DAGCircuit, PassManagerState ]

name

name()

GitHub

Name des Passes.

Rückgabetyp

str

run

run(dag)

GitHub

Führen Sie den LookaheadSwap Pass auf dag.

Parameter

dag (DAGCircuit) – der abzubildende gerichtete azyklische Graph

Rückgabe

Ein dag, der so zugeordnet ist, dass er mit der coupling_map kompatibel ist, in

die Eigenschaft_set.

Rückgabetyp

DAGCircuit

Erhöht

  • TranspilerError – wenn die Kopplungszuordnung oder das Layout nicht
  • kompatibel mit dem DAG**, oder **, wenn die Kopplungskarte=None -

update_status

update_status(state, run_state)

GitHub

Aktualisieren Sie den Workflow-Status.

Parameter

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

Rückgabe

Aktualisierter Status des Passmanagers.

Rückgabetyp

PassManagerState

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