주 콘텐츠로 건너뛰기

OpenQASM 소개

OpenQASM(오픈 양자 어셈블리 언어)은 IBM® QPU와 호환되는 기계 독립적 프로그래밍 인터페이스로, 양자 Circuit을 기술하기 위한 명령형 프로그래밍 언어입니다. OpenQASM은 양자 회로 모델을 사용하여 양자 프로그램을 매개변수화된 연산(Gate, 측정, 리셋 등)의 순서열과 실시간 고전 연산으로 표현합니다. 양자 알고리즘 외에도, OpenQASM은 양자 프로세서를 특성화하거나 검증하거나 디버깅하기 위한 Circuit을 기술하는 데에도 사용할 수 있습니다.

QPU 개발의 요구사항이 발전함에 따라 OpenQASM의 기능 목록도 확장되었습니다. 최신 버전인 OpenQASM 3은 고전적 피드포워드 흐름 제어, Gate 수정자, 펄스 구현 등의 확장 기능을 포함하고 있습니다.

OpenQASM은 그 다양성 덕분에 다양한 사용자층에서 선택받고 있습니다. OpenQASM 3 논문1의 서론에서는 다음과 같은 예를 들고 있습니다:

"OpenQASM은 고수준 언어는 아니지만, 많은 사용자들이 표현력 있는 도메인 특화 언어를 사용하여 간단한 양자 Circuit을 직접 작성하고 싶어합니다. Circuit 컴파일을 연구하는 연구자들은 최적화 및 합성 알고리즘을 위해 중간 표현에 기록된 고수준 정보가 필요합니다. 실험가들은 비교적 높은 수준에서 Circuit을 작성하는 편의성을 선호하지만, Circuit의 여러 지점에서 타이밍이나 펄스 수준의 Gate 설명을 수동으로 수정해야 하는 경우도 많습니다. 고전 컨트롤러와 파형 생성기를 설계하는 하드웨어 엔지니어들은 하드웨어 제약 조건을 고려하여 컴파일하기 실용적이고, 컨트롤러가 활용할 수 있는 명시적인 Circuit 구조를 갖춘 언어를 선호합니다."

OpenQASM은 독립적인 양자 소프트웨어 도구들 사이의 공통 교환 형식입니다. Circuit 구성에는 한 도구를, Transpiler에는 다른 도구를 선호하는 개발자들에게 OpenQASM은 이들을 연결하는 공용어(lingua franca) 역할을 합니다.

Qiskit SDK는 OpenQASM과 QuantumCircuit 클래스 간의 변환 방법을 제공합니다(자세한 내용은 OpenQASM 2와 QiskitOpenQASM 3와 Qiskit을 참조하세요).

자세한 내용은 OpenQASM 라이브 명세서를 참조하세요.

OpenQASM 코드 예시: 고양이 상태


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