タスク・スケジューラーをバイパス

タスク・スケジューラーをバイパス#

スケジューラーのバイパスは、次に実行するタスクを直接指定する最適化方法です。タスク・スケジューラーの動作で説明されている実行ルールによれば、現在のスレッドによって実行される新しいタスクの生成には次の手順が含まれます。

  • 新しいタスクをスレッドのデックにプッシュします。

  • 現在のタスクが完了するまで実行を続けます。

  • 別のスレッドによってスチールされない限り、スレッドのデックからタスクを取得します。

ステップ 1 と 3 では、不要なデック操作が導入されるか、さらに悪いことに、局所性を損なう可能性のあるデータスチールを許容し、かつ大幅な並列性は追加されません。これらの問題は、「タスク・スケジューラー・バイパス」テクニックを使用して、次に実行する優先タスクを生成せずに直接指定することで回避できます。タスク・スケジューラーの動作で説明されているように、返されたタスクが、スレッドによって実行される次のタスクの最初の候補になります。さらに、このアプローチでは、タスクが他のスレッドではなく現在のスレッドによって実行されることがほぼ保証されます。

現時点では、この最適化を使用する唯一の方法は、``onepai::tbb::task_group`` のプレビュー機能を使用することです。