一部の関数をできるだけ早く完了し、他のタスクを犠牲にして計算リソースを与える必要があるシナリオがあります (つまり、優先度が高い)。具体的には、グラフィック レンダリング、およびレンダリング用に生成されたタスクは、できるだけ速く実行する必要がありますが、CPU 容量をすべて消費しないようにする必要があります。同時に、CPU の空きサイクルをタイム クリティカルではない他の作業で埋め、レンダリング タスクからサイクルを盗まないようにしたいと考えています。
基本的な考え方はかなり単純ですが、PPL でやりたいことを行う方法がわかりません。デフォルトのスケジューラを異なる優先度に設定する方法を見つけましたが、優先度をグローバルに変更したくありません。むしろ、いつでもタスクを追加できる 2 つの個別のスケジューリング ポリシーが必要です。
理想的な状況は、優先度の異なる 2 つの task_group インスタンスを作成し、必要に応じて関連するグループにタスクを追加できる場合ですが、その方法がわかりません。私が見つけた最も関連性の高いドキュメントをリンクしました. また、PPL の基本的な機能を使用できるのであれば、エージェントとメッセージ パッシングの複雑さを追加したくありません。
https://msdn.microsoft.com/en-us/library/dd984038.aspx
また、スレッドから生成されたサブタスクが親の優先度を確実に継承できるようにすることも重要です。具体的には、優先度の高いタスクと低いタスクの両方から parallel_for を呼び出し、parallel_for ブロックは同じ優先度を維持する必要があります。