SabreLayout
class qiskit.transpiler.passes.SabreLayout(*args, **kwargs)
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)
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
name
run
run(dag)
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
Erhöht
TranspilerError – wenn dag breiter ist als das Ziel.
update_status
update_status(state, run_state)
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