기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Braket은 어떤 OpenQASM 기능을 지원하나요?
다음 섹션에는 Braket에서 지원하는 OpenQASM 3.0 데이터 유형, 문 및 pragma 명령이 나열되어 있습니다.
이 섹션의 내용:
지원되는 OpenQASM 데이터 유형
Amazon Braket은 다음과 같은 OpenQASM 데이터 유형을 지원합니다.
-
(가상 및 물리적) 큐비트 인덱스에는 음이 아닌 정수가 사용됩니다.
-
cnot q[0], q[1]; -
h $0;
-
-
게이트 회전 각도에는 부동 소수점 숫자 또는 상수를 사용할 수 있습니다.
-
rx(-0.314) $0; -
rx(pi/4) $0;
-
참고
pi는 OpenQASM의 기본 제공 상수이며 파라미터 이름으로 사용할 수 없습니다.
-
복소수 배열(허수부에 대한 OpenQASM
im표기법 사용)은 일반적인 에르미트 관찰 가능 항목을 정의하기 위한 결과 유형 pragma와 단위 pragma에서 허용됩니다.-
#pragma braket unitary [[0, -1im], [1im, 0]] q[0] -
#pragma braket result expectation hermitian([[0, -1im], [1im, 0]]) q[0]
-
지원되는 OpenQASM 문
Amazon Braket은 다음과 같은 OpenQASM 문을 지원합니다.
-
Header: OPENQASM 3; -
클래식 비트 선언:
-
bit b1;(동등하게,creg b1;) -
bit[10] b2;(동등하게,creg b2[10];)
-
-
큐비트 선언:
-
qubit b1;(동등하게,qreg b1;) -
qubit[10] b2;(동등하게,qreg b2[10];)
-
-
배열 내 인덱싱:
q[0] -
입력:
input float alpha; -
물리적 qubits의 사양:
$0 -
디바이스에서 지원되는 게이트 및 연산:
-
h $0; -
iswap q[0], q[1];
-
참고
디바이스의 지원되는 게이트는 OpenQASM 작업에 대한 디바이스 속성에서 확인할 수 있습니다. 이러한 게이트를 사용하는 데 게이트 정의가 필요하지 않습니다.
-
축어적 상자 문. 현재, 상자 기간 표기법은 지원되지 않습니다. 축어적 상자에는 네이티브 게이트와 물리적 qubits가 필요합니다.
#pragma braket verbatim box{ rx(0.314) $0; }
-
qubits 또는 전체 qubit 레지스터에 대한 측정 및 측정 할당입니다.
-
measure $0; -
measure q; -
measure q[0]; -
b = measure q; -
measure q → b;
-
-
장벽 문은 장벽 경계에서 게이트 재정렬 및 최적화를 방지하여 회로 컴파일 및 실행을 명시적으로 제어할 수 있습니다. 또한 실행 중에 엄격한 시간 순서를 적용하여 후속 작업이 시작되기 전에 모든 작업이 완료되도록 합니다.
-
barrier; -
barrier q[0], q[1]; -
barrier $3, $6;
-
Braket OpenQASM pragma
Amazon Braket은 다음과 같은 OpenQASM pragma 명령을 지원합니다.
-
노이즈 pragma
-
#pragma braket noise bit_flip(0.2) q[0] -
#pragma braket noise phase_flip(0.1) q[0] -
#pragma braket noise pauli_channel
-
-
축어적 pragma
-
#pragma braket verbatim
-
-
결과 유형 pragma
-
기저 불변 결과 유형:
-
상태 벡터:
#pragma braket result state_vector -
밀도 행렬:
#pragma braket result density_matrix
-
-
기울기 계산 pragma:
-
수반 기울기:
#pragma braket result adjoint_gradient expectation(2.2 * x[0] @ x[1]) all
-
-
Z 기저 결과 유형:
-
진폭:
#pragma braket result amplitude "01" -
확률:
#pragma braket result probability q[0], q[1]
-
-
기저 회전 결과 유형
-
기대값:
#pragma braket result expectation x(q[0]) @ y([q1]) -
분산:
#pragma braket result variance hermitian([[0, -1im], [1im, 0]]) $0 -
샘플:
#pragma braket result sample h($1)
-
-
참고
OpenQASM 3.0은 OpenQASM 2.0과 역호환되므로 2.0을 사용하여 작성된 프로그램은 Braket에서 실행할 수 있습니다. 그러나 Braket에서 지원하는 OpenQASM 3.0의 기능은 qreg vs creg 및 qubit vs bit와 같이 약간의 구문 차이가 있습니다. 측정 구문에도 차이가 있으므로 올바른 구문으로 뒷받침되어야 합니다.
로컬 시뮬레이터에서의 OpenQASM에 대한 고급 기능 지원
LocalSimulator는 Braket의 QPU 또는 온디맨드 시뮬레이터의 일부로 제공되지 않는 고급 OpenQASM 기능을 지원합니다. 다음 기능 목록은 LocalSimulator에서만 지원됩니다.
-
게이트 한정자
-
OpenQASM 기본 제공 게이트
-
고전적 변수
-
고전적 연산
-
사용자 지정 게이트
-
고전적 제어
-
QASM 파일
-
서브루틴
각 고급 기능의 예제는 이 샘플 노트북
OpenPulse에서 지원되는 연산 및 문법
지원되는 OpenPulse 데이터 유형
Cal 블록:
cal { ... }
Defcal 블록:
// 1 qubit defcal x $0 { ... } // 1 qubit w. input parameters as constants defcal my_rx(pi) $0 { ... } // 1 qubit w. input parameters as free parameters defcal my_rz(angle theta) $0 { ... } // 2 qubit (above gate args are also valid) defcal cz $1, $0 { ... }
프레임:
frame my_frame = newframe(port_0, 4.5e9, 0.0);
파형:
// prebuilt waveform my_waveform_1 = constant(1e-6, 1.0); //arbitrary waveform my_waveform_2 = {0.1 + 0.1im, 0.1 + 0.1im, 0.1, 0.1};
사용자 지정 게이트 보정 예제:
cal { waveform wf1 = constant(1e-6, 0.25); } defcal my_x $0 { play(wf1, q0_rf_frame); } defcal my_cz $1, $0 { barrier q0_q1_cz_frame, q0_rf_frame; play(q0_q1_cz_frame, wf1); delay[300ns] q0_rf_frame shift_phase(q0_rf_frame, 4.366186381749424); delay[300ns] q0_rf_frame; shift_phase(q0_rf_frame.phase, 5.916747563126659); barrier q0_q1_cz_frame, q0_rf_frame; shift_phase(q0_q1_cz_frame, 2.183093190874712); } bit[2] ro; my_x $0; my_cz $1,$0; c[0] = measure $0;
임의 펄스 예제:
bit[2] ro; cal { waveform wf1 = {0.1 + 0.1im, 0.1 + 0.1im, 0.1, 0.1}; barrier q0_drive, q0_q1_cross_resonance; play(q0_q1_cross_resonance, wf1); delay[300ns] q0_drive; shift_phase(q0_drive, 4.366186381749424); delay[300dt] q0_drive; barrier q0_drive, q0_q1_cross_resonance; play(q0_q1_cross_resonance, wf1); ro[0] = capture_v0(r0_measure); ro[1] = capture_v0(r1_measure); }