Skip to main content
IBM Quantum Platform

트랜스파일러 스케줄링 패스

qiskit_ibm_runtime.transpiler.passes.scheduling

고급 '동적 회로' 기능을 지원하는 IBM Quantum 의 차세대 백엔드로 작업하기 위한 스케줄링 패스 모음입니다. 즉., 측정 결과에 기반한 고전적인 제어 흐름/피드백을 지원하는 회로입니다. 동적 회로에 대한 자세한 내용은 클래식 피드포워드 및 제어 흐름 가이드를 참조하세요.

경고

이러한 스케줄링 패스는 동적 회로의 스케줄링 루틴과 부정적으로 상호작용할 수 있으므로 키스킷에 내장된 스케줄링 패스와 혼합해서는 안 됩니다. 여기에는 scheduling_method 설정이 포함됩니다 transpile() 또는 generate_preset_pass_manager().


클래스

BlockBasePadder패딩 패스의 기본 클래스입니다.
ALAPScheduleAnalysis동적 회로 가능한 한 늦게(ALAP) 스케줄링 분석 통과.
ASAPScheduleAnalysis동적 회로는 가능한 한 빨리(ASAP) 스케줄링 분석 패스를 사용합니다.
DynamicCircuitInstructionDurations동적 회로 명령어 실행 시간.
PadDelay지연 지침으로 유휴 시간을 늘리세요.
PadDynamicalDecouplingIBM 동적 회로 백엔드용 동적 디커플링 삽입 패스.

사용 예제

아래에서는 동적 회로 백엔드의 실행 모델에 지연이 있는 텔레포트 회로를 예약하고 패딩하는 방법을 보여드립니다:

from qiskit.circuit import ClassicalRegister, QuantumCircuit, QuantumRegister
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit.transpiler.passmanager import PassManager

from qiskit_ibm_runtime.transpiler.passes.scheduling import ALAPScheduleAnalysis
from qiskit_ibm_runtime.transpiler.passes.scheduling import PadDelay
from qiskit_ibm_runtime.fake_provider import FakeJakartaV2

backend = FakeJakartaV2()

# Use this duration class to get appropriate durations for dynamic
# circuit backend scheduling
# Generate the main Qiskit transpile passes.
pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
# Configure the as-late-as-possible scheduling pass
pm.scheduling = PassManager([
    ALAPScheduleAnalysis(target=backend.target),
    PadDelay(target=backend.target)]
    )

qr = QuantumRegister(3)
crz = ClassicalRegister(1, name="crz")
crx = ClassicalRegister(1, name="crx")
result = ClassicalRegister(1, name="result")

teleport = QuantumCircuit(qr, crz, crx, result, name="Teleport")

teleport.h(qr[1])
teleport.cx(qr[1], qr[2])
teleport.cx(qr[0], qr[1])
teleport.h(qr[0])
teleport.measure(qr[0], crz)
teleport.measure(qr[1], crx)
with teleport.if_test((crz, 1)):
    teleport.z(qr[2])
with teleport.if_test((crx, 1)):
    teleport.x(qr[2])
teleport.measure(qr[2], result)

# Transpile.
scheduled_teleport = pm.run(teleport)

scheduled_teleport.draw(output="mpl", style="iqp")
이전 코드에서 출력한 회로도입니다.

지연을 추가하는 대신, 아래와 같이 passPadDynamicalDecoupling 사용하여 동적 분리 시퀀스를 삽입할 수도 있습니다:

from qiskit.circuit.library import XGate

from qiskit_ibm_runtime.transpiler.passes.scheduling import PadDynamicalDecoupling


dd_sequence = [XGate(), XGate()]

pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
pm.scheduling = PassManager(
    [
        ALAPScheduleAnalysis(target=backend.target),
        PadDynamicalDecoupling(target=backend.target, dd_sequences=dd_sequence),
    ]
)

dd_teleport = pm.run(teleport)

dd_teleport.draw(output="mpl", style="iqp")
이전 코드에서 출력한 회로도입니다.

키스킷으로 회로를 컴파일할 때, 모든 변환을 한 번의 트랜스파일로 수행하는 것이 더 효율적이고 강력합니다. 위에서 키스킷의 프리셋 패스 관리자를 확장하여 이를 수행했습니다. 예를 들어, 키스킷의 transpile() 함수는 내부적으로 generate_preset_pass_manager() 를 사용하여 패스 세트를 빌드합니다. 의 인스턴스를 반환하며 StagedPassManager의 인스턴스를 반환하며, 이는 확장할 수 있습니다.

이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.