フローグラフのパフォーマンス推定

フローグラフのパフォーマンス推定#

フローグラフのパフォーマンスやスケーラビリティーを予測するのは容易ではありません。ただし、一部のグラフのパフォーマンスとスピードアップの限界を予測する際に、役立つ重要なポイントがいくつかあります。

クリティカル・パスは依存関係グラフのスケーラビリティーを制限

クリティカル・パスとは、先行ノードのないノードから後続ノードのないノードまでの最も時間のかかるパスです。依存関係グラフでは、パスに沿ったノードの実行は厳密に順序付けされるため、重複できません。したがって、依存関係グラフでは、クリティカル・パスによってスケーラビリティーが制限されます。

より正式には、グラフ内のすべてのノードをシーケンシャル実行した総時間を T とします。次に、最も時間のかかるパスの時間を C とします。このパスのノードは、並列実行でも重複できません。したがって、他のすべてのパスが C と並列に実行されても、並列実行のウォールクロック時間は少なくとも C であり、最大のスピードアップ (マイクロアーキテクチャーとメモリーの影響を無視) は T/C になります。

ノードボディーをタスクとして生成するとオーバーヘッドが発生

input_nodesfunction_nodescontinue_nodes、および multifunction_nodes のボディーは、デフォルトで生成されたタスク内で実行されます。つまり、ノードがボディーを実行する時間を見積もるときに、タスク・スケジュールのオーバーヘッドを考慮する必要があります。したがって、適切なタスクの粒度を決定する経験則はすべて、ノードボディーにも適用されます。フローグラフに細分化されたノードが多数ある場合、これらのオーバーヘッドの影響によりパフォーマンスが著しく低下する可能性があります。ただし、グラフ構造によっては、これらのノードで軽量ポリシーを使用することで、このようなオーバーヘッドを削減できます。