Skip to main content
IBM Quantum Platform

ConstrainedReschedule

class qiskit.transpiler.passes.ConstrainedReschedule(*args, **kwargs)

GitHub

베이스: AnalysisPass

하드웨어 정렬에 맞게 노드 시작 시간을 업데이트하는 스케줄러 패스를 다시 설정합니다.

이 패스는 이전에 스케줄링 패스 중 하나를 사용하여 예약된 DAG 노드 시작 시간을 변경합니다. ASAPScheduleAnalysis 또는 ALAPScheduleAnalysis를 사용하여 모든 명령어 시작 시간이 정렬 제약 조건을 충족하도록 합니다.

예제

백엔드에서 16dt의 획득 정렬을 사용하여 다음 회로를 실행한다고 가정합니다.

     ┌───┐┌────────────────┐┌─┐
q_0: ┤ X ├┤ Delay(100[dt]) ├┤M├
     └───┘└────────────────┘└╥┘
c: 1/════════════════════════╩═
                             0

100dt의 지연은 측정 시 4dt의 오정렬을 유발한다는 점에 유의하세요. 이 패스는 입력 회로에 12dt 시간 이동을 추가합니다.

     ┌───┐┌────────────────┐┌─┐
q_0: ┤ X ├┤ Delay(112[dt]) ├┤M├
     └───┘└────────────────┘└╥┘
c: 1/════════════════════════╩═
                             0

참고

백엔드에서 이러한 정렬 제약 조건을 위반하는 회로를 실행할 수 있습니다. 그러나 명령어 오정렬로 인해 추적되지 않은 위상이 발생하여 잘못된 측정 결과가 나올 수 있습니다.

새 일정 예약자 패스를 만듭니다.

정렬 값은 양자 프로세서의 제어 전자장치에 따라 달라집니다.

매개변수

  • 획득_정렬 - 획득 명령을 트리거하기 위한 최소 시간 해상도를 나타내는 정수로 dt 단위입니다.
  • pulse_alignment - 게이트 명령을 트리거하기 위한 최소 시간 분해능을 나타내는 정수로 dt 단위입니다.
  • 대상 - 대상 백엔드를 나타내는 Target 대상 백엔드를 나타내는 인자로, target 가 지정되면 이 인수가 우선하고 acquire_alignmentpulse_alignment 는 무시됩니다.

속성

is_analysis_pass

패스가 분석 패스인지 확인합니다.

패스가 AnalysisPass, 인 경우 패스가 DAG를 분석하고 해당 분석 결과를 속성 집합에 쓸 수 있음을 의미합니다. 이러한 종류의 패스에서는 DAG에 대한 수정이 허용되지 않습니다.

is_transformation_pass

패스가 변환 패스인지 확인합니다.

패스가 TransformationPass, 인 경우 패스가 DAG를 조작할 수는 있지만 속성 집합을 수정할 수는 없음을 의미합니다(단, 읽을 수는 있음).


메소드

execute

execute(passmanager_ir, state, callback=None)

GitHub

입력된 키스킷 IR에 대한 최적화 작업을 실행합니다.

매개변수

  • passmanager_ir (IR) – 최적화할 Qiskit IR.
  • state (PassManagerState) – 패스 관리자 자체의 워크플로 실행과 관련된 상태입니다.
  • callback (Callable[[Task, IR_OUT, PropertySet, float, int], None] | None) – 최적화 작업이 실행될 때마다 호출되는 콜백 함수입니다.

리턴

최적화된 키스킷 IR 및 워크플로 상태.

리턴 유형

튜플 [ IR_OUT, PassManagerState ]

name

name()

GitHub

패스 이름.

리턴 유형

str

run

run(dag)

GitHub

스케줄러를 실행합니다.

이 패스는 만족스러운 일정 변경을 수행해야 합니다:

  • 모든 DAGOpNode 노드(컴파일러 지시어 제외)는 하드웨어 정렬 제약 조건을 충족하는 시작 시간에 배치됩니다.
  • 노드의 종료 시간은 후속 노드의 시작 시간과 겹치지 않습니다.

가정:

  • DAGOpNode 의 토폴로지 순서와 절대 시간 순서는 일치합니다.
  • 노드와 연결된 qargs 또는 cargs의 모든 비트가 동기적으로 시작됩니다.
  • I/O 대기 시간으로 인해 쿼리와 카그의 시작 시간이 다를 수 있습니다.

위의 구성에 따라 스케줄러 패스는 다음과 같은 전략을 취합니다:

  1. 노드는 시작부터 토폴로지 순서대로 처리됩니다

    회로(즉, 왼쪽에서 오른쪽으로)로 이동합니다. 모든 노드(컴파일러 지시어 포함)에 대해 _push_node_back 함수는 2단계와 3단계를 수행합니다.

  2. 노드의 시작 시간이 정렬 제약 조건을 위반하는 경우,

    로 설정하면 제약 조건을 충족하기 위해 시작 시간이 늘어납니다.

  3. 시작_시간이 노드의 종료_시간과 겹치는 각 직계 후계자는 다음과 같습니다

    를 뒤로(와이어 끝으로) 밀어 넣습니다. 이 시점에서 시프트된 후계 노드는 제약 조건을 충족할 필요가 없지만, 이는 후계 노드 자체가 처리될 때 처리됩니다.

  4. 모든 노드가 처리되면 모든 정렬 제약 조건이 해결됩니다,

    노드 간에 겹치지 않습니다.

매개변수

dag (DAGCircuit) – 제약 조건으로 일정을 변경할 DAG 회로입니다.

레이즈

TranspilerError – 회로가 예정되어 있지 않은 경우.

update_status

update_status(state, run_state)

GitHub

워크플로 상태를 업데이트합니다.

매개변수

  • state (PassManagerState) – 관리자 상태를 전달하여 업데이트합니다.
  • run_state (RunState) – 현재 작업의 완료 상태입니다.

리턴

패스 관리자 상태가 업데이트되었습니다.

리턴 유형

PassManagerState

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