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

แนะนำ OpenQASM

OpenQASM (open quantum assembly language) คือภาษาโปรแกรมแบบ Imperative ที่ใช้อธิบาย Circuit ควอนตัม ซึ่งเป็น Interface การเขียนโปรแกรมแบบ Machine-independent ที่เข้ากันได้กับ QPU ของ IBM® OpenQASM ใช้โมเดล Circuit ควอนตัมในการแสดงโปรแกรมควอนตัมเป็นลำดับของการดำเนินการแบบ Parameterized (เช่น Gate, การวัด และการ Reset) และการคำนวณแบบ Classical แบบ Real-time นอกจากอัลกอริทึมควอนตัมแล้ว OpenQASM ยังสามารถอธิบาย Circuit ที่ออกแบบมาเพื่อการตรวจสอบ การ Validate หรือการ Debug โปรเซสเซอร์ควอนตัมได้

เมื่อความต้องการของการพัฒนา QPU เปลี่ยนแปลงไป รายการฟีเจอร์ของ OpenQASM ก็ขยายตัวตาม เวอร์ชันล่าสุดคือ OpenQASM 3 ซึ่งรวม Extension ต่างๆ ได้แก่ Flow control แบบ Classical feed-forward, Gate modifier และการ Implement ในระดับ Pulse

OpenQASM เป็นตัวเลือกสำหรับผู้ใช้หลากหลายกลุ่มเนื่องจากความหลากหลายของมัน บทนำของ OpenQASM 3 paper1 ให้ตัวอย่างไว้ว่า:

"แม้ว่า OpenQASM จะไม่ใช่ภาษาระดับสูง แต่ผู้ใช้หลายคนก็ต้องการเขียน Circuit ควอนตัมแบบง่ายๆ ด้วยมือโดยใช้ภาษาเฉพาะโดเมนที่แสดงออกได้ชัดเจน นักวิจัยที่ศึกษาการ Compile Circuit ต้องการข้อมูลระดับสูงที่บันทึกไว้ใน Intermediate representation เพื่อแจ้งอัลกอริทึมการปรับแต่งและการสังเคราะห์ นักทดลองชอบความสะดวกของการเขียน Circuit ในระดับค่อนข้างสูง แต่มักต้องปรับแต่ง Timing หรือคำอธิบาย Gate ระดับ Pulse ด้วยตนเองในจุดต่างๆ ของ Circuit วิศวกรฮาร์ดแวร์ที่ออกแบบ Controller แบบ Classical และ Waveform generator ชอบภาษาที่สามารถ Compile ได้จริงภายใต้ข้อจำกัดของฮาร์ดแวร์ และทำให้โครงสร้าง Circuit ที่ Controller สามารถใช้ประโยชน์ได้ชัดเจนขึ้น"

OpenQASM คือรูปแบบการแลกเปลี่ยนทั่วไประหว่างเครื่องมือซอฟต์แวร์ควอนตัมอิสระ สำหรับนักพัฒนาที่ชอบใช้เครื่องมือหนึ่งสำหรับการสร้าง Circuit อีกเครื่องมือสำหรับการ Transpile และอื่นๆ OpenQASM คือ lingua franca ที่ทำหน้าที่เป็นสะพานเชื่อมระหว่างเครื่องมือเหล่านั้น

Qiskit SDK มีวิธีแปลงระหว่าง OpenQASM กับ QuantumCircuit class (ดู OpenQASM 2 and Qiskit และ OpenQASM 3 and Qiskit สำหรับคำแนะนำ)

ดูข้อมูลเพิ่มเติมได้ที่ OpenQASM live specification

ตัวอย่างโค้ด OpenQASM: Cat state


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

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

คำแนะนำ

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

Source: IBM Quantum docs — updated 5 มี.ค. 2569
English version on doQumentation — updated 7 พ.ค. 2569
This translation based on the English version of 11 มี.ค. 2569