SabreSwap
class qiskit.transpiler.passes.SabreSwap(*args, **kwargs)
ベース: TransformationPass
SWAPの挿入により、入力回路をバックエンドのトポロジーにマッピングする。
SABRE量子ビットマッピング論文 [2] (アルゴリズム1)のSWAPベースのヒューリスティック探索に、論文 [1] ( LightSABRE )の修正を加えたもの。 このヒューリスティックは、挿入されるロッシーSWAPの数と回路の深さを最小化することを目的としている。
このアルゴリズムは、物理量子ビットに仮想量子ビットを配置する初期レイアウトから開始し、途中でSWAPを挿入しながら、すべてのゲートがなくなるまで回路DAGを反復する。 マッピング問題にとって重要なのは2量子ビットのゲートだけだからだ(3量子ビット以上のゲートはすでに分解されていると仮定している)。
各反復において、まず front_layer 、直接適用できるゲートがあるかどうかをチェックする。 もしそうなら、それを適用し、 front_layer、可能なら新しいゲートでその層を補充する。 そうでなければ、SWAPを検索し、SWAPを挿入し、マッピングを更新しようとする。
SWAPの探索は、 front_layer に関係する量子ビットの近傍にある物理的な量子ビットのみを考慮するという意味で、制限されている。 これらは、ヒューリスティックなコスト関数に従って採点される swap_candidate_list 。 最適なSWAPを導入し、 current_layout 。
このトランスパイラ・パスは、異なるシードを使用してアルゴリズムを複数回実行するという点で、SABREアルゴリズムを拡張するものです。 ランダムに選択された試行の中から、SWAPの挿入回数が最も少ない試行で得られた最良の結果が選ばれます。
参照資料:
[1] ヘンリー・ゾウ、マシュー・トレイニッシュ、ケビン・ハートマン、アレクサンダー・イヴリイ、ジェイク・リッシュマン。 “LightSABRE: 軽量で強化されたSABREアルゴリズム" arXiv:2409.08368[ 2] Li, Gushu, Yufei Ding, and Yuan Xie. "NISQ時代の量子デバイスの量子ビットマッピング問題に挑む" ASPLOS 2019. arXiv:1809.02573
SabreSwap イニシャライザー。
パラメーター
- coupling_map (Union[CouplingMap, Target]) – CouplingMap ターゲットとなるバックエンドの
- heuristic (str) – 最適なスワップ戦略を決定する際に使用するヒューリスティックの種類(「ベーシック」または「ルックアヘッド」または「ディケイ」)。
- seed (int) – スワップ候補間のタイブレークに使用されるランダムシード。
- fake_run (bool) – もしtrueなら、ルーティングをするふりをするだけで、スワップは事実上追加されない。
- trials (int) – セイバーを使用するシードトライアルの数。 これらは並行して実行される( PassManager がすでに並行して実行されている場合を除く)。 指定しない場合は、ローカルシステムの物理CPU数がデフォルトとなる。 再現性のある結果を得るためには、この値を明示的に設定することを推奨する。
レイズ
TranspilerError - 指定されたヒューリスティックが有効でない場合。
追加情報
物理量子ビット上で可能なSWAPの探索空間は、各SWAPから得られるであろうレイアウトにスコアを割り当てることによって探索される。 レイアウトの良し悪しは、適用しなければならない残りのバーチャルゲートをどれだけ実行可能にするかで評価される。 いくつかの発見的コスト関数がサポートされている
- ベーシック」:
front_layerの相互作用する仮想量子ビットの対応する物理量子ビットの距離の和。
- ルックアヘッド」:
これは2つのコストの合計です。1つ目は基本コストと同じです。 2つ目は基本コストですが、ここでは拡張セットについても評価されます(つまり、 _layer Fの前のゲートに続く後続ゲートの数)。 これは、EXTENDED_SET_WEIGHT (W) という重み付けが適用されており、後続のゲートはフロントレイヤーよりも重要度が低いことを示しています。
- 崩壊」:
これは「ルックアヘッド」と同じだが、コスト全体に減衰係数が掛けられる。 これは、トライアルレイアウトを生成したSWAPが最近使用されたものである場合、コストを増加させる(すなわち、深さの増加にペナルティを課す)。
属性
coupling_map
dist_matrix
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)
ダグに SabreSwap。
パラメーター
dag (DAGCircuit) – マップされる有向無サイクルグラフ。
戻り値
coupling_mapと互換性があるようにマップされたダグ。
戻りの型
レイズ
- TranspilerError - もしカップリング・マップやレイアウトが
- DAG と互換性がある **、または coupling_map=None の場合は ** –
update_status
update_status(state, run_state)
ワークフローのステータスを更新する。
パラメーター
- state (PassManagerState) – 更新するマネージャーの状態を渡す。
- run_state (RunState) – 現在のタスクの完了状況。
戻り値
パスマネージャーの状態を更新。
戻りの型