דלג לתוכן הראשי
פרויקט זה בשלב בטא. מצאת באג? פתח issue ב-GitHub. יש שאלה או רעיון? שאל ב-Discussions — נשמח לשמוע ממך!
מה איכות התרגום בדף זה?

מבוא ל-OpenQASM

OpenQASM (שפת אסמבלי קוונטית פתוחה), ממשק תכנות בלתי תלוי במכונה התואם ל-QPUs של IBM®, היא שפת תכנות אימפרטיבית לתיאור Circuits קוונטיים. OpenQASM משתמשת במודל ה-Circuit הקוונטי כדי לבטא תוכניות קוונטיות כרצפים מסודרים של פעולות עם פרמטרים (כגון Gates, מדידות ואיפוסים) ומחשוב קלאסי בזמן אמת. בנוסף לאלגוריתמים קוונטיים, OpenQASM יכולה לתאר Circuits המיועדים לאפיון, אימות או דיבאג של מעבדים קוונטיים.

ככל שצרכי פיתוח ה-QPU התפתחו, רשימת התכונות של OpenQASM התרחבה בתגובה; הגרסה העדכנית ביותר, OpenQASM 3, כוללת הרחבות ובהן בקרת זרימה feed-forward קלאסית, משני Gate (modifiers), ומימושי פולסים.

OpenQASM היא הבחירה עבור מגוון קהלים בשל רב-גוניותה. המבוא למאמר OpenQASM 31 נותן דוגמאות:

"למרות ש-OpenQASM אינה שפה ברמה גבוהה, משתמשים רבים היו רוצים לכתוב Circuits קוונטיים פשוטים ידנית באמצעות שפה ייעודית בעלת כוח ביטוי גבוה. חוקרים העוסקים בקומפילציית Circuits זקוקים למידע ברמה גבוהה המתועד בייצוגי הביניים כדי להנחות את אלגוריתמי האופטימיזציה והסינתזה. נסיינים מעדיפים את הנוחות שבכתיבת Circuits ברמה גבוהה יחסית, אך לרוב צריכים לשנות ידנית תזמון או תיאורי Gate ברמת פולסים בנקודות שונות ב-Circuit. מהנדסי חומרה שמעצבים את הבקרים הקלאסיים ומחוללי צורות הגל מעדיפים שפות שמעשי לקמפל אותן בהתחשב באילוצי החומרה, ושמבטאות במפורש את מבנה ה-Circuit שהבקרים יכולים לנצל."

OpenQASM היא פורמט ההחלפה המשותף בין כלי תוכנה קוונטיים עצמאיים. עבור מפתחים המעדיפים כלי אחד לבניית Circuit, כלי אחר ל-transpilation, וכן הלאה, OpenQASM היא ה-lingua franca המשמשת כגשר ביניהם.

ה-Qiskit SDK מספק דרכים להמרה בין OpenQASM לבין המחלקה QuantumCircuit (ראה OpenQASM 2 ו-Qiskit ו-OpenQASM 3 ו-Qiskit להוראות).

למידע נוסף, עיינו במפרט המתעדכן של OpenQASM.

דוגמת קוד OpenQASM: מצב cat​


OPENQASM 3;
include "stdgates.inc";

const n = 3; // number of qubits
qubit[n] q; // a register 'q' of n qubits
bit[n] c; // a register 'c' of n classical bits

h q[0]; // Hadamard
for k in [0:n-1] {
cnot q[k], q[k+1]; // Controlled-NOT from control qubit q[k] to target qubit q[k+1]
}

c = measure q; // measure quantum register

השלבים הבאים​

Recommendations

Footnotes​

  1. Andrew W. Cross et al. "OpenQASM 3: A broader and deeper quantum assembly language," ACM Transactions on Quantum Computing, Volume 3, Issue 3 (2022). https://doi.org/10.48550/arXiv.2104.14722 ↩