Skip to main content
IBM Quantum Platform

SabreLayout

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

GitHub

Basen: TransformationPass

Wählen Sie ein Layout durch iteratives bidirektionales Routing der Eingangsschaltung.

Ausgehend von einem zufälligen Anfangslayout führt der Algorithmus ein vollständiges Routing der Schaltung durch (über die Methode routing_pass), um zu einem endgültigen Layout zu gelangen. Dieses endgültige Layout wird dann als erstes Layout für das Routing der umgekehrten Schaltung verwendet. Der Algorithmus durchläuft mehrere Iterationen, bis er ein anfängliches Layout findet, das die gesamten Routingkosten reduziert.

Diese Methode nutzt die Reversibilität von Quantenschaltungen und versucht, globale Schaltkreisinformationen in die Wahl des anfänglichen Layouts einzubeziehen.

Standardmäßig führt dieser Durchlauf sowohl das Layout als auch das Routing durch und transformiert die Schaltung so, dass das Layout auf den Eingangs-DAG angewendet wird (was bedeutet, dass der Ausgangsschaltung Ancilla-Qubits für ungenutzte Qubits auf der Kopplungskarte zugewiesen werden und die Qubits neu angeordnet werden, um den abgebildeten physikalischen Qubits zu entsprechen); anschließend wird das Routing angewendet (wobei SwapGate Objekte eingefügt werden, um der begrenzten Konnektivität Rechnung zu tragen). Dies unterscheidet sich von den meisten anderen Layout-Durchläufen, die Objekte AnalysisPass sind und lediglich ein anfängliches Layout ermitteln und dieses im Eigenschaftssatz festlegen. Dies geschieht, weil der Durchlauf standardmäßig parallele Seed-Versuche mit unterschiedlichen Zufalls-Seeds durchführt, um zunächst die zufällige Ausgangsdisposition auszuwählen und anschließend die geroutete Ausgabe zu ermitteln, die die geringste Anzahl an Swap-Gates erfordert.

Sie können das Argument routing_pass verwenden, um diesen Durchgang wie einen typischen Layout-Durchgang arbeiten zu lassen. Wenn diese Option angegeben ist, wird der angegebene Routing-Durchlauf nur zur Auswahl eines ersten Layouts verwendet und es werden nicht mehrere Seed-Versuche durchgeführt.

Zusätzlich zum Start mit einem zufälligen Ausgangslayout kann der Pass auch eine zusätzliche Liste von Ausgangslayouts aufnehmen, die für weitere Versuche verwendet werden. Wenn die sabre_starting_layouts bei der Ausführung dieses Durchlaufs im Eigenschaftssatz vorhanden ist, wird dieser für zusätzliche Versuche verwendet. Es wird weiterhin layout_trials mit vollständigen Zufallsstart-Layouts geben, und der Inhalt von sabre_starting_layouts wird zusätzlich zu diesen ausgeführt. Es wird die Ausgabe verwendet, die die geringste Anzahl von Swap Gates ergibt (unabhängig davon, ob sie aus den Zufallsversuchen oder dem Eigenschaftssatz als Ausgangspunkt stammt). Der Wert für dieses Eigenschaftsfeld sollte eine Liste von Layout objekten sein, die die zu verwendenden Startlayouts darstellen. Fehlt ein virtuelles Qubit in einem Layout objekt in der Liste fehlt, wird ein zufälliges Qubit ausgewählt.


Eigenschafts-Set-Felder Lesen

sabre_starting_layouts (list[Layout])

Eine optionale Liste von Layout objekten, die für zusätzliche Layoutversuche verwendet werden sollen. Dies geschieht zusätzlich zu den vollständigen Zufallsversuchen, die mit dem Argument layout_trials angegeben werden.


Geschriebene Eigenschaftswerte

layout (Layout)

Die gewählte anfängliche Zuordnung von virtuellen zu physischen Qubits, einschließlich der Ancilla-Zuweisung.

final_layout (Layout)

Eine Permutation der Art und Weise, wie die Eingangsqubits am Ende der Schaltung vertauscht wurden.

Quellenangaben:

