Zum Hauptinhalt springen

OpenQASM 3 Feature-Tabelle

Im Folgenden findest du eine Liste der OpenQASM 3-Sprachfeatures.

Weitere Details zu diesen Funktionen findest du in der OpenQASM 3.X Live Specification.

Legende:

  • ❌ Nicht unterstützt
  • 🟡 Teilweise unterstützt
  • ✅ Unterstützt

Die Bedeutung des vollständigen „unterstützt"-Zeichens hängt von der Spalte ab:

  • Qiskit SDK: Das Feature kann von qiskit.qasm3.loads geparst werden (durch die qiskit-qasm3-import-Erweiterung), in einem QuantumCircuit dargestellt und von qiskit.qasm3.dumps nach OpenQASM 3 exportiert werden.

  • IBM Qiskit Runtime: Ein Circuit, der das entsprechende Qiskit-Feature enthält, kann über IBM® Qiskit Runtime erfolgreich auf Hardware ausgeführt werden.

Die Bedeutung von „teilweise unterstützt" hängt in der Regel von den verlinkten Hinweisen ab.

hinweis

Die häufigste Methode, Circuits an IBM Qiskit Runtime zu übermitteln, besteht darin, den Circuit über die Python-Schnittstelle des Qiskit SDK zu erstellen. Circuits, die auf diese Weise erstellt und übermittelt werden, müssen nicht aus OpenQASM 3-Dateien in das Qiskit SDK geladen werden.

Wenn du OpenQASM 3 nicht direkt verwendest, kannst du problemlos Features nutzen, die für die Darstellung im Qiskit SDK, den Export nach OpenQASM 3 und die Übermittlung an IBM Qiskit Runtime unterstützt werden. Dies schließt Features ein, die vom Qiskit SDK nicht aus OpenQASM 3 geladen werden können.

OpenQASM 3 FeatureQiskit SDK FeatureQiskit SDKIBM Qiskit RuntimeHinweise
comments1
QASM vstring1
include🟡1, 7
unicode names
qubitQubit and QuantumRegister🟡2
bitClbit and ClassicalRegister3
boolexpr.Var and classical expressions🟡4
int4
uintexpr.Var and classical expressions🟡4
floatexpr.Var and classical expressions🟡🟡4
angleImplicit, as gate parameters🟡4
complex4
const4
pi/π/tau/τ/euler/Constant-folded into gate parameters
Aliasing: letQuantum and classical registers🟡5
register concatenationQuantum and classical registers🟡5
castingexpr.Cast classical expressions🟡🟡4
duration
durationof
ns/µs/us/ms/s/dtDurations of delay and box6
stretchexpr.Stretch🟡🟡4, 6
delayDelay/QuantumCircuit.delay6
barrierBarrier/QuantumCircuit.barrier
boxBoxOp/QuantumCircuit.box6
Built-in UUGate/QuantumCircuit.u
gate🟡🟡7
gphaseQuantumCircuit.global_phase🟡7
ctrl @/ negctrl @AnnotatedOperation🟡7
inv @AnnotatedOperation🟡7
pow(k) @AnnotatedOperation🟡7
resetReset/QuantumCircuit.reset
measureMeasure/QuantumCircuit.measure
bit operations🟡4
boolean operations🟡4
arithmetic expressions🟡🟡4
comparisons🟡4
ifQuantumCircuit.if_test8
elseQuantumCircuit.if_test8
else ifQuantumCircuit.if_test8
for loopsQuantumCircuit.for_loop🟡8
while loopsQuantumCircuit.while_loop8
continueQuantumCircuit.continue_loop🟡8
breakQuantumCircuit.break_loop🟡8
return
extern
def subroutines (classical)
def subroutines (quantum)
inputQuantumCircuit.add_input🟡4, 9
output

