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 Qiskit Runtime: Un Circuit care conține funcționalitatea Qiskit corespunzătoare poate fi executat cu succes pe hardware prin IBM® Qiskit Runtime.

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

notă

Cea mai frecventă metodă de a trimite circuite către IBM Qiskit Runtime 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 Qiskit Runtime. Aceasta include funcționalitățile care nu pot fi încărcate de Qiskit SDK din OpenQASM 3.

Funcționalitate OpenQASM 3Funcționalitate Qiskit SDKQiskit SDKIBM Qiskit RuntimeNote
comentarii1
QASM vstring1
include🟡1, 7
nume unicode
qubitQubit și QuantumRegister🟡2
bitClbit și ClassicalRegister3
boolexpr.Var și expresii clasice🟡4
int4
uintexpr.Var și expresii clasice🟡4
floatexpr.Var și expresii clasice🟡🟡4
angleImplicit, ca parametri de Gate🟡4
complex4
const4
pi/π/tau/τ/euler/Înglobat prin constant-folding în parametrii Gate
Alias: letRegistre cuantice și clasice🟡5
concatenare registreRegistre cuantice și clasice🟡5
conversie de tipexpr.Cast expresii clasice🟡🟡4
duration
durationof
ns/µs/us/ms/s/dtDurate pentru delay și box6
stretchexpr.Stretch🟡🟡4, 6
delayDelay/QuantumCircuit.delay6
barrierBarrier/QuantumCircuit.barrier
boxBoxOp/QuantumCircuit.box6
U predefinitUGate/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
operații pe biți🟡4
operații booleene🟡4
expresii aritmetice🟡🟡4
comparații🟡4
ifQuantumCircuit.if_test8
elseQuantumCircuit.if_test8
else ifQuantumCircuit.if_test8
bucle forQuantumCircuit.for_loop🟡8
bucle whileQuantumCircuit.while_loop8
continueQuantumCircuit.continue_loop🟡8
breakQuantumCircuit.break_loop🟡8
return
extern
subrutine def (clasice)
subrutine def (cuantice)
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 Gate (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 Gate î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