주 콘텐츠로 건너뛰기

OpenQASM 3 기능 표

아래는 OpenQASM 3 언어 기능의 목록입니다.

이러한 기능에 대한 자세한 내용은 OpenQASM 3.X Live Specification을 참고하세요.

범례:

  • ❌ 지원되지 않음
  • 🟡 부분 지원
  • ✅ 지원됨

완전한 "지원됨" 표시의 의미는 열에 따라 다릅니다:

  • Qiskit SDK: 이 기능은 qiskit.qasm3.loads로 파싱되고(즉, qiskit-qasm3-import 확장 사용), QuantumCircuit,로 표현되며, qiskit.qasm3.dumps.로 OpenQASM 3로 내보낼 수 있습니다.

  • IBM Qiskit Runtime: 해당 Qiskit 기능을 포함하는 회로가 IBM® Qiskit Runtime을 통해 하드웨어에서 성공적으로 실행될 수 있습니다.

"부분 지원"의 의미는 일반적으로 연결된 참고사항에 따라 다릅니다.

참고

IBM Qiskit Runtime에 회로를 제출하는 가장 일반적인 방법은 Qiskit SDK의 Python 공간 인터페이스에서 회로를 만드는 것입니다. 이러한 방식으로 구성되고 제출된 회로는 OpenQASM 3 파일에서 Qiskit SDK로 로드할 필요가 없습니다.

OpenQASM 3를 직접 사용하지 않는 경우, Qiskit SDK에서 표현을 지원하고 OpenQASM 3로 내보내기 및 IBM Qiskit Runtime으로 제출을 지원하는 기능을 안전하게 사용할 수 있습니다. 여기에는 Qiskit SDK가 OpenQASM 3에서 로드할 수 없는 기능도 포함됩니다.

OpenQASM 3 기능Qiskit SDK 기능Qiskit 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은 파일을 파싱하는 과정에서 이를 제거합니다. 이를 사용하는 파일은 제출될 수 있으나 아무런 효과가 없습니다. include 파일의 경우, stdgates.inc가 현재 Qiskit의 입력으로 지원되며, 백엔드 실행은 항상 백엔드 명령어 집합 아키텍처(ISA)로 컴파일된 회로를 필요로 합니다. 이때 include 파일은 관련이 없습니다.
  1. Qiskit SDK는 어떤 qubit 선언이든 OpenQASM 3 파일의 파싱 및 덤프를 지원합니다. 하드웨어 실행의 경우, 하드웨어 qubit(예: $0)으로 정의된 회로만 유효합니다. 레이아웃 정보가 있는 백엔드용으로 회로가 트랜스파일된 경우, Qiskit SDK는 지원되는 하드웨어-qubit 식별자 측면에서 자동으로 OpenQASM 3를 출력합니다.
  1. Qiskit SDK의 bit- 및 bit[n]-형식 변수 선언은 ClbitClassicalRegister 선언에 해당합니다.
  1. 2025년 7월 기준으로, Qiskit SDK는 제한된 유형 집합의 로컬 변수를 표현할 수 있고, 이러한 객체에 대한 많은 런타임 연산을 표현할 수 있으며, OpenQASM 3로의 출력도 지원합니다. 그러나 Qiskit SDK(qiskit-qasm3-import v0.6.0을 통한)는 변수 선언을 포함하는 OpenQASM 3 파일의 파싱을 지원하지 않으며, 변수 표현식의 파싱에 대해서도 매우 제한된 지원을 제공합니다. 일반적으로 Qiskit이 표현 시스템에서 표현할 수 있는 대부분은 적합한 동적 회로 하드웨어에서 실행될 수 있으며, 표현식을 Qiskit SDK에서 아직 파싱할 수 없는 경우에도 그렇습니다. 최신 정보는 Qiskit 문서의 qiskit.circuit.classical 모듈을 참고하세요.
  1. Qiskit SDK는 양자 및 고전 레지스터 모두에 대해 레지스터 별칭을 표현할 수 있으나, 고전 레지스터의 별칭 사용은 강력히 권장되지 않습니다. 고전 레지스터에 대한 대부분의 표현식은 별칭과 함께 작동하지 않으며, 별칭된 고전 레지스터는 하드웨어에서 실행이 지원되지 않습니다. Qiskit OpenQASM 3 파서는 레지스터 연결 결과를 바인딩하는 let 별칭 문을 해석할 수 있습니다.
  1. Qiskit SDK는 QuantumCircuit.delay를 통한 명시적 지연을 지원하며, 회로 박스 (QuantumCircuit.box)도 명시적 지속 시간을 가질 수 있습니다. 이러한 지속 시간은 stretch 변수의 고전 표현식을 포함할 수 있습니다. Qiskit SDK는 (2025년 7월 기준, qiskit-qasm3-import v0.6.0을 통해) OpenQASM 3 파일에서 duration 또는 stretch 유형의 선언을 파싱하는 것을 지원하지 않습니다. 하드웨어는 stretch를 포함한 지속 시간에 대해 제한된 지원을 제공합니다.
  1. 회로는 IBM 하드웨어에서 실행하려면 백엔드 ISA로 트랜스파일되어야 합니다. 이로 인해 사용자 정의 gate 정의와 같은 상위 수준 구성(예: inv @와 같은 게이트 수정자)이 하드웨어에서 원본 그대로 실행하기에는 유효하지 않지만, transpile 프로세스는 이를 유효한 ISA 회로로 해석합니다. Qiskit SDK는 (2025년 7월 기준, qiskit-qasm3-import v0.6.0을 통해) 파싱 중에 게이트 수정자를 적극적으로 평가하므로, 이들은 결과 QuantumCircuit에 나타나지 않을 수 있으며, 이는 잠재적으로 런타임 비용을 수반합니다.
  1. Qiskit SDK는 구조화된 제어 흐름을 표현할 수 있으며 이를 OpenQASM 3로 내보낼 수 있습니다. continuebreak 문은 기술적으로 Qiskit에서 표현할 수 있지만, Qiskit SDK 내에서도 잘 지원되지 않습니다. Qiskit v2.1.0의 for 루프는 잘 지원되지 않습니다. 중첩된 제어 흐름(예: 다른 if 내의 if 또는 else if 문)은 하드웨어에서 실행할 수 있는 자격이 없습니다.
  1. Qiskit SDK는 지원되는 모든 고전 유형을 회로의 input 변수로 선언하는 것을 지원합니다. 이러한 변수는 현재 하드웨어에서 실행할 수 있는 자격이 없으며, Qiskit OpenQASM 3 임포터에서 로드할 수 없습니다. QuantumCircuit에 있는 바인딩되지 않은 Parameter 객체는 input float[64] 변수로 내보내집니다. 특정 런타임 구성 옵션은 일부 백엔드에서 이러한 회로의 실행을 활성화할 수 있습니다.

다음 단계

권장 사항