HighLevelSynthesis
class qiskit.transpiler.passes.HighLevelSynthesis(*args, **kwargs)
Basen: TransformationPass
Synthese von Objekten auf höherer Ebene und Abrollen von benutzerdefinierten Definitionen.
Die Eingabe für diesen Durchlauf ist ein DAG, das Objekte höherer Ebene enthalten kann, einschließlich abstrakter mathematischer Objekte (z. B. Objekte des Typs LinearFunction), annotierte Operationen (Objekte des Typs AnnotatedOperation), und benutzerdefinierte Gatter.
Im häufigsten Anwendungsfall, wenn entweder basis_gates oder target angegeben wird, werden alle Objekte der höheren Ebene synthetisiert, so dass die Ausgabe ein DAGCircuit ohne solche Objekte. Genauer gesagt, jedes Gatter in der Ausgangs-DAG wird entweder direkt vom Ziel unterstützt oder befindet sich auf equivalence_library.
Die abstrakten mathematischen Objekte werden mit Hilfe von Synthese-Plugins synthetisiert, wobei die in der High-Level-Synthesekonfiguration spezifizierten Synthesemethoden angewendet werden (siehe die Dokumentation zu HLSConfig).
Nehmen wir als Beispiel an, dass op_a und op_b die Namen von zwei übergeordneten Objekten sind, dass op_a-Objekte zwei Synthesemethoden default haben, die keine zusätzlichen Parameter erfordern, und other mit zwei optionalen ganzzahligen Parametern option_1 und option_2, dass op_b-Objekte eine einzige Synthesemethode default haben und qc ein Quantenschaltkreis ist, der op_a und op_b Objekte enthält. Der folgende Codeschnipsel:
hls_config = HLSConfig(op_b=[("other", {"option_1": 7, "option_2": 4})])
pm = PassManager([HighLevelSynthesis(hls_config=hls_config)])
transpiled_qc = pm.run(qc)zeigt, wie die alternative Synthesemethode other für op_b-Objekte ausgeführt wird, während die Methoden default für alle anderen High-Level-Objekte, einschließlich op_a-Objekte, verwendet werden.
Die kommentierten Operationen (bestehend aus einer Basis-Operation und einer Liste von Invers-, Kontroll- und Leistungsmodifikatoren) werden rekursiv synthetisiert, wobei zunächst die Basis-Operation synthetisiert wird und dann Synthesemethoden zur Erstellung von invertierten, kontrollierten oder leistungsfähigen Versionen dieser Operation angewendet werden.)
Die benutzerdefinierten Gatter werden durch rekursives Abwickeln ihrer Definitionen synthetisiert, bis jedes Gatter entweder vom Ziel unterstützt wird oder in der Äquivalenzbibliothek enthalten ist.
Wenn weder basis_gates noch target angegeben ist, synthetisiert der Pass nur die abstrakten mathematischen Objekte der obersten Ebene und die kommentierten Operationen, ohne in das Gatter definitions hinabzusteigen. Dies steht im Einklang mit dem älteren Verhalten des Durchlaufs, der es erlaubt, einige Objekte höherer Ebenen mit Hilfe von Plugins zu synthetisieren und die anderen Gates unberührt zu lassen.
Die High-Level-Synthese übergibt der Syntheseroutine über die jeweiligen Argumente "num_clean_ancillas" und "num_dirty_ancillas" Informationen über verfügbare Hilfsqubits und ob deren Zustand clean (definiert als ) oder dirty (unbekannter Zustand) ist. Wenn qubits_initially_zero gleich True ist (Voreinstellung), wird angenommen, dass sich die Qubits im Zustand befinden. Wenn wir einen synthetisierten Block mit Hilfsqubits an die Schaltung anhängen, verwenden wir zunächst die sauberen Hilfsqubits.
Bei den Synthesemethoden wird davon ausgegangen, dass der Zustand der Hilfsqubits erhalten bleibt. Konkret bedeutet dies, dass saubere Hilfsqubits nach dem synthetisierten Block noch im Zustand sein müssen, während schmutzige Hilfsqubits nur als schmutzige Qubits wiederverwendet werden.
HighLevelSynthesis initialisierung.
Parameter
- hls_config – die Konfigurationsdatei für die High-Level-Synthese, die Syntheseverfahren und Parameter für verschiedene High-Level-Objekte in der Schaltung festlegt. Wenn keine Angaben gemacht werden, werden die Standard-Syntheseverfahren und -parameter verwendet.
- coupling_map – gerichteter Graph, dargestellt als Kopplungskarte.
- Ziel – das Backend-Ziel, das für diesen Durchlauf verwendet werden soll. Wenn dies angegeben wird, wird es anstelle der Kopplungskarte verwendet.
- use_qubit_indices - ein Flag, das angibt, ob dieser Synthesedurchlauf vor oder nach dem Setzen des Layouts erfolgt, d. h. ob die Qubit-Indizes der Higher-Level-Objekte den Qubit-Indizes auf dem Ziel-Backend entsprechen.
- equivalence_library - Die verwendete Äquivalenzbibliothek (Anweisungen in dieser Bibliothek werden bei diesem Durchlauf nicht abgerollt).
- basis_gates – Namen der Zielbasen, in die die Entfaltung erfolgen soll, z. B. [‘u3’, „cx“]. Wird ignoriert, wenn ebenfalls
targetangegeben ist. - min_qubits - Die minimale Anzahl von Qubits für die zu übersetzenden Operationen im Eingabe-Dag.
- qubits_initially_zero - Gibt an, ob sich die Qubits anfänglich im Zustand befinden. Dies ermöglicht es der High-Level-Synthese, saubere Hilfsqubits (d.h. im Zustand Null) zu verwenden, um eine Operation zu synthetisieren.
- optimization_metric - Gibt das Optimierungskriterium an, das von den Standardsynthesemethoden für High-Level-Objekte verwendet wird (sofern verfügbar).
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)
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 HighLevelSynthesis Pass auf dag.
Parameter
dag (DAGCircuit) – eingangstag.
Rückgabe
Ausgabe von dag mit synthetisierten Operationen auf höherer Ebene.
Erhöht
- TranspilerError – wenn der Transpiler den angegebenen DAG nicht synthetisieren kann
- ( zum Beispiel , wenn die angegebene Synthesemethode nicht verfügbar ist )****. –
Rückgabetyp
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