Skip to main content
IBM Quantum Platform

VF2 Compiler-Pass-Objekte


QkVF2LayoutConfiguration

typedef struct QkVF2LayoutConfiguration QkVF2LayoutConfiguration

Die Konfiguration für das Layout „ VF2 “ ist erfolgreich. Dies ist eine gekapselte Konfiguration, um Änderungen in der API im Laufe der Zeit zu ermöglichen. Sie erstellen und ändern diese mithilfe des Konstruktors und der Setter unten.

qk_vf2_layout_configuration_new

QkVF2LayoutConfiguration *qk_vf2_layout_configuration_new(void)

Erstellen Sie eine neue Konfiguration für die Durchläufe „ VF2 “, die alles völlig unbegrenzt ausführt.

Rufen Sie qk_vf2_layout_configuration_free mit dem Rückgabewert auf, um den Speicher nach Abschluss freizugeben.

Rückgabe

Ein Zeiger auf die Konfiguration.

qk_vf2_layout_configuration_free

void qk_vf2_layout_configuration_free(QkVF2LayoutConfiguration *config)

Befreie ein QkVf2LayoutConfiguration Objekt.

Sicherheit

Das Verhalten ist undefiniert, wenn ein config Nicht-Null-Zeiger ist, aber nicht auf ein gültiges, ausgerichtetes QkVF2LayoutConfiguration Objekt zeigt.

Parameter

  • config – Ein Zeiger auf die Konfiguration.

qk_vf2_layout_configuration_set_call_limit

void qk_vf2_layout_configuration_set_call_limit(QkVF2LayoutConfiguration *config, int64_t before, int64_t after)

Begrenzen Sie die Anzahl der Versuche, die der Algorithmus „ VF2 “ unternimmt, um seine Zuordnung vor und nach dem Auffinden der ersten Übereinstimmung zu erweitern.

Der Algorithmus „ VF2 ” zählt die Anzahl der durchgeführten Schritte und beendet sich selbst, sobald das Limit erreicht ist. Nachdem das erste Spiel gefunden wurde, wechselt das Limit vom „vorherigen“ zum „nachherigen“ Limit, ohne dass die Anzahl der durchgeführten Schritte zurückgesetzt wird.

Sicherheit

Das Verhalten ist undefiniert, wenn kein gültiger, ausgerichteter config , nicht-null Zeiger auf ein ist QkVF2LayoutConfiguration.

Parameter

  • config – Die zu aktualisierende Konfiguration.
  • vorher – Die Anzahl der Versuche, die vor dem ersten Treffer zulässig sind. Setzen Sie einen negativen Wert ein, um keine Begrenzung festzulegen.
  • nach – Die Anzahl der Versuche, die nach dem ersten Treffer (falls vorhanden) zulässig sind. Setzen Sie einen negativen Wert ein, um keine Begrenzung festzulegen.

qk_vf2_layout_configuration_set_time_limit

void qk_vf2_layout_configuration_set_time_limit(QkVF2LayoutConfiguration *config, double limit)

Begrenzen Sie die Laufzeit der Suche „ VF2 “.

Dies ist keine feste Grenze; sie wird nur überprüft, wenn ein verbessertes Layout gefunden wird. Die Verwendung dieser Option macht den Pass außerdem nicht deterministisch. Es wird allgemein empfohlen, stattdessen zu qk_vf2_layout_configuration_set_call_limit verwenden.

Sicherheit

Das Verhalten ist undefiniert, wenn kein gültiger, ausgerichteter config , nicht-null Zeiger auf ein ist QkVF2LayoutConfiguration.

Parameter

  • config – Die zu aktualisierende Konfiguration.
  • limit – Die zulässige Zeit in Sekunden. Auf einen nicht positiven Wert setzen, um ohne Begrenzung auszuführen.

qk_vf2_layout_configuration_set_max_trials

void qk_vf2_layout_configuration_set_max_trials(QkVF2LayoutConfiguration *config, uint64_t limit)

Begrenzen Sie die Gesamtzahl der gefundenen vollständigen Verbesserungen.

Da der Suchbaum „ VF2 “ basierend auf der Bewertung im „“ laufend QkTargetbereinigt wird, ist diese Beschränkung nicht besonders wirkungsvoll. Siehe qk_vf2_layout_configuration_set_call_limit für eine engere Grenze.

Sicherheit

Das Verhalten ist undefiniert, wenn kein gültiger, ausgerichteter config , nicht-null Zeiger auf ein ist QkVF2LayoutConfiguration.

Parameter

  • config – Die zu aktualisierende Konfiguration.
  • Limit – Die Anzahl der vollständigen Layouts, die vor dem Beenden zulässig sind. Auf 0 setzen, um unbegrenzt auszuführen.

qk_vf2_layout_configuration_set_shuffle_seed

void qk_vf2_layout_configuration_set_shuffle_seed(QkVF2LayoutConfiguration *config, uint64_t seed)

Aktivieren Sie das Knotenmischen der Eingabegraphen mit einem vorgegebenen Startwert.

