Sari la conținutul principal

Tabel de funcționalități OpenQASM 3

Mai jos se află o listă a funcționalităților limbajului OpenQASM 3.

Pentru mai multe detalii despre aceste capabilități, consultă Specificația Live OpenQASM 3.X.

Legendă:

  • ❌ Nesuportat

  • 🟡 Suport parțial

  • ✅ Suportat

Semnificația marcajului „suportat" complet depinde de coloană:

  • Qiskit SDK: Funcționalitatea poate fi parsată de qiskit.qasm3.loads (folosind extensia qiskit-qasm3-import), reprezentată într-un QuantumCircuit, și exportată în OpenQASM 3 de qiskit.qasm3.dumps.

  • IBM Quantum Compute Service: Un circuit care conține funcționalitatea Qiskit corespunzătoare poate fi executat cu succes pe hardware prin IBM Quantum Compute Service.

Semnificația „suportului parțial" depinde de obicei de notele legate.

notă

Cea mai frecventă metodă de a trimite circuite către IBM Quantum Compute Service este să creezi Circuit-ul în interfața Python din Qiskit SDK. Circuitele construite și trimise în acest mod nu trebuie încărcate din fișiere OpenQASM 3 în Qiskit SDK.

Dacă nu folosești OpenQASM 3 direct, poți utiliza în siguranță funcționalitățile care sunt suportate pentru reprezentare în Qiskit SDK, export în OpenQASM 3 și trimitere către IBM Quantum Compute Service. Aceasta include funcționalitățile care nu pot fi încărcate de Qiskit SDK din OpenQASM 3.

OpenQASM 3 FeatureQiskit SDK featureQiskit SDKIBM Quantum Compute ServiceNotes
comments✅✅1
QASM vstring✅✅1
include🟡❌1, 7
unicode names✅✅
qubitQubit and QuantumRegister✅🟡2
bitClbit and ClassicalRegister✅✅3
boolexpr.Var and classical expressions🟡✅4
int❌✅4
uintexpr.Var and classical expressions🟡✅4
floatexpr.Var and classical expressions🟡🟡4
angleImplicit, as gate parameters❌🟡4
complex❌❌4
const❌❌4
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 box✅✅6
stretchexpr.Stretch🟡🟡4, 6
delayDelay/QuantumCircuit.delay✅✅6
barrierBarrier/QuantumCircuit.barrier✅✅
boxBoxOp/QuantumCircuit.box✅❌6
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_test✅✅8
elseQuantumCircuit.if_test✅✅8
else ifQuantumCircuit.if_test✅❌8
for loopsQuantumCircuit.for_loop🟡❌8
while loopsQuantumCircuit.while_loop✅❌8
continueQuantumCircuit.continue_loop🟡❌8
breakQuantumCircuit.break_loop🟡❌8
return❌❌
extern❌❌
def subroutines (classical)❌❌
def subroutines (quantum)❌❌
inputQuantumCircuit.add_input✅🟡4, 9
output❌❌

Note​

  1. Aceste funcționalități ale programelor OpenQASM 3 nu au niciun impact asupra execuției, iar Qiskit le elimină ca parte a parsării fișierelor. Fișierele care le folosesc pot fi trimise, dar nu vor avea niciun efect. Pentru fișierele include, stdgates.inc este suportat în prezent ca intrare în Qiskit, iar execuția pe Backend necesită întotdeauna ca circuitele să fi fost compilate conform Arhitecturii de Set de Instrucțiuni (ISA) a Backend-ului, unde fișierele include sunt irelevante.
  1. Qiskit SDK suportă parsarea și exportul fișierelor OpenQASM 3 cu orice declarații qubit. Pentru execuția pe hardware, doar circuitele definite în termeni de qubiți hardware (de exemplu, $0) sunt valide. Qiskit SDK generează automat OpenQASM 3 în termenii identificatorilor de qubiți hardware suportați, dacă Circuit-ul a fost transpilat pentru un Backend cu informații de layout.
  1. Declarațiile de variabile de tip bit și bit[n] în Qiskit SDK corespund declarațiilor Clbit și ClassicalRegister.
  1. Începând cu iulie 2025, Qiskit SDK poate reprezenta variabile locale dintr-un set restrâns de tipuri, poate reprezenta multe operații la runtime pe aceste obiecte și suportă exportul lor în OpenQASM 3. Totuși, Qiskit SDK (prin qiskit-qasm3-import v0.6.0) nu suportă parsarea fișierelor OpenQASM 3 care conțin declarații de variabile și are suport foarte limitat pentru parsarea expresiilor cu variabile. În general, cea mai mare parte din ceea ce Qiskit poate reprezenta în sistemul său de expresii poate fi executat pe hardware adecvat cu circuite dinamice, chiar dacă expresia nu poate fi încă parsată de Qiskit SDK. Consultă documentația Qiskit a modulului qiskit.circuit.classical pentru cele mai actualizate informații.
  1. Qiskit SDK poate reprezenta aliasul de registre atât pentru registrele cuantice, cât și pentru cele clasice, dar este puternic descurajat să se folosească aliasul registrelor clasice. Majoritatea expresiilor pe registre clasice nu funcționează cu aliasuri, iar registrele clasice cu alias nu sunt suportate pentru execuția pe hardware. Parser-ul OpenQASM 3 din Qiskit poate rezolva instrucțiunile de alias let care leagă rezultatul concatenării de registre.
  1. Qiskit SDK suportă întârzieri explicite prin QuantumCircuit.delay, iar casetele de circuit (QuantumCircuit.box) pot avea și ele durate explicite. Aceste durate pot include expresii clasice ale variabilelor stretch. Qiskit SDK (începând cu iulie 2025, prin qiskit-qasm3-import v0.6.0) nu suportă parsarea declarațiilor de tip duration sau stretch din fișiere OpenQASM 3. Hardware-ul are suport limitat pentru durate care includ stretch.
  1. Circuitele trebuie transpilate conform ISA-ului Backend-ului pentru a rula pe hardware IBM. Aceasta exclude definițiile personalizate de gate și constructele de nivel superior, cum ar fi modificatorii de poartă (precum inv @), din a fi valide pentru execuția pe hardware verbatim, dar procesul transpile le rezolvă în circuite ISA valide. Qiskit SDK (începând cu iulie 2025, prin qiskit-qasm3-import v0.6.0) va evalua cu anticipare modificatorii de poartă în timpul parsării, astfel că aceștia nu vor fi vizibili în QuantumCircuit-ul rezultat, potențial cu un cost la runtime.
  1. Qiskit SDK poate reprezenta fluxul de control structurat și îl poate exporta în OpenQASM 3. Instrucțiunile continue și break pot fi tehnic reprezentate de Qiskit, dar nu sunt bine suportate nici în cadrul Qiskit SDK. Buclele for în Qiskit v2.1.0 nu sunt bine suportate. Fluxul de control imbricat (cum ar fi un if în interiorul altui if, sau o instrucțiune else if) nu este eligibil pentru execuție pe hardware.
  1. Qiskit SDK suportă declararea oricărui tip clasic suportat ca variabilă input pe circuit. Astfel de variabile nu sunt eligibile în prezent pentru execuția pe hardware și nu pot fi încărcate de importatorul OpenQASM 3 din Qiskit. Obiectele Parameter neasociate prezente în QuantumCircuit sunt exportate ca variabile input float[64]. Anumite opțiuni de configurare la runtime pot permite executarea unor astfel de circuite pe anumite Backend-uri.

Pași următori​

Recomandări