[1] Henry Zou und Matthew Treinish und Kevin Hartman und Alexander Ivrii und Jake Lishman. “LightSABRE: Ein leichtgewichtiger und verbesserter SABRE-Algorithmus" arXiv:2409.08368 [2] Li, Gushu, Yufei Ding, und Yuan Xie. "Tackling the qubit mapping problem for NISQ-era quantum devices" ASPLOS 2019. arXiv:1809.02573

SabreLayout initialisierung.

param coupling_map

gerichteter Graph, der eine Kopplungskarte darstellt.

typ coupling_map

UnionCouplingMap[, Ziel]

param routing_pass

der beim Iterieren zu verwendende Routing-Durchgang. Wenn dieser Pass angegeben wird, funktioniert er wie ein AnalysisPass und füllt nur das Feld layout im Eigenschaftssatz auf, und der Eingabedag wird unverändert zurückgegeben. Dieses Argument schließt sich mit den Argumenten swap_trials und layout_trials gegenseitig aus, und wenn es gleichzeitig mit einem der beiden Argumente angegeben wird, kommt es zu einem Fehler.

type routing_pass

BasePass

param Samen

seed für die Festlegung einer zufälligen ersten Versuchsanordnung.

typ Saatgut

int

param max_iterations

anzahl der Vorwärts-Rückwärts-Iterationen.

typ max_iterations

int

param swap_trials

Die Anzahl der zu durchlaufenden Versuche von SabreSwap für jede Iteration. Dies ist gleichbedeutend mit dem Argument trials auf SabreSwap. Wenn dies nicht angegeben wird (und routing_pass nicht gesetzt ist), wird standardmäßig die Anzahl der physischen CPUs auf Ihrem lokalen System verwendet. Um die Reproduzierbarkeit zwischen verschiedenen Umgebungen zu gewährleisten, ist es am besten, diesen Wert auf eine eindeutige Zahl zu setzen, da die Ausgabe möglicherweise von der Anzahl der durchgeführten Versuche abhängt. Diese Option und das Argument routing_pass schließen sich gegenseitig aus, und es wird ein Fehler ausgegeben, wenn beide verwendet werden.

typ swap_trials

int

param layout_trials

Die Anzahl der Zufallsversuche, mit denen das Layout ausgeführt werden soll. Bei > 1 wird der Versuch ausgewählt, der den Ausgang mit den wenigsten Swap Gates ergibt. Wenn dies nicht angegeben wird (und routing_pass nicht gesetzt ist), wird die Anzahl der lokalen physischen CPUs als Standardwert verwendet. Diese Option und das Argument routing_pass schließen sich gegenseitig aus, und es wird ein Fehler ausgegeben, wenn beide verwendet werden. Zusätzlich zu der durch diesen Wert festgelegten Anzahl von Zufallsversuchen werden je nach coupling_map 3 oder 4 Versuche mit gemeinsamen Layouts durchgeführt.

typ layout_trials

int

param skip_routing

Wenn dies auf True eingestellt ist und routing_pass nicht verwendet wird, wird das Routing nicht auf die Ausgangsschaltung angewendet. Nur das Layout wird im Eigenschaftssatz festgelegt. Dies ist ein Kompromiss, um benutzerdefiniertes Routing mit mehreren Layoutversuchen durchzuführen, da die Verwendung dieser Option dazu führt, dass SabreLayout die Routingstufe intern ausführt, aber das Ergebnis nicht verwendet.

typ skip_routing

Bool

hebt TranspilerError

Wenn sowohl routing_pass als auch swap_trials oder

erhebt sowohl routing_pass als auch layout_trials angegeben sind


Attribute

coupling_map

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 SabreLayout Pass auf dag.

Parameter

dag (DAGCircuit) – DAG, um das Layout zu finden.

Rückgabe

Die Ausgabe dag, wenn Swap Mapping ausgeführt wurde

(andernfalls wird der Eingabe-Dag unverändert zurückgegeben).

Rückgabetyp

DAGCircuit

Erhöht

TranspilerError – wenn dag breiter ist als das Ziel.

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.