דלג לתוכן הראשי

טבלת תכונות OpenQASM 3

להלן רשימה של תכונות השפה OpenQASM 3.

לפרטים נוספים על יכולות אלה, ראו את המפרט החי של OpenQASM 3.X.

מקרא:

  • ❌ לא נתמך
  • 🟡 תמיכה חלקית
  • ✅ נתמך

המשמעות של סימן "נתמך" מלא תלויה בעמודה:

  • Qiskit SDK: ניתן לפרסר את התכונה באמצעות qiskit.qasm3.loads (על ידי שימוש בתוסף qiskit-qasm3-import), לייצג אותה ב-QuantumCircuit, ולייצא ל-OpenQASM 3 באמצעות qiskit.qasm3.dumps.

  • IBM Qiskit Runtime: Circuit המכיל את תכונת Qiskit המתאימה יכול להתבצע בהצלחה על חומרה דרך IBM® Qiskit Runtime.

המשמעות של "תמיכה חלקית" תלויה בדרך כלל בהערות המקושרות.

הערה

השיטה הנפוצה ביותר להגשת Circuits ל-IBM Qiskit Runtime היא ליצור את ה-Circuit בממשק Python-space של Qiskit SDK. Circuits שנבנים ומוגשים בצורה זו אינם צריכים להיטען מקבצי OpenQASM 3 ל-Qiskit SDK.

אם אינך משתמש ב-OpenQASM 3 ישירות, תוכל להשתמש בבטחה בתכונות שנתמכות לייצוג ב-Qiskit SDK, ייצוא ל-OpenQASM 3 והגשה ל-IBM Qiskit Runtime. זה כולל תכונות שלא ניתן לטעון אותן ב-Qiskit SDK מ-OpenQASM 3.

תכונת OpenQASM 3תכונת Qiskit SDKQiskit SDKIBM Qiskit Runtimeהערות
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

הערות

  1. לתכונות תוכנית OpenQASM 3 אלה אין השפעה על הביצוע ו-Qiskit מסיר אותן כחלק מפרסור הקבצים. ניתן להגיש קבצים שמשתמשים בהן אך הן לא יהיו בעלות השפעה. לגבי קבצי include, stdgates.inc נתמך כרגע כקלט ל-Qiskit, וביצוע על Backend דורש תמיד שה-Circuits יהיו מקומפלים ל-Instruction Set Architecture (ISA) של ה-Backend, שם קבצי include אינם רלוונטיים.
  1. Qiskit SDK תומך בפרסור ושמירת קבצי OpenQASM 3 עם כל הצהרות qubit. לביצוע על חומרה, רק Circuits המוגדרים במונחים של Qubits חומרתיים (לדוגמה, $0) תקפים. Qiskit SDK מייצר אוטומטית OpenQASM 3 במונחים של מזהי ה-Qubit החומרתיים הנתמכים אם ה-Circuit עבר Transpile עבור Backend עם מידע פריסה.
  1. הצהרות משתנים מסוג bit ו-bit[n] ב-Qiskit SDK מתאימות להצהרות Clbit ו-ClassicalRegister.
  1. החל מיולי 2025, Qiskit SDK יכול לייצג משתנים מקומיים ממגוון מוגבל של סוגים, יכול לייצג פעולות runtime רבות על אובייקטים אלה, ותומך בייצואם ל-OpenQASM 3. עם זאת, Qiskit SDK (דרך qiskit-qasm3-import v0.6.0) אינו תומך בפרסור קבצי OpenQASM 3 המכילים הצהרות משתנים, ויש לו תמיכה מוגבלת מאוד בפרסור ביטויי משתנים. באופן כללי, רוב מה שניתן לייצג ב-Qiskit במערכת הביטויים שלו ניתן לביצוע על חומרת Circuits דינמית מתאימה, אפילו אם הביטוי לא ניתן עדיין לפרסור ב-Qiskit SDK. ראו את תיעוד Qiskit של המודול qiskit.circuit.classical לקבלת המידע העדכני ביותר.
  1. Qiskit SDK יכול לייצג כינוי רגיסטר הן לרגיסטרים קוונטיים והן לקלאסיים, אך מאוד מומלץ להימנע משימוש בכינוי של רגיסטרים קלאסיים. רוב הביטויים על רגיסטרים קלאסיים אינם עובדים עם כינויים, ורגיסטרים קלאסיים עם כינוי אינם נתמכים לביצוע על חומרה. הפרסר OpenQASM 3 של Qiskit יכול לפתור הצהרות כינוי let שמקשרות את תוצאת שרשור רגיסטרים.
  1. Qiskit SDK תומך בעיכובים מפורשים דרך QuantumCircuit.delay, ו-Circuit boxes (QuantumCircuit.box) יכולים גם כן לקבל משכי זמן מפורשים. משכי זמן אלה יכולים לכלול ביטויים קלאסיים של משתני stretch. Qiskit SDK (החל מיולי 2025 דרך qiskit-qasm3-import v0.6.0) אינו תומך בפרסור הצהרות מסוג duration או סוג stretch מקבצי OpenQASM 3. לחומרה יש תמיכה מוגבלת במשכי זמן הכוללים stretch.
  1. יש לבצע Transpile ל-Circuits ל-ISA של ה-Backend כדי להריץ אותם על חומרת IBM. דבר זה מונע מהגדרות gate מותאמות אישית ומבנים ברמה גבוהה יותר כמו מגדלי Gate (כגון inv @) להיות תקפים לביצוע על חומרה ישירות, אך תהליך ה-transpile פותר אותם ל-Circuits ISA תקפים. Qiskit SDK (החל מיולי 2025, דרך qiskit-qasm3-import v0.6.0) יעריך מגדלי Gate בנחישות במהלך הפרסור, כך שאלה לא יהיו גלויים ב-QuantumCircuit המתקבל, עם עלות runtime פוטנציאלית.
  1. Qiskit SDK יכול לייצג זרימת בקרה מובנית ולייצא אותה ל-OpenQASM 3. הצהרות continue ו-break יכולות מבחינה טכנית להיות מיוצגות ב-Qiskit, אך אינן נתמכות היטב אפילו בתוך Qiskit SDK. לולאות for ב-Qiskit v2.1.0 אינן נתמכות היטב. זרימת בקרה מקוננת (כמו if בתוך if אחר, או הצהרת else if) אינה זכאית לביצוע על חומרה.
  1. Qiskit SDK תומך בהצהרת כל סוג קלאסי נתמך כמשתנה input על ה-Circuit. משתנים כאלה אינם זכאים כרגע לביצוע על חומרה, ולא ניתן לטעון אותם על ידי ייבאן OpenQASM 3 של Qiskit. אובייקטי Parameter לא קשורים הקיימים ב-QuantumCircuit מיוצאים כמשתני input float[64]. אפשרויות תצורת runtime מסוימות יכולות לאפשר ביצוע של Circuits כאלה על חלק מה-Backends.

הצעדים הבאים

המלצות