기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
다양한 Braket 디바이스에서 OpenQASM 지원
OpenQASM 3.0을 지원하는 디바이스의 경우 action 필드는 Rigetti 및 IonQ 디바이스에 대한 다음 예제와 같이 GetDevice 응답을 통해 새 작업을 지원합니다.
//OpenQASM as available with the Rigetti device capabilities { "braketSchemaHeader": { "name": "braket.device_schema.rigetti.rigetti_device_capabilities", "version": "1" }, "service": {...}, "action": { "braket.ir.jaqcd.program": {...}, "braket.ir.openqasm.program": { "actionType": "braket.ir.openqasm.program", "version": [ "1" ], …. } } } //OpenQASM as available with the IonQ device capabilities { "braketSchemaHeader": { "name": "braket.device_schema.ionq.ionq_device_capabilities", "version": "1" }, "service": {...}, "action": { "braket.ir.jaqcd.program": {...}, "braket.ir.openqasm.program": { "actionType": "braket.ir.openqasm.program", "version": [ "1" ], …. } } }
펄스 제어를 지원하는 디바이스의 경우 pulse 필드가 GetDevice 응답에 표시됩니다. 다음 예제에서는 Rigetti 디바이스에 대한이 pulse 필드를 보여줍니다.
// Rigetti { "pulse": { "braketSchemaHeader": { "name": "braket.device_schema.pulse.pulse_device_action_properties", "version": "1" }, "supportedQhpTemplateWaveforms": { "constant": { "functionName": "constant", "arguments": [ { "name": "length", "type": "float", "optional": false }, { "name": "iq", "type": "complex", "optional": false } ] }, ... }, "ports": { "q0_ff": { "portId": "q0_ff", "direction": "tx", "portType": "ff", "dt": 1e-9, "centerFrequencies": [ 375000000 ] }, ... }, "supportedFunctions": { "shift_phase": { "functionName": "shift_phase", "arguments": [ { "name": "frame", "type": "frame", "optional": false }, { "name": "phase", "type": "float", "optional": false } ] }, ... }, "frames": { "q0_q1_cphase_frame": { "frameId": "q0_q1_cphase_frame", "portId": "q0_ff", "frequency": 462475694.24460185, "centerFrequency": 375000000, "phase": 0, "associatedGate": "cphase", "qubitMappings": [ 0, 1 ] }, ... }, "supportsLocalPulseElements": false, "supportsDynamicFrames": false, "supportsNonNativeGatesWithPulses": false, "validationParameters": { "MAX_SCALE": 4, "MAX_AMPLITUDE": 1, "PERMITTED_FREQUENCY_DIFFERENCE": 400000000 } } }
앞의 필드에는 다음이 자세히 설명되어 있습니다.
포트:
지정된 포트의 관련 속성 외에도 QPU에 선언된 사전 생성된 외부 (extern) 디바이스 포트를 설명합니다. 이 구조에 나열된 모든 포트는 사용자가 제출한 OpenQASM 3.0 프로그램 내에서 유효한 식별자로 사전 선언됩니다. 포트의 추가 속성은 다음과 같습니다.
-
포트 ID(portId)
-
OpenQASM 3.0에서 식별자로 선언된 포트 이름입니다.
-
-
방향(방향)
-
포트의 방향입니다. 드라이브 포트는 펄스(방향 “tx”)를 전송하는 반면 측정 포트는 펄스(방향 “rx”)를 수신합니다.
-
-
포트 유형(portType)
-
이 포트가 담당하는 작업 유형(예: 드라이브, 캡처 또는 ff - fast-flux).
-
-
Dt(dt)
-
지정된 포트의 단일 샘플 시간 단계를 나타내는 초 단위 시간입니다.
-
-
Qubit 매핑(qubitMappings)
-
지정된 포트와 연결된 쿼비트입니다.
-
-
중심 빈도(centerFrequencies)
-
포트에서 사전 선언되거나 사용자가 정의한 모든 프레임의 연결된 중심 주파수 목록입니다. 자세한 내용은 프레임을 참조하세요.
-
-
QHP 특정 속성(qhpSpecificProperties)
-
QHP와 관련된 포트에 대한 기존 속성을 자세히 설명하는 선택적 맵입니다.
-
프레임:
QPU에 선언된 사전 생성된 외부 프레임과 프레임에 대한 관련 속성을 설명합니다. 이 구조에 나열된 모든 프레임은 사용자가 제출한 OpenQASM 3.0 프로그램 내에서 유효한 식별자로 사전 선언됩니다. 프레임의 추가 속성은 다음과 같습니다.
-
프레임 ID(frameId)
-
OpenQASM 3.0에서 식별자로 선언된 프레임 이름입니다.
-
-
포트 ID(portId)
-
프레임에 연결된 하드웨어 포트입니다.
-
-
빈도(빈도)
-
프레임의 기본 초기 주파수입니다.
-
-
Center Frequency(centerFrequency)
-
프레임의 주파수 대역폭 중심입니다. 일반적으로 프레임은 중앙 주파수 주위의 특정 대역폭으로만 조정할 수 있습니다. 따라서 주파수 조정은 중심 주파수의 지정된 델타 내에 있어야 합니다. 대역폭 값은 검증 파라미터에서 찾을 수 있습니다.
-
-
단계(단계)
-
프레임의 기본 초기 단계입니다.
-
-
연결된 게이트(associatedGate)
-
지정된 프레임과 연결된 게이트입니다.
-
-
Qubit 매핑(qubitMappings)
-
지정된 프레임과 연결된 쿼비트입니다.
-
-
QHP 특정 속성(qhpSpecificProperties)
-
QHP와 관련된 프레임에 대한 기존 속성을 자세히 설명하는 선택적 맵입니다.
-
SupportsDynamicFrames:
OpenPulse newframe 함수를 통해 프레임을 cal 또는 defcal 블록에서 선언할 수 있는지 여부를 설명합니다. false인 경우 프레임 구조에 나열된 프레임만 프로그램 내에서 사용할 수 있습니다.
SupportedFunctions:
지정된 OpenPulse 함수에 대해 연결된 인수, 인수 유형 및 반환 유형 외에도 디바이스에 대해 지원되는 함수를 설명합니다. OpenPulse 함수 사용 예제를 보려면 OpenPulse 사양을
-
shift_위상
-
프레임의 단계를 지정된 값으로 이동합니다.
-
-
set_위상
-
프레임의 단계를 지정된 값으로 설정합니다.
-
-
스왑_위상
-
두 프레임 간에 단계를 스왑합니다.
-
-
shift_빈도
-
프레임의 빈도를 지정된 값으로 이동합니다.
-
-
set_frequency
-
프레임의 빈도를 지정된 값으로 설정합니다.
-
-
플레이
-
파형을 예약합니다.
-
-
캡처_v0
-
캡처 프레임의 값을 비트 레지스터에 반환합니다.
-
SupportedQhpTemplateWaveforms:
디바이스에서 사용할 수 있는 사전 빌드된 파형 함수와 관련 인수 및 유형을 설명합니다. 기본적으로 Braket Pulse는 모든 디바이스에서 다음과 같은 사전 구축된 파형 루틴을 제공합니다.
상수
τ는 파형의 길이이고 iq는 복잡한 숫자입니다.
def constant(length, iq)
가우시안
τ는 파형의 길이이고, σ는 가우시안의 너비이며, A는 진폭입니다. ZaE를 로 설정하면 True가우시안은 파형의 시작과 끝에서 0과 같고 A 최대에 도달하도록 오프셋되고 다시 조정됩니다.
def gaussian(length, sigma, amplitude=1, zero_at_edges=False)
DRAG 가우시안
τ는 파형의 길이이고, σ는 가우시안의 너비이며, β는 자유 파라미터이고,는 진폭A입니다. ZaE를 로 설정하면 파형의 시작과 끝에서 0과 같고 실제 부분이 A 최대에 도달하도록 DRAG(Adiabatic Gate) 가우시안의 True파생 제거가 오프셋되고 조정됩니다. DRAG 파형에 대한 자세한 내용은 약한 비선형 쿼트에서 누출을 제거하기 위한 Simple Pulses 문서를 참조하세요
def drag_gaussian(length, sigma, beta, amplitude=1, zero_at_edges=False)
Erf 사각형
여기서 L는 길이이고, W는 파형의 너비이고,는 엣지의 상승 및 하강 속도를 σ 정의하고t22=(L+W)/2, t1=(L−W)/2 A는 진폭입니다. ZaE를 로 설정하면 True가우시안은 파형의 시작과 끝에서 0과 같고 A 최대에 도달하도록 오프셋되고 다시 조정됩니다. 다음 방정식은 파형의 크기 조정된 버전입니다.
여기서 a=erf(W/2σ)및 입니다b=erf(-t1/σ)/2+erf(t2/σ)/2.
def erf_square(length, width, sigma, amplitude=1, zero_at_edges=False)
SupportsLocalPulseElements:
포트, 프레임 및 파형과 같은 펄스 요소를 defcal 블록에서 로컬로 정의할 수 있는지 여부를 설명합니다. 값이 인 경우 false요소를 cal 블록에 정의해야 합니다.
SupportsNonNativeGatesWithPulses:
네이티브가 아닌 게이트를 펄스 프로그램과 함께 사용할 수 있는지 여부를 설명합니다. 예를 들어 사용된 쿼비트에 defcal 대해 H를 통해 게이트를 먼저 정의하지 않으면 프로그램의 게이트와 같은 기본이 아닌 게이트를 사용할 수 없습니다. 디바이스 기능에서 네이티브 게이트 nativeGateSet 키 목록을 찾을 수 있습니다.
ValidationParameters:
다음을 포함하여 펄스 요소 검증 경계를 설명합니다.
-
파형의 최대 규모/최대 진폭 값(임의 및 사전 빌드됨)
-
제공된 중심 주파수에서 Hz 단위의 최대 주파수 대역폭
-
초 단위의 최소 펄스 길이/지속 시간
-
최대 펄스 길이/초 단위 지속 시간
OpenQASM에서 지원되는 작업, 결과 및 결과 유형
각 디바이스에서 지원하는 OpenQASM 3.0 기능을 확인하려면 디바이스 기능 출력의 action 필드에서 braket.ir.openqasm.program 키를 참조할 수 있습니다. 예를 들어 다음은 Braket 상태 벡터 시뮬레이터에 사용할 수 있는 지원되는 작업 및 결과 유형입니다SV1.
... "action": { "braket.ir.jaqcd.program": { ... }, "braket.ir.openqasm.program": { "version": [ "1.0" ], "actionType": "braket.ir.openqasm.program", "supportedOperations": [ "ccnot", "cnot", "cphaseshift", "cphaseshift00", "cphaseshift01", "cphaseshift10", "cswap", "cy", "cz", "h", "i", "iswap", "pswap", "phaseshift", "rx", "ry", "rz", "s", "si", "swap", "t", "ti", "v", "vi", "x", "xx", "xy", "y", "yy", "z", "zz" ], "supportedPragmas": [ "braket_unitary_matrix" ], "forbiddenPragmas": [], "maximumQubitArrays": 1, "maximumClassicalArrays": 1, "forbiddenArrayOperations": [ "concatenation", "negativeIndex", "range", "rangeWithStep", "slicing", "selection" ], "requiresAllQubitsMeasurement": true, "supportsPhysicalQubits": false, "requiresContiguousQubitIndices": true, "disabledQubitRewiringSupported": false, "supportedResultTypes": [ { "name": "Sample", "observables": [ "x", "y", "z", "h", "i", "hermitian" ], "minShots": 1, "maxShots": 100000 }, { "name": "Expectation", "observables": [ "x", "y", "z", "h", "i", "hermitian" ], "minShots": 0, "maxShots": 100000 }, { "name": "Variance", "observables": [ "x", "y", "z", "h", "i", "hermitian" ], "minShots": 0, "maxShots": 100000 }, { "name": "Probability", "minShots": 1, "maxShots": 100000 }, { "name": "Amplitude", "minShots": 0, "maxShots": 0 } { "name": "AdjointGradient", "minShots": 0, "maxShots": 0 } ] } }, ...