2

速度向上のために並行して実行する 200,000 のタスクがあります。を使用してParallelEnumerable.Range(0, 200000).Sum( a => /*do_something*/ )います。

タスク カウンターが 0 から 200,000 になると、必要な反復回数が減少します。のタスクa=0は最も多くの反復を必要としますが、 のタスクはa>100,0001 回またはまったく反復せずに終了します。

このため、私のクアッドコア マシンは、タスクが進行しても最大 CPU 使用率のピークに達しません。ワークロードは開始時に 4 つのコアすべてに分散されているように見えますが、一部のコアは主にas の高いタスクであったため、早期にアイドル状態になります。CPU 使用率は 100% から始まりますが、75~50~25% まで徐々に低下します。最初から最後まで完全な CPU 使用率を達成するにはどうすればよいですか?

4

1 に答える 1

0

非常に単純な自己回答:この問題を解決するには、に置き換えるだけで十分でしたParallelEnumerable.Range(0, 200000)Enumerable.Range(...).AsParallel()ではワークロードが動的に分散されているようですEnumerable.Range(...).AsParallel()

于 2013-01-24T01:18:18.560 に答える