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

フローグラフのパフォーマンスやスケーラビリティーを予測することは簡単ではありません。しかし、グラフのパフォーマンスやスピードアップに対する制限を推定するときに役立つ重要なポイントがいくつかあります。

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

クリティカル・パスは、プレデセッサーのないノードからサクセサーのないノードへの最も時間がかかるパスです。依存関係グラフでは、ノードの実行に厳密な順序があるため、パスに沿ったノードの実行をオーバーラップすることはできません。このため、依存関係グラフでは、クリティカル・パスによりスケーラビリティーが制限されます。

具体的に説明します。まず、順番に実行されたときにグラフのすべてのノードで費やされる合計時間を T とします。次に、最も時間のかかるパスに沿って費やされる時間を C とします。このパスに沿ったノードは並列に実行した場合でもオーバーラップできません。したがって、ほかのすべてのパスが C と並列に実行された場合でも、並列実行のウォールクロック時間は少なくとも C になります。また、(マイクロアーキテクチャーやメモリーの影響を無視した) スピードアップの上限は T/C になります。

ノードのボディーをタスクとしてスポーンするときのオーバーヘッド

source_nodefunction_nodecontinue_node、および multifunction_node のボディーは、常にスポーンしたタスク内で実行します。つまり、ノードがボディーを実行するためにかかる時間を推定するとき、タスク・スケジューリングのオーバーヘッドを考慮する必要があります。タスクの適切な粒度を決定する経験則はすべて、ノードボディーにも当てはまります。フローグラフに多くの細粒度ノードがある場合、これらのオーバーヘッドがパフォーマンスに大きく影響します。

関連情報