QkTranspiler
Die qk_transpile() Funktion macht den Qiskit-Transpiler (qiskit.transpiler) für C verfügbar. Die Grundfunktionalität basiert auf demselben Code wie die Version für den „ Python “-Bereich, doch der Transpiler, der für C verfügbar ist, weist mehr Einschränkungen auf als der für „ Python “ verfügbare. Der Transpiler geht davon aus, dass eine Schaltung ausschließlich unter Verwendung der C-API erstellt wurde, und ist ausschließlich für den Einsatz mit einer eigenständigen C-API vorgesehen. In einem Anwendungsfall, in dem „ Python “ und „/C“ gemischt verwendet werden, funktioniert dies möglicherweise nicht ordnungsgemäß. Wenn Sie C- und „ Python “-Schaltungen kombinieren, sollten Sie für diese Schaltungen die Funktionen generate_preset_pass_manager() transpile() oder aufrufen.
Datentypen
QkTranspileResult
struct QkTranspileResult
Das Container-Ergebnisobjekt von qk_transpile
Wenn der Transpiler eine Quantenschaltung für ein bestimmtes Ziel erfolgreich kompiliert hat, gibt er die transpilierte Schaltung und das Layout zurück. Die Funktion qk_transpile schreibt Zeiger auf die Felder in dieser Struktur, wenn sie erfolgreich ausgeführt wird. Sie können diese Struktur mit Null-Zeigern initialisieren oder sie ungesetzt lassen, da die Werte von qk_transpile nie gelesen, sondern nur beschrieben werden. Nach dem Aufruf von qk_transpile sind Sie für den Aufruf von qk_circuit_free und qk_transpile_layout_free für die Mitglieder dieser Struktur verantwortlich.
QkCircuit *Schaltkreis
Die zusammengestellte Schaltung.
QkTranspileLayout *Layout
Metadaten über die anfänglichen und endgültigen virtuellen und physischen Layouts.
QkTranspileOptions
struct QkTranspileOptions
Die Optionen für die Ausführung des Transpilers
uint8_t Optimierungsstufe
Die Optimierungsstufe, mit der der Transpiler ausgeführt werden soll. Gültige Werte sind 0, 1, 2 oder 3.
int64_t Samen
Das Saatgut für den Transpiler. Wird dieser Wert auf eine negative Zahl gesetzt, bedeutet dies, dass kein Seed gesetzt wird und die im Transpiler verwendeten RNGs aus der Systementropie geimpft werden.
doppelte Annäherung_Grad
Der Näherungsgrad wird über einen heuristischen Regler eingestellt, wobei „ 1.0 “ keine Näherung (bis auf die numerische Toleranz) und „ 0.0 “ die maximale Näherung bedeutet. Ein NAN Wert gibt an, dass für eine Operation im Ziel eine Annäherung bis zur angegebenen Fehlerrate zulässig ist.
QkTranspilerStageState
struct QkTranspilerStageState
Ein Container, in dem einzelne Attribute gesammelt werden, die von den Transpiler-Stufen gemeinsam genutzt werden. Bei korrekter Transpilation schreibt jede einzelne Stufe bestimmte Attribute in diesen Container, die von den nachfolgenden Stufen benötigt werden. Wenn der Container nicht initialisiert ist, initialisiert jede Stufe bei Bedarf ein neues Objekt.
qk_transpile_state_new
void qk_transpile_state_new(QkTranspilerStageState **state)Erstelle einen Zeiger auf ein leeres
QkTranspilerStageStateObjektSicherheit
Das Verhalten ist nicht definiert, wenn kein gültiger,
statezugewiesener Zeiger ist.Parameter
- state – ein Zeiger auf den zugewiesenen Speicherbereich, in dem der Zeiger gespeichert werden soll.
qk_transpile_state_free
void qk_transpile_state_free(QkTranspilerStageState *state)Ein
QkTranspilerStageStateObjekt freigebenSicherheit
Das Verhalten ist nicht definiert, wenn kein gültiger,
statenicht-null-Zeiger auf ein istQkTranspilerStageState.Parameter
- state – ein Zeiger auf den freizugebenden Zustand
qk_transpile_state_layout
QkTranspileLayout *qk_transpile_state_layout(QkTranspilerStageState *state)Ruft ein
QkTranspileLayoutObjekt von einemQkTranspilerStageStateObjekt ab.Dieser Zeiger gehört dem
stateObjekt und sollte nicht mit freigegebenqk_transpile_layout_freewerden. Geben Sie stattdessen das ursprünglichestateObjekt mit freiqk_transpile_state_free.Sicherheit
Das Verhalten ist nicht definiert, wenn kein gültiger,
statenicht-null-Zeiger auf ein istQkTranspilerStageState.Parameter
- state – ein Zeiger auf den Zustand, aus dem das Layout abgerufen werden soll.
Rückgabe
ein Zeiger auf ein
QkTranspileLayoutObjekt, das sich im Besitz des Staates befindet.qk_transpile_state_layout_set
void qk_transpile_state_layout_set(QkTranspilerStageState *state, QkTranspileLayout *layout)Legt ein
QkTranspileLayoutObjekt als Layout für einQkTranspilerStageStateObjekt fest.Der Aufruf dieser Methode verbraucht das
QkTranspileLayoutObjekt, was bedeutet, dass der Benutzer den Aufruf nicht mehr durchführenqk_transpile_layout_freemuss. Der Benutzer sollte den dafür zugewiesenen Speicherplatz dennoch mitfree… freigeben.Sicherheit
Das Verhalten ist nicht definiert, wenn kein gültiger,
statenicht-null-Zeiger auf ein istQkTranspilerStageState. Das Verhalten ist nicht definiert, wenn kein gültigerstateZeiger auf ein istQkTranspileLayout.Parameter
- state – ein Zeiger auf den Zustand, für den das Layout festgelegt werden soll.
- layout – ein Zeiger auf das zu verwendende Layout. Möglicherweise,
NULLum das Layout aufzuheben.
Funktionen
qk_transpiler_default_options
QkTranspileOptions qk_transpiler_default_options(void)
Standardeinstellungen für Transpiler-Optionen generieren
Diese Funktion erzeugt eine QkTranspileOptions mit den Standardeinstellungen. Derzeit ist dies optimization_level 2, kein Seed und keine Approximation.
Rückgabe
Ein QkTranspileOptions Objekt mit Standardeinstellungen.
qk_transpile_stage_init
QkExitCode qk_transpile_stage_init(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, QkTranspilerStageState **state, char **error)
Führen Sie die voreingestellte Initialisierungsphase des Transpilers auf einer Schaltung aus
Der Qiskit-Transpiler ist ein Quanten-Schaltkreis-Compiler, der einen gegebenen Eingangs-Schaltkreis so umschreibt, dass er den Einschränkungen einer QPU entspricht, und den Schaltkreis für die Ausführung optimiert. Diese Funktion führt die erste Stufe des Transpilers aus, init, der Optimierungen abstrakter Schaltkreise durchführt und Multi-Qubit-Operationen auf Ein- und Zwei-Qubit-Operationen reduziert. Weitere Informationen finden Sie unter Initialisierungsphase.
Diese Funktion sollte nur mit Schaltungen verwendet werden, die mit der C-API von Qiskit erstellt wurden. Es trifft Annahmen über die Schaltung, indem es nur über C bereitgestellte Funktionen verwendet. Wenn Sie sich in einer gemischten Python und C-Umgebung befinden, ist es in der Regel besser, den Transpiler über Python aufzurufen.
Diese Funktion ist intern multithreading-fähig und startet einen Thread-Pool mit Threads, die standardmäßig der vom Betriebssystem gemeldeten Anzahl von CPUs entsprechen. Dazu gehören logische Kerne auf CPUs mit gleichzeitigem Multithreading. Sie können die Anzahl der Threads mit der Umgebungsvariablen RAYON_NUM_THREADS einstellen. Zum Beispiel würde die Einstellung RAYON_NUM_THREADS=4 den Thread-Pool auf 4 Threads begrenzen.
Sicherheit
Das Verhalten ist nicht definiert, wenn dag, target, oder keine gültigen, statenicht-null-Zeiger auf einen QkDag, QkTarget, bzw. einen QkTranspileLayout Zeiger sind. options muss ein gültiger Zeiger auf a QkTranspileOptions oder sein NULL. error muss ein gültiger Zeiger auf einen char Zeiger oder sein NULL. Der Wert des inneren Zeigers für state wird durch diese Funktion überschrieben. Wenn der Wert, auf den verwiesen wird, freigegeben werden muss, muss dies außerhalb dieser Funktion erfolgen, da er von dieser Funktion nicht freigegeben wird.
Parameter
- dag – Ein Zeiger auf den Schaltkreis, auf dem der Transpiler ausgeführt werden soll.
- target - Ein Zeiger auf das Ziel, für das die Schaltung kompiliert werden soll.
- options - Ein Zeiger auf ein Optionsobjekt, das Benutzeroptionen definiert. Wenn dies ein Null-Zeiger ist, werden die Standardwerte verwendet. Unter
qk_transpile_default_optionsfinden Sie weitere Einzelheiten zu den Standardwerten. - Zustand – Ein Zeiger auf einen Zeiger auf ein
QkTranspilerStageStateObjekt. Bei erfolgreicher Ausführung (Rückgabewert 0) wird ein Zeiger auf das vom Transpiler erstellte Statusobjekt in diesen Zeiger geschrieben. - Fehler – Ein Zeiger auf einen Zeiger mit einer null-terminierten Zeichenkette mit einer Fehlerbeschreibung. Wenn der Transpiler fehlschlägt, wird ein Zeiger auf die Zeichenfolge mit der Fehlerbeschreibung in diesen Zeiger geschrieben. Dieser Zeiger muss mit freigegeben
qk_str_freewerden. Dies kann ein Nullzeiger sein, in diesem Fall wird der Fehler nicht ausgegeben.
Rückgabe
Der Rückgabecode für den Transpiler, QkExitCode_Success bedeutet Erfolg und alle anderen Werte bedeuten einen Fehler.
qk_transpile_stage_routing
QkExitCode qk_transpile_stage_routing(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, QkTranspilerStageState *state, char **error)
Führen Sie die voreingestellte Routing-Phase des Transpilers auf einer Schaltung aus
Der Qiskit-Transpiler ist ein Quanten-Schaltkreis-Compiler, der einen gegebenen Eingangs-Schaltkreis so umschreibt, dass er den Einschränkungen einer QPU entspricht, und den Schaltkreis für die Ausführung optimiert. Diese Funktion führt die dritte Stufe des voreingestellten Pass-Managers aus, das Routing, das alle Anweisungen im Schaltkreis in solche übersetzt, die vom Ziel unterstützt werden. Weitere Informationen finden Sie unter „Routing-Phase “.
Diese Funktion sollte nur mit Schaltungen verwendet werden, die mit der C-API von Qiskit erstellt wurden. Es trifft Annahmen über die Schaltung, indem es nur über C bereitgestellte Funktionen verwendet. Wenn Sie sich in einer gemischten Python und C-Umgebung befinden, ist es in der Regel besser, den Transpiler über Python aufzurufen.
Diese Funktion ist intern multithreading-fähig und startet einen Thread-Pool mit Threads, die standardmäßig der vom Betriebssystem gemeldeten Anzahl von CPUs entsprechen. Dazu gehören logische Kerne auf CPUs mit gleichzeitigem Multithreading. Sie können die Anzahl der Threads mit der Umgebungsvariablen RAYON_NUM_THREADS einstellen. Zum Beispiel würde die Einstellung RAYON_NUM_THREADS=4 den Thread-Pool auf 4 Threads begrenzen.
Sicherheit
Das Verhalten ist undefiniert, wenn dag, target oder keine gültigen, von Null verschiedenen layoutZeiger auf einen QkDag, bzw. einen QkTranspileLayout QkTargetZeiger sind. options muss ein gültiger Zeiger auf a QkTranspileOptions oder sein NULL. error muss ein gültiger Zeiger auf einen char Zeiger oder sein NULL.
Parameter
- dag – Ein Zeiger auf den Schaltkreis, auf dem der Transpiler ausgeführt werden soll.
- target - Ein Zeiger auf das Ziel, für das die Schaltung kompiliert werden soll.
- options - Ein Zeiger auf ein Optionsobjekt, das Benutzeroptionen definiert. Wenn dies ein Null-Zeiger ist, werden die Standardwerte verwendet. Unter
qk_transpile_default_optionsfinden Sie weitere Einzelheiten zu den Standardwerten. - state – Ein Zeiger auf einen Zeiger auf ein
QkTranspilerStageStateObjekt, das das Layout enthält. In der Regel müssen Sie vor dieser Funktionqk_transpile_stage_layoutdie Funktion ausführen, wodurch einQkTranspilerStageStateObjekt mit dem voreingestellten Layout bereitgestellt wird. Du möchtest den Rückgabewert dieser Funktion als Eingabe für diese Funktion verwenden. Wenn Sie kein Layout-Objekt haben (z. B. weil Sie einen eigenen Layout-Durchlauf durchgeführt haben). Sie können das Programm ausführen, um einqk_transpile_layout_generate_from_mappingeinfaches Layout zu generieren (bei dem das virtuelle Qubit 0 im Schaltkreis dem physikalischen Qubit 0 im Ziel zugeordnet wird, 1 -> 1, 2 -> 2 usw.), das dem aktuellen Zustand des DAG entspricht. Auf diese Weise können Sie ein Layout-Objekt für die Routing-Phase erstellen, wenn Sie Ihr eigenes Layout generieren. - Fehler – Ein Zeiger auf einen Zeiger mit einer null-terminierten Zeichenkette mit einer Fehlerbeschreibung. Wenn der Transpiler fehlschlägt, wird ein Zeiger auf die Zeichenfolge mit der Fehlerbeschreibung in diesen Zeiger geschrieben. Dieser Zeiger muss mit freigegeben
qk_str_freewerden. Dies kann ein Nullzeiger sein, in diesem Fall wird der Fehler nicht ausgegeben.
Rückgabe
Der Rückgabecode für den Transpiler, QkExitCode_Success bedeutet Erfolg und alle anderen Werte bedeuten einen Fehler.
qk_transpile_stage_optimization
QkExitCode qk_transpile_stage_optimization(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, char **error, QkTranspilerStageState *state)
Führen Sie die voreingestellte Optimierungsphase des Transpilers auf einer Schaltung aus
Der Qiskit-Transpiler ist ein Quanten-Schaltkreis-Compiler, der einen gegebenen Eingangs-Schaltkreis so umschreibt, dass er den Einschränkungen einer QPU entspricht, und den Schaltkreis für die Ausführung optimiert. Diese Funktion führt die vierte Stufe des voreingestellten Pass-Managers aus, die Optimierung, die den Schaltkreis für das vorgegebene Ziel optimiert, nachdem der Schaltkreis in einen physikalischen Schaltkreis umgewandelt wurde. Weitere Informationen finden Sie unter Optimierungsphase.
Diese Funktion sollte nur mit Schaltungen verwendet werden, die mit der C-API von Qiskit erstellt wurden. Es trifft Annahmen über die Schaltung, indem es nur über C bereitgestellte Funktionen verwendet. Wenn Sie sich in einer gemischten Python und C-Umgebung befinden, ist es in der Regel besser, den Transpiler über Python aufzurufen.
Diese Funktion ist intern multithreading-fähig und startet einen Thread-Pool mit Threads, die standardmäßig der vom Betriebssystem gemeldeten Anzahl von CPUs entsprechen. Dazu gehören logische Kerne auf CPUs mit gleichzeitigem Multithreading. Sie können die Anzahl der Threads mit der Umgebungsvariablen RAYON_NUM_THREADS einstellen. Zum Beispiel würde die Einstellung RAYON_NUM_THREADS=4 den Thread-Pool auf 4 Threads begrenzen.
Sicherheit
Das Verhalten ist undefiniert, wenn dag und keine gültigen, von Null verschiedenen target Zeiger auf ein bzw. QkTarget ein QkDag sind. options muss ein gültiger Zeiger auf a QkTranspileOptions oder sein NULL. error muss ein gültiger Zeiger auf einen char Zeiger oder sein NULL.
Parameter
- dag – Ein Zeiger auf den Schaltkreis, auf dem der Transpiler ausgeführt werden soll.
- target - Ein Zeiger auf das Ziel, für das die Schaltung kompiliert werden soll.
- options - Ein Zeiger auf ein Optionsobjekt, das Benutzeroptionen definiert. Wenn dies ein Null-Zeiger ist, werden die Standardwerte verwendet. Unter
qk_transpile_default_optionsfinden Sie weitere Einzelheiten zu den Standardwerten. - Fehler – Ein Zeiger auf einen Zeiger mit einer null-terminierten Zeichenkette mit einer Fehlerbeschreibung. Wenn der Transpiler fehlschlägt, wird ein Zeiger auf die Zeichenfolge mit der Fehlerbeschreibung in diesen Zeiger geschrieben. Dieser Zeiger muss mit freigegeben
qk_str_freewerden. Dies kann ein Nullzeiger sein, in diesem Fall wird der Fehler nicht ausgegeben. - state – Ein Zeiger auf ein
QkTranspilerStageStateObjekt, das das Layout enthält. In der Regel müssen Sie vor dieser Funktionqk_transpile_stage_layoutdie Funktion ausführen, wodurch einQkTranspileLayoutObjekt mit dem gewünschten Ausgangslayout bereitgestellt wird. Dieses Layout aus der Funktion übernehmen Sie dann als Eingabe für diese Funktion. Wenn Sie kein Layout-Objekt haben (z. B. weil Sie einen eigenen Layout-Durchlauf durchgeführt haben). Sie können das Programm ausführen, um einqk_transpile_layout_generate_from_mappingeinfaches Layout zu generieren (bei dem das virtuelle Qubit 0 im Schaltkreis dem physikalischen Qubit 0 im Ziel zugeordnet wird, 1 -> 1, 2 -> 2 usw.), das dem aktuellen Zustand des DAG entspricht. Auf diese Weise können Sie ein Layout-Objekt für die Optimierungsphase erstellen, wenn Sie Ihr eigenes Layout generieren.
Rückgabe
Der Rückgabecode für den Transpiler, QkExitCode_Success bedeutet Erfolg und alle anderen Werte bedeuten einen Fehler.
qk_transpile_stage_translation
QkExitCode qk_transpile_stage_translation(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, char **error)
Führen Sie die voreingestellte Übersetzungsphase des Transpilers auf einer Schaltung aus
Der Qiskit-Transpiler ist ein Quanten-Schaltkreis-Compiler, der einen gegebenen Eingangs-Schaltkreis so umschreibt, dass er den Einschränkungen einer QPU entspricht, und den Schaltkreis für die Ausführung optimiert. Diese Funktion führt die vierte Stufe des voreingestellten Pass-Managers aus, die Übersetzung, die alle Anweisungen im Schaltkreis in solche übersetzt, die vom Ziel unterstützt werden. Weitere Informationen finden Sie unter Übersetzungsphase.
Diese Funktion sollte nur mit Schaltungen verwendet werden, die mit der C-API von Qiskit erstellt wurden. Es trifft Annahmen über die Schaltung, indem es nur über C bereitgestellte Funktionen verwendet. Wenn Sie sich in einer gemischten Python und C-Umgebung befinden, ist es in der Regel besser, den Transpiler über Python aufzurufen.
Diese Funktion ist intern multithreading-fähig und startet einen Thread-Pool mit Threads, die standardmäßig der vom Betriebssystem gemeldeten Anzahl von CPUs entsprechen. Dazu gehören logische Kerne auf CPUs mit gleichzeitigem Multithreading. Sie können die Anzahl der Threads mit der Umgebungsvariablen RAYON_NUM_THREADS einstellen. Zum Beispiel würde die Einstellung RAYON_NUM_THREADS=4 den Thread-Pool auf 4 Threads begrenzen.
Sicherheit
Das Verhalten ist undefiniert, wenn dag und keine gültigen, von Null verschiedenen target Zeiger auf bzw. QkTarget sind QkDag. options muss ein gültiger Zeiger auf a QkTranspileOptions oder sein NULL. error muss ein gültiger Zeiger auf einen char Zeiger oder sein NULL.
Parameter
- dag – Ein Zeiger auf den Schaltkreis, auf dem der Transpiler ausgeführt werden soll.
- target - Ein Zeiger auf das Ziel, für das die Schaltung kompiliert werden soll.
- options - Ein Zeiger auf ein Optionsobjekt, das Benutzeroptionen definiert. Wenn dies ein Null-Zeiger ist, werden die Standardwerte verwendet. Unter
qk_transpile_default_optionsfinden Sie weitere Einzelheiten zu den Standardwerten. - Fehler – Ein Zeiger auf einen Zeiger mit einer null-terminierten Zeichenkette mit einer Fehlerbeschreibung. Wenn der Transpiler fehlschlägt, wird ein Zeiger auf die Zeichenfolge mit der Fehlerbeschreibung in diesen Zeiger geschrieben. Dieser Zeiger muss mit freigegeben
qk_str_freewerden. Dies kann ein Nullzeiger sein, in diesem Fall wird der Fehler nicht ausgegeben.
Rückgabe
Der Rückgabecode für den Transpiler, QkExitCode_Success bedeutet Erfolg und alle anderen Werte bedeuten einen Fehler.
qk_transpile_stage_layout
QkExitCode qk_transpile_stage_layout(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, QkTranspilerStageState **state, char **error)
Führen Sie die voreingestellte Layout-Phase des Transpilers auf einer Schaltung aus
Der Qiskit-Transpiler ist ein Quanten-Schaltkreis-Compiler, der einen gegebenen Eingangs-Schaltkreis so umschreibt, dass er den Einschränkungen einer QPU entspricht, und den Schaltkreis für die Ausführung optimiert. Diese Funktion führt die zweite Stufe des voreingestellten Pass -Manager-Layouts aus, das die anfängliche Zuordnung von virtuellen Qubits zu physikalischen Qubits auswählt, einschließlich der Erweiterung der Schaltung um explizite Ancillas. Weitere Informationen finden Sie unter Layout-Phase.
Diese Funktion sollte nur mit Schaltungen verwendet werden, die mit der C-API von Qiskit erstellt wurden. Es trifft Annahmen über die Schaltung, indem es nur über C bereitgestellte Funktionen verwendet. Wenn Sie sich in einer gemischten Python und C-Umgebung befinden, ist es in der Regel besser, den Transpiler über Python aufzurufen.
Diese Funktion ist intern multithreading-fähig und startet einen Thread-Pool mit Threads, die standardmäßig der vom Betriebssystem gemeldeten Anzahl von CPUs entsprechen. Dazu gehören logische Kerne auf CPUs mit gleichzeitigem Multithreading. Sie können die Anzahl der Threads mit der Umgebungsvariablen RAYON_NUM_THREADS einstellen. Zum Beispiel würde die Einstellung RAYON_NUM_THREADS=4 den Thread-Pool auf 4 Threads begrenzen.
Sicherheit
Das Verhalten ist undefiniert, wenn dag oder keine targetgültigen, nicht null-Zeiger auf ein bzw. ein QkDag sind QkTarget . Das Verhalten ist ebenfalls undefiniert, wenn kein gültiger, ausgerichteter Zeiger auf einen Zeiger layout auf einen QkTranspileLayout oder einen Zeiger auf einen NULL Zeiger ist. options muss ein gültiger Zeiger auf a QkTranspileOptions oder sein NULL. error muss ein gültiger Zeiger auf einen char Zeiger oder sein NULL.
Parameter
- dag – Ein Zeiger auf den Schaltkreis, auf dem der Transpiler ausgeführt werden soll.
- target - Ein Zeiger auf das Ziel, für das die Schaltung kompiliert werden soll.
- options - Ein Zeiger auf ein Optionsobjekt, das Benutzeroptionen definiert. Wenn dies ein Null-Zeiger ist, werden die Standardwerte verwendet. Unter
qk_transpile_default_optionsfinden Sie weitere Einzelheiten zu den Standardwerten. - Zustand – Ein Zeiger auf einen Zeiger auf ein
QkTranspilerStageStateObjekt. Bei erfolgreicher Ausführung (Rückgabewert 0) wird das vom Transpiler erstellte Layout-Objekt in das State-Objekt geschrieben, auf das dieser Zeiger verweist. Der interne Zeiger hierfür kann null sein, wenn kein Status- oder Layout-Objekt vorhanden ist. Normalerweise würde man, wenn manqk_transpile_stage_initdiese Funktion ausführt, den Ausgabestatus dieser Funktion übernehmen und deren Layout als Eingabe hierfür verwenden. Wenn Sie jedoch kein Layout haben, kann der innere Zeiger null sein, und es wird ein neuesQkTranspilerStageStateObjekt mit einem Layout zugewiesen, wobei dieser Zeiger hier auf den inneren Wert des Layouts gesetzt wird. - Fehler – Ein Zeiger auf einen Zeiger mit einer null-terminierten Zeichenkette mit einer Fehlerbeschreibung. Wenn der Transpiler fehlschlägt, wird ein Zeiger auf die Zeichenfolge mit der Fehlerbeschreibung in diesen Zeiger geschrieben. Dieser Zeiger muss mit freigegeben
qk_str_freewerden. Dies kann ein Nullzeiger sein, in diesem Fall wird der Fehler nicht ausgegeben.
Rückgabe
Der Rückgabecode für den Transpiler, QkExitCode_Success bedeutet Erfolg und alle anderen Werte bedeuten einen Fehler.
qk_transpile
QkExitCode qk_transpile(const QkCircuit *qc, const QkTarget *target, const QkTranspileOptions *options, QkTranspileResult *result, char **error)
Transpilieren Sie einen einzelnen Stromkreis.
Der Qiskit Transpiler ist ein Quantencompiler, der eine gegebene Eingabeschaltung so umschreibt, dass sie den Beschränkungen einer QPU entspricht und die Schaltung für die Ausführung optimiert. Diese Funktion sollte nur für Schaltkreise verwendet werden, die mit der C-API von Qiskit erstellt wurden. Es macht Annahmen über die Schaltung nur mit Funktionen, die über C ausgesetzt sind, wenn Sie in einer gemischten Python und C-Umgebung ist es in der Regel besser, um den Transpiler über Python aufrufen.
Diese Funktion ist intern multithreading-fähig und startet einen Thread-Pool mit Threads, die standardmäßig der vom Betriebssystem gemeldeten Anzahl von CPUs entsprechen. Dazu gehören logische Kerne auf CPUs mit gleichzeitigem Multithreading. Sie können die Anzahl der Threads mit der Umgebungsvariablen RAYON_NUM_THREADS einstellen. Zum Beispiel würde die Einstellung RAYON_NUM_THREADS=4 den Thread-Pool auf 4 Threads begrenzen.
Sicherheit
Das Verhalten ist undefiniert, wenn circuit, target oder keine gültigen, von Null verschiedenen result Zeiger auf bzw QkTranspileResult . sind QkCircuit``QkTarget. options muss ein gültiger Zeiger auf a QkTranspileOptions oder sein NULL. error muss ein gültiger Zeiger auf einen char Zeiger oder sein NULL.
Parameter
- qc - Ein Zeiger auf die Schaltung, auf der der Transpiler laufen soll.
- target - Ein Zeiger auf das Ziel, für das die Schaltung kompiliert werden soll.
- options - Ein Zeiger auf ein Optionsobjekt, das Benutzeroptionen definiert. Wenn dies ein Null-Zeiger ist, werden die Standardwerte verwendet. Unter
qk_transpile_default_optionsfinden Sie weitere Einzelheiten zu den Standardwerten. - result - Ein Zeiger auf den Speicherplatz des Transpiler-Ergebnisses. Bei erfolgreicher Ausführung (Returncode 0) wird die Ausgabe des Transpilers in den Zeiger geschrieben. Die Mitglieder der Ergebnisstruktur sind Eigentum des Aufrufers, und Sie sind dafür verantwortlich, die Mitglieder mit den entsprechenden Free-Funktionen freizugeben.
- Fehler – Ein Zeiger auf einen Zeiger mit einer null-terminierten Zeichenkette mit einer Fehlerbeschreibung. Wenn der Transpiler fehlschlägt, wird ein Zeiger auf die Zeichenfolge mit der Fehlerbeschreibung in diesen Zeiger geschrieben. Dieser Zeiger muss mit freigegeben
qk_str_freewerden. Dies kann ein Nullzeiger sein, in diesem Fall wird der Fehler nicht ausgegeben.
Rückgabe
Der Rückgabecode für den Transpiler, QkExitCode_Success bedeutet Erfolg und alle anderen Werte bedeuten einen Fehler.