マルチスレッド システムでタスクをスケジュールしようとしています。私の考えは、スレッドごとにローカルキューを用意することです。各スレッドはローカルキューからジョブをフェッチします。ただし、スレッドがあるしきい値に達した場合、ジョブをフェッチするのではなく、しきい値レベルを下回っているスレッドにジョブを転送する必要があります。
私の疑問は、スレッドのしきい値を設定する方法です。
マルチスレッド システムでタスクをスケジュールしようとしています。私の考えは、スレッドごとにローカルキューを用意することです。各スレッドはローカルキューからジョブをフェッチします。ただし、スレッドがあるしきい値に達した場合、ジョブをフェッチするのではなく、しきい値レベルを下回っているスレッドにジョブを転送する必要があります。
私の疑問は、スレッドのしきい値を設定する方法です。
この問題に対する別の取り決めは、キューを終了したスレッドに、他のキューから作業を引き継ぐ能力を与えることです。これは「ワーク スティーリング」としてよく知られている、よく知られたスケジューリング アルゴリズムです。
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.38.8905
どのスレッド ライブラリを使用していますか?
私はすべてのスレッド化プロジェクト TBB と Cilk Plus で 2 つの OSS ライブラリを使用しています。これらの高レベルのランタイムが提供する機能の 1 つは、プロセッサ リソースを効率的に使用する方法で、タスクをスレッドに自動的にスケジュールすることです。ランタイムは、多数のタスクの負荷分散にも非常に効果的です。
www.threadingbuildblocks.org
www.cilkplus.org