インテル® Advisor ユーザーガイド
タスクのオーバーヘッドには、タスクを生成しスレッドに割り当てるために費やされる時間と、タスクが完了したときにスレッドを停止または一時停止するためにの時間が含まれます。
タスクのオーバーヘッドは、タスクが実行された回数に比例します。タスクが非常に頻繁に実行されるか、タスクのインスタンスの平均時間が非常に短い場合、多くの計算を含むようにタスクを修正します。または、一部の並列フレームワークでサポートされるタスクのチャンク化機能を使用することを検討してください。この場合、並列フレームワークは実行時に複数のタスクをグループ化します。
スータビリティー・ツールがタスクのオーバーヘッド軽減を推奨する場合、並列タスクが小さすぎることが考えられます。多くの場合、並列サイトの場所としてリーフ関数の内部ループを選択していることが原因です。代わりに、呼び出しツリーの上位の関数を選択すべきです。
タスクのオーバーヘッドを軽減するには 2 つの方法があります。
生成するタスクの数を減らすようにプログラムを再構成します。例えば、タスク・アノテーションやコードを再構成して、タスクを実行中のワーク量を増やすようにします。
選択した並列フレームワークで利用可能であれば、タスクのチャンク化を有効にします。
複数のタスク実行を単一のタスクに結合することで、タスクのオーバーヘッドを軽減できます。例えば、2 つのタスクを 1 つにマージします。