| 최근 버전 | 3.1.0 |
|---|---|
| 최근 버전 출시일 | 2024년 5월 15일 |
| 구현 언어 | Python |
| 라이선스 | 아파치 라이선스 2.0 |
| 파일 확장자 | .qasm |
| 웹사이트 | openqasm |
OpenQASM(OpenQASM; 오픈 카즘으로 발음)은 양자 컴퓨터에서 실행하기 위한 양자 회로와 양자 알고리즘을 기술하기 위해 설계된 프로그래밍 언어이다.
이 언어는 상위 수준의 컴파일러가 양자 하드웨어와 통신하는 데 사용할 수 있는 중간 표현으로 설계되었으며, 다양한 양자 연산은 물론 측정 결과에 기반한 고전적인 피드포워드 흐름 제어를 기술할 수 있게 한다.
이 언어는 명령어의 명시적인 타이밍을 기술하기 위한 메커니즘을 포함하며, 보정과 같은 작업을 위해 게이트에 저수준 정의를 첨부할 수 있도록 한다. OpenQASM은 범용적인 고전 계산을 위한 것이 아니며, 이 언어의 하드웨어 구현은 사양에 기술된 모든 범위의 데이터 조작을 지원하지 않을 수 있다. OpenQASM용 컴파일러는 컴파일 타임 상수에 대한 광범위한 고전적 연산을 지원할 것으로 예상되지만, 런타임 값에 대한 이러한 연산의 지원 여부는 구현마다 다를 수 있다.
이 언어는 2017년 7월에 발표된 논문에서 처음 기술되었으며, 참조 소스 코드 구현은 IBM의 양자 정보 소프트웨어 키트(Qiskit)의 일부로 공개되어 그들의 IBM 퀀텀 익스피리언스 클라우드 양자 컴퓨팅 플랫폼에서 사용되도록 하였다. 이 언어는 베릴로그와 같은 전통적인 하드웨어 기술 언어와 유사한 특징을 가지고 있다.
OpenQASM은 소스 파일의 맨 앞에 다음과 같이 선언을 통해 버전을 숫자로 정의한다:
OPENQASM 3;
OpenQASM의 원래 공개된 구현 수준은 OpenQASM 2.0이다. 현재 사양은 버전 3.0이며 깃허브의 OpenQASM 저장소에서 확인할 수 있다.
다음은 공식 라이브러리에서 가져온 OpenQASM 소스 코드 예시이다. 이 프로그램은 두 개의 4비트 숫자를 더한다.
/*
* quantum ripple-carry adder
* Cuccaro et al, quant-ph/0410184
*/
OPENQASM 3;
include "stdgates.inc";
gate majority a, b, c {
cx c, b;
cx c, a;
ccx a, b, c;
}
gate unmaj a, b, c {
ccx a, b, c;
cx c, a;
cx a, b;
}
qubit[1] cin;
qubit[4] a;
qubit[4] b;
qubit[1] cout;
bit[5] ans;
uint[4] a_in = 1; // a = 0001
uint[4] b_in = 15; // b = 1111
// initialize qubits
reset cin;
reset a;
reset b;
reset cout;
// set input states
for i in [0: 3] {
if(bool(a_in[i])) x a[i];
if(bool(b_in[i])) x b[i];
}
// add a to b, storing result in b
majority cin[0], b[0], a[0];
for i in [0: 2] { majority a[i], b[i + 1], a[i + 1]; }
cx a[3], cout[0];
for i in [2: -1: 0] { unmaj a[i], b[i + 1], a[i + 1]; }
unmaj cin[0], b[0], a[0];
measure b[0:3] -> ans[0:3];
measure cout[0] -> ans[4];