OpenQASM 3 기능 표
아래는 OpenQASM 3 언어 기능 목록입니다.
이러한 기능에 대한 자세한 내용은 OpenQASM 3.X 라이브 사양을 참조하세요.
키:
- ❌ 지원되지 않음
- 🟡 부분 지원
- ✅ 지원됨
완전한 "지원됨" 표시의 의미는 열에 따라 다릅니다:
-
Qiskit SDK : 해당 기능은 (확장
qiskit-qasm3-import기능을 사용하여qiskit.qasm3.loads) 파싱될 수 있으며, 로 표현되고,QuantumCircuitOpenQASM 3 로 내보내질 수qiskit.qasm3.dumps있습니다. -
IBM Quantum 컴퓨트 서비스 : 해당 Qiskit 기능을 포함하는 회로는 IBM Quantum 컴퓨트 서비스를 통해 하드웨어에서 성공적으로 실행될 수 있습니다.
'부분 지원'의 의미는 일반적으로 링크된 노트에 따라 다릅니다.
IBM Quantum Compute Service에 서킷을 제출하는 가장 일반적인 방법은 Python -space 인터페이스를 통해 Qiskit SDK 에 서킷을 생성하는 것입니다. 이러한 방식으로 구성하여 제출한 회로는 OpenQASM 3 파일에 있는 파일을 Qiskit SDK 로 불러올 필요가 없습니다.
OpenQASM 3를 직접 사용하지 않는 경우에도, Qiskit SDK 에서 지원되는 기능을 안전하게 활용하고, OpenQASM 3로 내보내며, IBM Quantum Compute Service에 제출할 수 있습니다. 여기에는 OpenQASM 3의 Qiskit SDK 를 통해 불러올 수 없는 기능들이 포함됩니다.
OpenQASM 3 기능 | 키스킷 SDK 기능 | Qiskit SDK | IBM Quantum 컴퓨팅 서비스 | 참고 |
|---|---|---|---|---|
| 주석 | ✅ | ✅ | 1 | |
| QASM vstring | ✅ | ✅ | 1 | |
include | 🟡 | ❌ | 1, 7 | |
| 유니코드 이름 | ✅ | ✅ | ||
qubit | Qubit 및 QuantumRegister | ✅ | 🟡 | 2개 |
bit | Clbit 및 ClassicalRegister | ✅ | ✅ | 3 |
bool | expr.Var 및 고전적인 표현 | 🟡 | ✅ | 4 |
int | ❌ | ✅ | 4 | |
uint | expr.Var 및 고전적인 표현 | 🟡 | ✅ | 4 |
float | expr.Var 및 고전적인 표현 | 🟡 | 🟡 | 4 |
angle | 암시적, 게이트 매개변수로서 | ❌ | 🟡 | 4 |
complex | ❌ | ❌ | 4 | |
const | ❌ | ❌ | 4 | |
pi/π/tau/τ/euler/ℇ | 게이트 파라미터로 상수화 | ✅ | ✅ | |
| 앨리어싱: let | 양자 및 클래식 레지스터 | 🟡 | ❌ | 5 |
| 등록 연결 | 양자 및 클래식 레지스터 | 🟡 | ❌ | 5 |
| 캐스팅 | expr.Cast 클래식 표현식 | 🟡 | 🟡 | 4 |
duration | ❌ | ❌ | ||
durationof | ❌ | ❌ | ||
ns/µs/us/ms/s/dt | delay 및 box | ✅ | ✅ | 6 |
stretch | expr.Stretch | 🟡 | 🟡 | 4, 6 |
delay | Delay/QuantumCircuit.delay | ✅ | ✅ | 6 |
barrier | Barrier/QuantumCircuit.barrier | ✅ | ✅ | |
box | BoxOp/QuantumCircuit.box | ✅ | ❌ | 6 |
기본 제공 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 | ✅ | ✅ | |
| 비트 조작 | 🟡 | ✅ | 4 | |
| 부울 조작 | 🟡 | ✅ | 4 | |
| 산술 연산식 | 🟡 | 🟡 | 4 | |
| 비교 | 🟡 | ✅ | 4 | |
if | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else if | QuantumCircuit.if_test | ✅ | ❌ | 8 |
for 루프 | QuantumCircuit.for_loop | 🟡 | ❌ | 8 |
while 루프 | QuantumCircuit.while_loop | ✅ | ❌ | 8 |
continue | QuantumCircuit.continue_loop | 🟡 | ❌ | 8 |
break | QuantumCircuit.break_loop | 🟡 | ❌ | 8 |
return | ❌ | ❌ | ||
extern | ❌ | ❌ | ||
def 서브루틴(클래식) | ❌ | ❌ | ||
def 서브루틴(퀀텀) | ❌ | ❌ | ||
input | QuantumCircuit.add_input | ✅ | 🟡 | 4, 9 |
output | ❌ | ❌ |
참고
- 이 OpenQASM 3 가지 프로그램 기능은 실행에 영향을 미치지 않으며 키스킷은 파일 구문 분석의 일부로 제거합니다 를 제거합니다. 이를 사용하는 파일은 제출할 수 있지만 효과가 없습니다 효력이 없습니다.
include파일의 경우, 현재 키스킷의 입력으로stdgates.inc이 지원됩니다, 그리고 백엔드 실행을 위해서는 항상 백엔드 명령어 집합 아키텍처(ISA)로 컴파일된 회로가 필요하며, 여기서include파일은 관련이 없다.
- 키스킷 SDK는
qubit선언이 포함된 OpenQASM 3 파일 구문 분석 및 덤핑을 지원합니다. 의 경우 하드웨어에서 실행하는 경우 하드웨어 큐비트(예:$0)로 정의된 회로만 유효합니다. 키스킷 SDK는 지원되는 하드웨어 쿼비트에 대해 OpenQASM 3을 자동으로 출력합니다 식별자를 출력합니다. 회로가 레이아웃 정보와 함께 백엔드용으로 트랜스파일된 경우.
bit- 및bit[n]- 타입의 변수 선언은 키스킷 SDK에서Clbit및ClassicalRegister선언에 해당한다.
- 2025년 7월 현재, 키스킷 SDK는 제한된 유형의 로컬 변수를 표현할 수 있으며, 다음과 같은 많은 런타임 연산을 표현할 수 있다 이러한 객체에 대한 많은 런타임 연산을 표현할 수 있으며 OpenQASM 3으로 출력하는 것을 지원합니다.
그러나 키스킷 SDK(
qiskit-qasm3-importv0.6.0 )는 변수 선언이 포함된 OpenQASM 3 파일의 구문 분석을 지원하지 않으며, 변수 선언이 포함된 변수 표현식 구문 분석을 매우 제한적으로 지원합니다. 일반적으로 키스킷이 표현식 시스템에서 표현할 수 있는 대부분의 것은 표현식을 아직 구문 분석할 수 없더라도 적절한 동적 회로 하드웨어에서 실행할 수 있습니다 키스킷 SDK. 최신 정보는 모듈의 키스킷 문서에서qiskit.circuit.classical모듈의 을 참조하세요.
- 키스킷 SDK는 양자 레지스터와 기존 레지스터 모두에 대해 레지스터 앨리어싱을 표현할 수 있지만, 기존 레지스터의 앨리어싱을 사용하는 것은 클래식 레지스터의 앨리어싱을 사용하는 것은 강력히 권장하지 않습니다. 클래식 레지스터의 대부분의 표현식은 레지스터의 대부분의 표현식은 별칭과 함께 작동하지 않으며, 별칭이 지정된 클래식 레지스터는 하드웨어에서 실행을 지원하지 않습니다. 키스킷 OpenQASM 3 구문 분석기는
let에일리어스 문을 해결할 수 있다 를 바인딩하는 별칭 문을 해석할 수 있습니다.
- 키스킷 SDK는
QuantumCircuit.delay을 통해 명시적 지연을 지원하며, 회로 상자( (QuantumCircuit.box)에서도 명시적인 지연 시간을 가질 수 있습니다. 이러한 기간에는 고전적인stretch변수의 표현식을 포함할 수 있습니다. 키스킷 SDK(2025년 7월부터qiskit-qasm3-importv0.6.0 )는duration또는stretch유형의 구문 분석 선언을 지원하지 않습니다 OpenQASM 3 파일. 하드웨어는stretch을 포함한 기간에 대한 지원이 제한되어 있습니다.
- IBM 하드웨어에서 실행하려면 회로를 백엔드 ISA로 트랜스파일해야 합니다. 이렇게 하면 사용자 정의
gate정의와 게이트 수정자(예:inv @)와 같은 상위 수준 구조체는 를 하드웨어에서 그대로 실행할 수 없지만,transpile프로세스는 이를 를 유효한 ISA 회로로 변환합니다. 키스킷 SDK( 2025년 7월부터qiskit-qasm3-importv0.6.0 )는 구문 분석 중에 게이트 수정자를 열심히 평가할 것이므로, 이러한 게이트 수정자는 결과에서 명백하게 드러나지 않을 것입니다(QuantumCircuit, 잠재적으로 런타임 비용이 발생할 수 있습니다.
- Qiskit SDK는 구조화된 제어 흐름을 표현하고 이를 OpenQASM 3으로 내보낼 수 있습니다. 와
continue및break문은 기술적으로 키스킷으로 표현할 수 있지만, 키스킷 SDK 내에서도 잘 지원되지 않습니다 에서도 잘 지원되지 않습니다.for루프 v2.1.0 는 잘 지원되지 않습니다. 중첩된 제어 흐름(예: 다른if내부의if또는else if문)은 하드웨어에서 실행할 수 없습니다 실행할 수 없습니다.
- 키스킷 SDK는 지원되는 모든 클래식 유형을 회로에서
input변수로 선언하는 것을 지원합니다. 이러한 변수는 현재 하드웨어에서 실행할 수 없으며, 다음과 같은 방법으로 로드할 수 없습니다 키스킷 OpenQASM 3 임포터로 로드할 수 없습니다.QuantumCircuit에 있는 바인딩되지 않은Parameter객체는input float[64]변수로 내보냅니다. 특정 런타임 구성 옵션에 따라 일부 백엔드에서 이러한 회로를 실행할 수 있습니다.
다음 단계
- IBM 퀀텀 컴포저를 사용하여 OpenQASM 코드를 생성하는 방법을 알아보세요.
- OpenQASM 3 키스킷 API 참조를 참조하세요.
- OpenQASM 2 키스킷 API 참조를 참조하세요.
- ‘프로그램 확인’ 항목을 다시 한 번 확인해 주세요.
- OpenQASM 라이브 사양을 참조하세요.