OpenVINO グラフ書き換えパス¶
ov::pass::GraphRewrite
は、単一のグラフ走査で ov::Model
上の複数のマッチャーパスを実行するために機能します。
例:
// Two matcher passes will run simultaneously in a single graph traversal
ov::pass::GraphRewrite pass;
pass.add_matcher<ov::pass::DecomposeDivideMatcher>();
pass.add_matcher<ov::pass::ReluReluFusionMatcher>();
pass.run_on_model(f);
さらに、GraphRewrite は、MatcherPasses の実行中に登録されたノードを処理します。このノードは、パターンマッチング用のノードとともにシーケンスの先頭に追加されます。
注
ov::pass::Manager
を使用する場合、単一の MatcherPass を実行するため一時的な GraphRewrite が使用されます。
GraphRewrite には、MatcherPasses 実行用の 2 つのアルゴリズムがあります。最初のアルゴリズムはストレートフォワードです。各 MatcherPass を登録順に現在のノードに適用します。
ただし、登録されたパスが多くなるとあまり効率的ではありません。最初に、GraphRewrite は、すべての MatcherPass パターンにタイプベースのルートノードがあることを確認します (これは、このノードのタイプがプレディケートに隠蔽されていないことを意味します)。そして、登録された MatcherPasse からマップを作成します。これにより、ノードごとに MatcherPass を適用する追加コストを回避できます。
注
GraphRewrite の実行アルゴリズムは手動で設定できず、MatcherPasses 内に登録されたルートノードにのみ依存します。