Skip to main content
IBM Quantum Platform

ConstrainedReschedule

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

GitHub

ベース: AnalysisPass

ノードの開始時刻をハードウェアのアライメントに合わせて更新するリスケジューラーパス。

このパスでは、スケジューリングパスの1つで以前にスケジュールされた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

ノード

あなたのバックエンドは、これらのアライメント制約に違反する回路を実行するかもしれない。 しかし、インストラクションのミスアライメントに起因するトラッキングされない位相のために、誤った測定結果を得る可能性があります。

新しいリスケジューラー・パスを作成する。

アライメント値は量子プロセッサーの制御電子回路によって異なります。

パラメーター

  • acquire_alignment - アクイジション命令のトリガーとなる最小時間分解能を表す整数で、単位は dt
  • pulse_alignment - ゲート命令をトリガするための最小時間分解能を表す整数値(単位: dt )。
  • target - バックエンドを表す Targettarget が指定された場合、この引数が優先され、 acquire_alignmentpulse_alignment は無視されます。

属性

is_analysis_pass

パスが分析パスかどうかをチェックする。

パスが AnalysisPass,、パスがDAGを分析し、その分析結果をプロパティセットに書き込むことができることを意味する。 この種のパスでは、DAGの変更は許されない。

is_transformation_pass

パスが変形パスかどうかをチェックする。

パスが TransformationPass, の場合、そのパスはDAGを操作することはできるが、プロパティセットを変更することはできない(ただし、読み取ることはできる)ことを意味する。


方法

execute

execute(passmanager_ir, state, callback=None)

GitHub

入力Qiskit IRに対して最適化タスクを実行する。

パラメーター

  • passmanager_ir (Any) – Qiskit IRを最適化する。
  • state (PassManagerState) – パスマネージャー自身によるワークフロー実行に関連する状態。
  • callback (Callable | None) – 最適化タスクの実行ごとに呼び出されるコールバック関数。

戻り値

Qiskit IRとワークフローの状態を最適化。

戻りの型

タプル [ Any, PassManagerState ]

name

name()

GitHub

パスの名前

戻りの型

str

run

run(dag)

GitHub

リスケジューラを実行する。

このパスでは、リスケジューリングを実行し、満足させる必要がある:

  • すべての DAGOpNode ノード(コンパイラ指令を除く)は、ハードウェアのアライメント制約を満たすように開始時に配置される。
  • ノードの終了時刻は、後続ノードの開始時刻と重ならない。

前提事項:

  • DAGOpNode、トポロジカルな秩序と絶対的な時間秩序は一致している。
  • ノードに関連するqargsまたはcargsのすべてのビットが同期して開始する。
  • qargsとcargsの開始時間は、I/O待ち時間のために異なる場合があります。

上記の構成に基づき、リスケジューラー・パスは以下の戦略をとる:

  1. ノードはトポロジー順に処理される。

    回路の左から右へ)。 すべてのノード(コンパイラ・ディレクティブを含む)に対して、関数 _push_node_back はステップ2と3を実行する。

  2. ノードの開始時刻がアライメント制約に違反する場合、

    の場合、制約を満たすために開始時間が長くなる。

  3. start_timeがノードのend_timeと重複する各直接後継は、以下のようになる。

    を後方(ワイヤーの端の方)に押す。 この時点では、シフトされた後継ノードは制約を満たす必要はないが、これはその後継ノード自体が処理されるときに処理されることに注意されたい。

  4. すべてのノードが処理された後、すべてのミスアライメント制約が解決される、

    ノードの重なりはない。

パラメーター

dag (DAGCircuit) – 制約条件付きで再スケジュールされるDAG回路。

レイズ

TranspilerError - サーキットが予定されていない場合。

update_status

update_status(state, run_state)

GitHub

ワークフローのステータスを更新する。

パラメーター

  • state (PassManagerState) – 更新するマネージャーの状態を渡す。
  • run_state (RunState) – 現在のタスクの完了状況。

戻り値

パスマネージャーの状態を更新。

戻りの型

PassManagerState

このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。