LookaheadSwap
class qiskit.transpiler.passes.LookaheadSwap(*args, **kwargs)
ベース: TransformationPass
SWAPの挿入により、入力回路をバックエンドのトポロジーにマッピングする。
2018 Qiskit Developer Challengeに提出されたSven Janduraのスワップマッパーの実装を、トランスパイラーアーキテクチャに統合するために適応させた。
スワッパー・パスの役割は、開始回路をターゲット・デバイスのトポロジー(ハードウェア上で利用可能な2量子ビット・ゲートの集合)に適合するように修正することである そのために、パスはSWAPゲートを挿入し、各ゲートの仮想量子ビットを結合された物理量子ビットのセット上に再配置する。 しかし、SWAPゲートは特に損失が大きいため、可能な限り少ない追加SWAPを導入しながら、この再マッピングを達成することが目標となる。
このアルゴリズムは、以下のような絞り込まれたベストファースト/ビームサーチによって、利用可能なSWAPゲートの組み合わせを検索する:
- 物理量子ビット上に仮想量子ビットをレイアウトするところから始める。
- 入力回路から、現在のレイアウトで実行可能なゲートを見つけ、マップ済みとしてマークする。
- 可能性のあるすべてのSWAPゲートについて、それらを適用した場合のレイアウト を計算し、その結果得られるレイアウトの、近接するゲートとの距離に従ってランク付けす る( _calc_layout_distance 参照)
- 4つの(search_width)最高順位のSWAPについて、それらが適用された場合に生成されるレイアウト上で上記のプロセスを繰り返す。
- このプロセスを、最初のレイアウトから4(search_depth)SWAP先の深さまで 繰り返し、合計256(search_width^search_depth)の将来のレイアウトを得る。
- 実行可能な2量子ビットの数を最大にするレイアウトを選択する。 生成されたSWAPを含む、そのマッピングされたゲートを出力回路に加える。
- 初期回路のすべてのゲートがマッピングされるまで、上記を繰り返す。
アルゴリズムの詳細については、スヴェンのブログ記事を参照のこと: https://medium.com/qiskit/improving-a-quantum-compiler-48410d7a7084
LookaheadSwap イニシャライザー。
パラメーター
- coupling_map (Union[CouplingMap, Target]) – CouplingMap ターゲットとなるバックエンドの
- search_depth (int) – 最適なSWAPオプションをランク付けする際の、先読みツリーの深さ。
- search_width (int) – 最適なSWAPオプションをランク付けする際の、先読みツリーの幅。
- fake_run (bool) – もしtrueなら、ルーティングをするふりをするだけで、スワップは事実上追加されない。
属性
is_analysis_pass
パスが分析パスかどうかをチェックする。
パスが AnalysisPass,、パスがDAGを分析し、その分析結果をプロパティセットに書き込むことができることを意味する。 この種のパスでは、DAGの変更は許されない。
is_transformation_pass
パスが変形パスかどうかをチェックする。
パスが TransformationPass, の場合、そのパスはDAGを操作することはできるが、プロパティセットを変更することはできない(ただし、読み取ることはできる)ことを意味する。
方法
execute
execute(passmanager_ir, state, callback=None)
入力Qiskit IRに対して最適化タスクを実行する。
パラメーター
- passmanager_ir (Any) – Qiskit IRを最適化する。
- state (PassManagerState) – パスマネージャー自身によるワークフロー実行に関連する状態。
- callback (Callable | None) – 最適化タスクの実行ごとに呼び出されるコールバック関数。
戻り値
Qiskit IRとワークフローの状態を最適化。
戻りの型
タプル [ Any, PassManagerState ]
name
run
run(dag)
ダグに LookaheadSwap。
パラメーター
dag (DAGCircuit) – マップされる有向無サイクルグラフ
戻り値
のcoupling_mapと互換性があるようにマップされたダグ。
プロパティを設定する。
戻りの型
レイズ
- TranspilerError - もしカップリング・マップやレイアウトが
- DAG と互換性がある **、または coupling_map=None の場合は ** –
update_status
update_status(state, run_state)
ワークフローのステータスを更新する。
パラメーター
- state (PassManagerState) – 更新するマネージャーの状態を渡す。
- run_state (RunState) – 現在のタスクの完了状況。
戻り値
パスマネージャーの状態を更新。
戻りの型