ข้ามไปยังเนื้อหาหลัก

ตารางฟีเจอร์ OpenQASM 3

ด้านล่างนี้คือรายการฟีเจอร์ภาษา OpenQASM 3

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับความสามารถเหล่านี้ ดูได้ที่ OpenQASM 3.X Live Specification

คำอธิบายสัญลักษณ์:

  • ❌ ไม่รองรับ
  • 🟡 รองรับบางส่วน
  • ✅ รองรับ

ความหมายของเครื่องหมาย "รองรับ" จะขึ้นอยู่กับคอลัมน์:

  • Qiskit SDK: ฟีเจอร์นี้สามารถ parse ได้ด้วย qiskit.qasm3.loads (โดยใช้ extension qiskit-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 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 จะตัดออกระหว่าง parse ไฟล์ ไฟล์ที่ใช้ฟีเจอร์เหล่านี้สามารถส่งได้แต่จะไม่มีผลใดๆ สำหรับไฟล์ include นั้น stdgates.inc รองรับเป็น input ของ Qiskit ในปัจจุบัน และการรันบน backend ต้องการ circuit ที่ compile ไปยัง backend Instruction Set Architecture (ISA) แล้ว ซึ่งไฟล์ include ไม่เกี่ยวข้องในขั้นตอนนั้น
  1. Qiskit SDK รองรับการ parse และ dump ไฟล์ OpenQASM 3 ที่มี qubit declaration ใดก็ได้ สำหรับการรันบนฮาร์ดแวร์ เฉพาะ circuit ที่นิยามในรูปของ hardware qubit (เช่น $0) เท่านั้นที่ใช้ได้ Qiskit SDK จะ output OpenQASM 3 ในรูปของ hardware-qubit identifier ที่รองรับโดยอัตโนมัติ หาก circuit ถูก transpile สำหรับ backend ที่มีข้อมูล layout
  1. การประกาศตัวแปรประเภท bit และ bit[n] ใน Qiskit SDK ตรงกับการประกาศ Clbit และ ClassicalRegister
  1. ณ เดือนกรกฎาคม 2025 Qiskit SDK สามารถแสดงตัวแปรท้องถิ่นของชุดประเภทที่จำกัด สามารถแสดง runtime operations หลายอย่างบน object เหล่านี้ และรองรับการ output เป็น OpenQASM 3 อย่างไรก็ตาม Qiskit SDK (ผ่าน qiskit-qasm3-import v0.6.0) ไม่รองรับการ parse ไฟล์ OpenQASM 3 ที่มีการประกาศตัวแปร และมีการรองรับ variable expressions อย่างจำกัดมาก โดยทั่วไปสิ่งที่ Qiskit สามารถแสดงในระบบ expression ส่วนมากสามารถรันบนฮาร์ดแวร์ dynamic circuits ที่เหมาะสมได้ แม้ว่า expression นั้นจะ ยังไม่สามารถ parse ได้โดย Qiskit SDK ดูเอกสาร Qiskit ของโมดูล qiskit.circuit.classical สำหรับข้อมูลล่าสุด
  1. Qiskit SDK สามารถแสดง register aliasing สำหรับทั้ง quantum และ classical register แต่ไม่แนะนำให้ใช้ aliasing ของ classical register อย่างยิ่ง expression ส่วนมากบน classical register ไม่ทำงานกับ alias และ aliased classical register ไม่รองรับสำหรับ การรันบนฮาร์ดแวร์ Qiskit OpenQASM 3 parser สามารถแก้ไข let alias statement ที่ผูกผลลัพธ์ของ register concatenation ได้
  1. Qiskit SDK รองรับ delay แบบชัดเจนผ่าน QuantumCircuit.delay และ circuit box (QuantumCircuit.box) ยังสามารถมี duration แบบชัดเจนได้ duration เหล่านี้สามารถรวม classical expression ของ stretch variable ได้ Qiskit SDK (ณ กรกฎาคม 2025 ผ่าน qiskit-qasm3-import v0.6.0) ไม่รองรับการ parse การประกาศประเภท duration หรือ stretch จากไฟล์ OpenQASM 3 ฮาร์ดแวร์มีการรองรับ duration ที่รวม stretch อย่างจำกัด
  1. Circuit ต้องถูก transpile ไปยัง backend ISA เพื่อรันบนฮาร์ดแวร์ IBM ซึ่งหมายความว่า gate definition แบบกำหนดเองและโครงสร้างระดับสูง เช่น gate modifier (เช่น inv @) ไม่ถูกต้องสำหรับการรันบนฮาร์ดแวร์โดยตรง แต่กระบวนการ transpile จะแก้ไขให้กลายเป็น ISA circuit ที่ถูกต้อง Qiskit SDK (ณ กรกฎาคม 2025 ผ่าน qiskit-qasm3-import v0.6.0) จะประเมิน gate modifier แบบ eager ระหว่าง parse ดังนั้น modifier เหล่านี้จะ ไม่ปรากฏใน QuantumCircuit ที่ได้ ซึ่งอาจมีค่าใช้จ่าย runtime
  1. Qiskit SDK สามารถแสดง structured control flow และ export เป็น OpenQASM 3 ได้ คำสั่ง continue และ break สามารถแสดงได้ด้วย Qiskit ในทางเทคนิค แต่ไม่ได้รับการ รองรับที่ดีแม้แต่ภายใน Qiskit SDK เอง for loop ใน Qiskit v2.1.0 ไม่ได้รับการ รองรับที่ดีนัก Nested control flow (เช่น if ภายใน if อีก หรือ else if) ไม่รองรับสำหรับการรันบนฮาร์ดแวร์
  1. Qiskit SDK รองรับการประกาศ classical type ที่รองรับใดก็ได้เป็นตัวแปร input บน circuit ตัวแปรดังกล่าวยังไม่รองรับสำหรับการรันบนฮาร์ดแวร์ในปัจจุบัน และไม่สามารถโหลดด้วย Qiskit OpenQASM 3 importer ได้ object Parameter ที่ไม่ได้ผูกค่าใน QuantumCircuit จะถูก export เป็นตัวแปร input float[64] ตัวเลือกการกำหนดค่า runtime บางอย่างสามารถเปิดใช้งานการรัน circuit เหล่านี้บน backend บางตัวได้

ขั้นตอนถัดไป

คำแนะนำ
Source: IBM Quantum docs — updated 27 เม.ย. 2569
English version on doQumentation — updated 7 พ.ค. 2569
This translation based on the English version of 11 มี.ค. 2569