Concurrency Runtimeに関する記事を読んでいますがwork stealing
、この記事に名前が付けられているアルゴリズムがあります。しかし、私はこのアルゴリズムが何であるかわかりません!ですから、このアルゴリズムについてのプレゼンテーションを行うのに役立つ、少しの説明またはいくつかの良いリンクが必要です。
4 に答える
私は最近、Java Fork /JoinフレームワークとWorkStealingAlgroithmsについて説明しているその論文を読みました。
その論文から、私たちはこれから始めます:
Result solve(Problem problem) {
if (problem is small)
directly solve problem
else {
split problem into independent parts
fork new subtasks to solve each part
join all subtasks
compose result from subresults
}
}
これらのフォークされたサブタスク(elseブロックの2行目)は、それ自体でより多くのサブタスクを再帰的に作成できるため、並列作業スレッドの作業キューをいっぱいにすることができます。1つのスレッドが終了し、それ以上何もすることがない場合、彼は別のスレッドのキューから作業を「盗む」ことができます。
要するに、すべての詳細については、論文を調べることをお勧めします。
次のChannel9ビデオで見つけることができるWorkStealingアルゴリズムの非常に素晴らしくて理解しやすい説明: 「ParallelExtensions:Inside the Task Parallel Going Deep」Duffy、Huseyin Yildiz、Daan Leijen、Stephen Toub00:44:00
、 (Daanによる)を参照してください。Leijen)
タスクスケジューラ用のIntelTBBアルゴリズムを見ることができます。これは、ワークスティーリングパターンを使用しています。https://software.intel.com/fr-fr/node/468190を参照してください