Hinweise

  1. Diese OpenQASM 3-Programmfeatures haben keinen Einfluss auf die Ausführung; Qiskit entfernt sie beim Parsen der Dateien. Dateien, die diese Features verwenden, können übermittelt werden, haben aber keinen Effekt. Für include-Dateien wird stdgates.inc derzeit als Eingabe für Qiskit unterstützt, und die Backend-Ausführung setzt voraus, dass Circuits auf die Instruction Set Architecture (ISA) des Backends kompiliert wurden – dabei sind include-Dateien irrelevant.
  1. Das Qiskit SDK unterstützt das Parsen und Schreiben von OpenQASM 3-Dateien mit beliebigen qubit-Deklarationen. Für die Ausführung auf Hardware sind nur Circuits gültig, die in Bezug auf Hardware-Qubits definiert sind (zum Beispiel $0). Das Qiskit SDK gibt OpenQASM 3 automatisch in Bezug auf die unterstützten Hardware-Qubit-Bezeichner aus, wenn der Circuit für ein Backend mit Layout-Informationen transpiliert wurde.
  1. Variablendeklarationen vom Typ bit und bit[n] im Qiskit SDK entsprechen Clbit- und ClassicalRegister-Deklarationen.
  1. Ab Juli 2025 kann das Qiskit SDK lokale Variablen eines eingeschränkten Typensets darstellen, viele Laufzeitoperationen auf diesen Objekten abbilden und sie nach OpenQASM 3 ausgeben. Das Qiskit SDK (über qiskit-qasm3-import v0.6.0) unterstützt jedoch kein Parsen von OpenQASM 3-Dateien, die Variablendeklarationen enthalten, und hat nur sehr eingeschränkte Unterstützung für das Parsen von Variablenausdrücken. Im Allgemeinen kann das meiste, was Qiskit in seinem Ausdruckssystem darstellen kann, auf geeigneter Dynamic-Circuits-Hardware ausgeführt werden, auch wenn der Ausdruck noch nicht vom Qiskit SDK geparst werden kann. Aktuelle Informationen findest du in der Qiskit-Dokumentation des Moduls qiskit.circuit.classical.
  1. Das Qiskit SDK kann Register-Aliasing für sowohl Quanten- als auch klassische Register darstellen, es wird jedoch dringend davon abgeraten, Aliasing für klassische Register zu verwenden. Die meisten Ausdrücke auf klassischen Registern funktionieren nicht mit Aliasen, und klassische aliasierte Register werden für die Ausführung auf Hardware nicht unterstützt. Der Qiskit OpenQASM 3-Parser kann let-Alias-Anweisungen auflösen, die das Ergebnis einer Register-Konkatenation binden.
  1. Das Qiskit SDK unterstützt explizite Verzögerungen über QuantumCircuit.delay, und Circuit-Boxen (QuantumCircuit.box) können ebenfalls explizite Dauern haben. Diese Dauern können klassische Ausdrücke mit stretch-Variablen enthalten. Das Qiskit SDK (ab Juli 2025 über qiskit-qasm3-import v0.6.0) unterstützt kein Parsen von Deklarationen des Typs duration oder stretch aus OpenQASM 3-Dateien. Hardware hat eingeschränkte Unterstützung für Dauern einschließlich stretch.
  1. Circuits müssen auf die Backend-ISA transpiliert werden, um auf IBM-Hardware ausgeführt werden zu können. Dies schließt benutzerdefinierte gate-Definitionen und übergeordnete Konstrukte wie Gate-Modifikatoren (z. B. inv @) von der direkten Ausführung auf Hardware aus; der transpile-Prozess löst diese jedoch in gültige ISA-Circuits auf. Das Qiskit SDK (ab Juli 2025 über qiskit-qasm3-import v0.6.0) wertet Gate-Modifikatoren beim Parsen direkt aus, sodass diese im resultierenden QuantumCircuit nicht mehr sichtbar sind – möglicherweise mit einem Laufzeit-Mehraufwand.
  1. Das Qiskit SDK kann strukturierten Kontrollfluss darstellen und diesen nach OpenQASM 3 exportieren. Die continue- und break-Anweisungen können technisch gesehen von Qiskit dargestellt werden, sind aber auch innerhalb des Qiskit SDK nicht gut unterstützt. for-Schleifen in Qiskit v2.1.0 sind ebenfalls nicht gut unterstützt. Verschachtelter Kontrollfluss (z. B. ein if innerhalb eines anderen if oder eine else if-Anweisung) ist für die Ausführung auf Hardware nicht zulässig.
  1. Das Qiskit SDK unterstützt die Deklaration jedes unterstützten klassischen Typs als input-Variable im Circuit. Solche Variablen sind derzeit nicht für die Ausführung auf Hardware geeignet und können vom Qiskit OpenQASM 3-Importer nicht geladen werden. Nicht gebundene Parameter-Objekte im QuantumCircuit werden als input float[64]-Variablen exportiert. Bestimmte Laufzeit-Konfigurationsoptionen können die Ausführung solcher Circuits auf manchen Backends ermöglichen.

Nächste Schritte

Empfehlungen