ตารางฟีเจอร์ OpenQASM 3
ด้านล่างนี้คือรายการฟีเจอร์ภาษา OpenQASM 3
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับความสามารถเหล่านี้ ดูได้ที่ OpenQASM 3.X Live Specification
คำอธิบายสัญลักษณ์:
- ❌ ไม่รองรับ
- 🟡 รองรับบางส่วน
- ✅ รองรับ
ความหมายของเครื่องหมาย "รองรับ" จะขึ้นอยู่กับคอลัมน์:
-
Qiskit SDK: ฟีเจอร์นี้สามารถ parse ได้ด้วย
qiskit.qasm3.loads(โดยใช้ extensionqiskit-qasm3-import) แสดงผลในQuantumCircuitและ export เป็น OpenQASM 3 ด้วยqiskit.qasm3.dumps -
IBM Qiskit Runtime: Circuit ที่มีฟีเจอร์ Qiskit ที่ตรงกันสามารถรันบนฮาร์ดแวร์ผ่าน IBM® Qiskit Runtime ได้สำเร็จ
ความหมายของ "รองรับบางส่วน" มักขึ้นอยู่กับหมายเหตุที่ลิงก์ไว้
วิธีที่พบบ่อยที่สุดในการส่ง circuit ไปยัง IBM Qiskit Runtime คือการสร้าง circuit ผ่าน Python-space interface ของ Qiskit SDK Circuit ที่สร้างและส่งด้วยวิธีนี้ไม่จำเป็นต้องโหลดจากไฟล์ OpenQASM 3 เข้าสู่ Qiskit SDK
ถ้าคุณไม่ได้ใช้ OpenQASM 3 โดยตรง คุณสามารถใช้ฟีเจอร์ที่รองรับสำหรับการแสดงผลใน Qiskit SDK การ export เป็น OpenQASM 3 และการส่งไปยัง IBM Qiskit Runtime ได้อย่างปลอดภัย ซึ่งรวมถึงฟีเจอร์ที่ Qiskit SDK ไม่สามารถโหลดจาก OpenQASM 3 ได้
| ฟีเจอร์ OpenQASM 3 | ฟีเจอร์ Qiskit SDK | Qiskit SDK | IBM Qiskit Runtime | หมายเหตุ |
|---|---|---|---|---|
| comments | ✅ | ✅ | 1 | |
| QASM vstring | ✅ | ✅ | 1 | |
include | 🟡 | ❌ | 1, 7 | |
| unicode names | ✅ | ✅ | ||
qubit | Qubit and QuantumRegister | ✅ | 🟡 | 2 |
bit | Clbit and ClassicalRegister | ✅ | ✅ | 3 |
bool | expr.Var and classical expressions | 🟡 | ✅ | 4 |
int | ❌ | ✅ | 4 | |
uint | expr.Var and classical expressions | 🟡 | ✅ | 4 |
float | expr.Var and classical expressions | 🟡 | 🟡 | 4 |
angle | Implicit, as gate parameters | ❌ | 🟡 | 4 |
complex | ❌ | ❌ | 4 | |
const | ❌ | ❌ | 4 | |
pi/π/tau/τ/euler/ℇ | Constant-folded into gate parameters | ✅ | ✅ | |
| Aliasing: let | Quantum and classical registers | 🟡 | ❌ | 5 |
| register concatenation | Quantum and classical registers | 🟡 | ❌ | 5 |
| casting | expr.Cast classical expressions | 🟡 | 🟡 | 4 |
duration | ❌ | ❌ | ||
durationof | ❌ | ❌ | ||
ns/µs/us/ms/s/dt | Durations of delay and box | ✅ | ✅ | 6 |
stretch | expr.Stretch | 🟡 | 🟡 | 4, 6 |
delay | Delay/QuantumCircuit.delay | ✅ | ✅ | 6 |
barrier | Barrier/QuantumCircuit.barrier | ✅ | ✅ | |
box | BoxOp/QuantumCircuit.box | ✅ | ❌ | 6 |
Built-in U | UGate/QuantumCircuit.u | ✅ | ✅ | |
gate | 🟡 | 🟡 | 7 | |
gphase | QuantumCircuit.global_phase | 🟡 | ❌ | 7 |
ctrl @/ negctrl @ | AnnotatedOperation | 🟡 | ❌ | 7 |
inv @ | AnnotatedOperation | 🟡 | ❌ | 7 |
pow(k) @ | AnnotatedOperation | 🟡 | ❌ | 7 |
reset | Reset/QuantumCircuit.reset | ✅ | ✅ | |
measure | Measure/QuantumCircuit.measure | ✅ | ✅ | |
| bit operations | 🟡 | ✅ | 4 | |
| boolean operations | 🟡 | ✅ | 4 | |
| arithmetic expressions | 🟡 | 🟡 | 4 | |
| comparisons | 🟡 | ✅ | 4 | |
if | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else if | QuantumCircuit.if_test | ✅ | ❌ | 8 |
for loops | QuantumCircuit.for_loop | 🟡 | ❌ | 8 |
while loops | QuantumCircuit.while_loop | ✅ | ❌ | 8 |
continue | QuantumCircuit.continue_loop | 🟡 | ❌ | 8 |
break | QuantumCircuit.break_loop | 🟡 | ❌ | 8 |
return | ❌ | ❌ | ||
extern | ❌ | ❌ | ||
def subroutines (classical) | ❌ | ❌ | ||
def subroutines (quantum) | ❌ | ❌ | ||
input | QuantumCircuit.add_input | ✅ | 🟡 | 4, 9 |
output | ❌ | ❌ |
หมายเหตุ
- ฟีเจอร์โปรแกรม OpenQASM 3 เหล่านี้ไม่มีผลต่อการรันและ Qiskit จะตัดออกระหว่าง
parse ไฟล์ ไฟล์ที่ใช้ฟีเจอร์เหล่านี้สามารถส่งได้แต่จะไม่มีผลใดๆ สำหรับไฟล์
includeนั้นstdgates.incรองรับเป็น input ของ Qiskit ในปัจจุบัน และการรันบน backend ต้องการ circuit ที่ compile ไปยัง backend Instruction Set Architecture (ISA) แล้ว ซึ่งไฟล์includeไม่เกี่ยวข้องในขั้นตอนนั้น
- Qiskit SDK รองรับการ parse และ dump ไฟล์ OpenQASM 3 ที่มี
qubitdeclaration ใดก็ได้ สำหรับการรันบนฮาร์ดแวร์ เฉพาะ circuit ที่นิยามในรูปของ hardware qubit (เช่น$0) เท่านั้นที่ใช้ได้ Qiskit SDK จะ output OpenQASM 3 ในรูปของ hardware-qubit identifier ที่รองรับโดยอัตโนมัติ หาก circuit ถูก transpile สำหรับ backend ที่มีข้อมูล layout
- การประกาศตัวแปรประเภท
bitและbit[n]ใน Qiskit SDK ตรงกับการประกาศClbitและClassicalRegister
- ณ เดือนกรกฎาคม 2025 Qiskit SDK สามารถแสดงตัวแปรท้องถิ่นของชุดประเภทที่จำกัด
สามารถแสดง runtime operations หลายอย่างบน object เหล่านี้ และรองรับการ output เป็น
OpenQASM 3 อย่างไรก็ตาม Qiskit SDK (ผ่าน
qiskit-qasm3-importv0.6.0) ไม่รองรับการ parse ไฟล์ OpenQASM 3 ที่มีการประกาศตัวแปร และมีการรองรับ variable expressions อย่างจำกัดมาก โดยทั่วไปสิ่งที่ Qiskit สามารถแสดงในระบบ expression ส่วนมากสามารถรันบนฮาร์ดแวร์ dynamic circuits ที่เหมาะสมได้ แม้ว่า expression นั้นจะ ยังไม่สามารถ parse ได้โดย Qiskit SDK ดูเอกสาร Qiskit ของโมดูลqiskit.circuit.classicalสำหรับข้อมูลล่าสุด
- Qiskit SDK สามารถแสดง register aliasing สำหรับทั้ง quantum และ classical register
แต่ไม่แนะนำให้ใช้ aliasing ของ classical register อย่างยิ่ง expression ส่วนมากบน
classical register ไม่ทำงานกับ alias และ aliased classical register ไม่รองรับสำหรับ
การรันบนฮาร์ดแวร์ Qiskit OpenQASM 3 parser สามารถแก้ไข
letalias statement ที่ผูกผลลัพธ์ของ register concatenation ได้
- Qiskit SDK รองรับ delay แบบชัดเจนผ่าน
QuantumCircuit.delayและ circuit box (QuantumCircuit.box) ยังสามารถมี duration แบบชัดเจนได้ duration เหล่านี้สามารถรวม classical expression ของstretchvariable ได้ Qiskit SDK (ณ กรกฎาคม 2025 ผ่านqiskit-qasm3-importv0.6.0) ไม่รองรับการ parse การประกาศประเภทdurationหรือstretchจากไฟล์ OpenQASM 3 ฮาร์ดแวร์มีการรองรับ duration ที่รวมstretchอย่างจำกัด
- Circuit ต้องถูก transpile ไปยัง backend ISA เพื่อรันบนฮาร์ดแวร์ IBM ซึ่งหมายความว่า
gatedefinition แบบกำหนดเองและโครงสร้างระดับสูง เช่น gate modifier (เช่นinv @) ไม่ถูกต้องสำหรับการรันบนฮาร์ดแวร์โดยตรง แต่กระบวนการtranspileจะแก้ไขให้กลายเป็น ISA circuit ที่ถูกต้อง Qiskit SDK (ณ กรกฎาคม 2025 ผ่านqiskit-qasm3-importv0.6.0) จะประเมิน gate modifier แบบ eager ระหว่าง parse ดังนั้น modifier เหล่านี้จะ ไม่ปรากฏในQuantumCircuitที่ได้ ซึ่งอาจมีค่าใช้จ่าย runtime
- Qiskit SDK สามารถแสดง structured control flow และ export เป็น OpenQASM 3 ได้
คำสั่ง
continueและbreakสามารถแสดงได้ด้วย Qiskit ในทางเทคนิค แต่ไม่ได้รับการ รองรับที่ดีแม้แต่ภายใน Qiskit SDK เองforloop ใน Qiskit v2.1.0 ไม่ได้รับการ รองรับที่ดีนัก Nested control flow (เช่นifภายในifอีก หรือelse if) ไม่รองรับสำหรับการรันบนฮาร์ดแวร์
- Qiskit SDK รองรับการประกาศ classical type ที่รองรับใดก็ได้เป็นตัวแปร
inputบน circuit ตัวแปรดังกล่าวยังไม่รองรับสำหรับการรันบนฮาร์ดแวร์ในปัจจุบัน และไม่สามารถโหลดด้วย Qiskit OpenQASM 3 importer ได้ objectParameterที่ไม่ได้ผูกค่าในQuantumCircuitจะถูก export เป็นตัวแปรinput float[64]ตัวเลือกการกำหนดค่า runtime บางอย่างสามารถเปิดใช้งานการรัน circuit เหล่านี้บน backend บางตัวได้
ขั้นตอนถัดไป
- เรียนรู้วิธีสร้างโค้ด OpenQASM โดยใช้ IBM Quantum Composer
- ดู OpenQASM 3 Qiskit API reference
- ดู OpenQASM 2 Qiskit API reference
- Review the Verify your program topic.
- อ่าน Verify your program
- เยี่ยมชม OpenQASM Live Specification