Dies führt effektiv zu einer Änderung der Übereinstimmungsreihenfolge von VF2, was theoretisch bedeutet, dass der Raum einer begrenzten Suche nicht auf der Grundlage der Knotenindizes verzerrt ist. In der Praxis verwendet Qiskit die Verbesserungen der Reihenfolge „ VF2++ “ (d. h. „durchschnittlich“), wenn es im „durchschnittlichen“ Modus (entspricht der anfänglichen Layout-Suche) ausgeführt wird, und beginnt im „exakten“ Modus mit der Identitätsabbildung. Beide dieser Bestellheuristiken finden in der Regel weitaus häufiger Ergebnisse für das jeweilige Problem als die Zufallsauswahl.

Wenn diese Funktion nicht aufgerufen wurde, findet kein Knoten-Shuffling statt.

Sicherheit

Das Verhalten ist undefiniert, wenn kein gültiger, ausgerichteter config , nicht-null Zeiger auf ein ist QkVF2LayoutConfiguration.

Parameter

  • config – Die zu aktualisierende Konfiguration.
  • seed – Der für das aktivierte Mischen zu verwendende Startwert.

qk_vf2_layout_configuration_set_score_initial

void qk_vf2_layout_configuration_set_score_initial(QkVF2LayoutConfiguration *config, bool score_initial)

Ob man das anfängliche „triviale“ Layout des Interaktionsgraphen eifrig bewerten soll.

Normalerweise sollten Sie diese Option true festlegen, wenn Sie die Durchläufe „ VF2 “ verwenden, um einen bereits auf Hardware reduzierten Schaltkreis zu verbessern, damit eine Basislinie für das scorebasierte Pruning festgelegt werden kann. Wenn nicht, können Sie dies als false (Standardeinstellung) belassen, um eine Berechnung zu vermeiden, die wahrscheinlich keine Auswirkungen haben wird.

Sicherheit

Das Verhalten ist undefiniert, wenn kein gültiger, ausgerichteter config , nicht-null Zeiger auf ein ist VF2LayoutConfiguration.

Parameter

  • config – Die zu aktualisierende Konfiguration.
  • score_initial – Ob das anfängliche triviale Layout sofort bewertet werden soll.

QkVF2LayoutResult

typedef struct QkVF2LayoutResult QkVF2LayoutResult

Wenn die qk_transpiler_pass_standalone_vf2_layout Funktion ausgeführt wird, gibt sie ihr Analyseergebnis als Objekt QkVF2LayoutResult zurück. Dieses Objekt enthält das Ergebnis des Transpiler-Durchlaufs, ob der Durchlauf ein Layout finden konnte oder nicht und welches Layout vom Durchlauf ausgewählt wurde.

Funktionen

qk_vf2_layout_result_has_match

bool qk_vf2_layout_result_has_match(const QkVF2LayoutResult *layout)

Überprüfen Sie, ob ein Ergebnis gefunden wurde.

Ein true Wert umfasst die Situation, in der die Konfiguration so festgelegt wurde, dass das „triviale” Layout ausprobiert wurde und sich als das beste erwiesen hat (und folglich keine Neukennzeichnung der Qubits erforderlich ist, außer gegebenenfalls einer Erweiterung der Hilfsqubits). Siehe, qk_vf2_layout_result_has_improvement um zu unterscheiden, ob eine explizite Neuzuordnung gespeichert ist.

Sicherheit

Das Verhalten ist undefiniert, wenn kein gültiger, layout nicht-null Zeiger auf ein ist QkVF2LayoutResult.

Parameter

  • Layout – ein Zeiger auf das Layout

Rückgabe

true wenn der Layout-Durchlauf „ VF2-based “ eine Übereinstimmung gefunden hat.

qk_vf2_layout_result_has_improvement

bool qk_vf2_layout_result_has_improvement(const QkVF2LayoutResult *layout)

Überprüfen Sie, ob das Ergebnis eine Verbesserung gegenüber dem trivialen Layout darstellt.

Sicherheit

Das Verhalten ist undefiniert, wenn kein gültiger, layout nicht-null Zeiger auf ein ist QkVF2LayoutResult.

Parameter

  • Layout – ein Zeiger auf das Layout

Rückgabe

true wenn der Layout-Durchlauf „ VF2-based “ eine verbesserte Übereinstimmung gefunden hat.

qk_vf2_layout_result_map_virtual_qubit

uint32_t qk_vf2_layout_result_map_virtual_qubit(const QkVF2LayoutResult *layout, uint32_t qubit)

Das physikalische Qubit für ein bestimmtes virtuelles Qubit abrufen

Sicherheit

Das Verhalten ist undefiniert, wenn kein gültiger, layout nicht-null Zeiger auf ein ist QkVF2LayoutResult , das ein Ergebnis enthält, oder wenn das Qubit außerhalb des Bereichs für die ursprüngliche Schaltung liegt.

Parameter

  • Layout – ein Zeiger auf das Layout
  • Qubit – das virtuelle Qubit, um das physikalische Qubit zu erhalten

Rückgabe

Das physikalische Qubit, das dem angegebenen virtuellen Qubit zugeordnet ist

qk_vf2_layout_result_free

void qk_vf2_layout_result_free(QkVF2LayoutResult *layout)

Befreie ein QkVF2LayoutResult Objekt

Beispiel
QkCircuit *qc = qk_circuit_new(1, 0);
Sicherheit

Das Verhalten ist undefiniert, wenn kein gültiger, layout nicht-null Zeiger auf ein ist QkVF2Layout.

Parameter

  • Layout – ein Zeiger auf das freizugebende Layout
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.