F#でTPL(Task Parallel Library)を使用して、長時間(> 1000)の長時間実行されるタスクを実行したいと考えています。ここに私の現在のコードは次のとおりです。私はこれを起動するとTPL並列実行時間が長いタスク
Parallel.For(1, numberOfSets, fun j ->
//Long running task here
)
.NETが一度にすべてのタスクを開始し、常にそれらの間でバウンドことが表示されます。それは次のものに移動する前に完了するまで、それがタスクにとどまっていればよいでしょう。これにより、コンテキストの切り替えが最小限に抑えられます。
スケジューラにヒントを提供する方法はありますか?私はヒントを提供することは可能ですが、明確な例が見つからないか、スケジューラがこれについて賢明であることを知っています。コンテキストスイッチが多すぎるというのは私の認識です。助けてくれてありがとう!
私よりも速く+1秒です。 –
MaxDegreeOfParallelismはマシンのコア数に依存しますか? –
@Wallhood:タスクがCPUバウンドの場合はおそらくyes、タスクがIOバウンド(ファイル処理、DBへのアクセス)の場合はおそらくそうではありません。私たちの場合、通常の状況では値が2/4コアで正常に機能したため、より洗練されたものを試す本当の理由はありませんでした。たとえば、16コアのスーパーマシンで実行される可能性の高いプログラムではありません。 – MiMo