2013-01-24 20 views
2

我有200,000個並行運行的任務可以提高速度。我正在使用ParallelEnumerable.Range(0, 200000).Sum(a => /*do_something*/)ParallelQuery核心平衡

當任務計數器從0變到200,000時,所需的迭代次數減少。具有a=0的任務需要大量的迭代,而具有a>100,000的任務完成一次或不進行迭代。

由於這個原因,我的四核機器在任務進行時未達到最大cpu利用率峯值。看起來,工作負載在開始時分配給所有4個內核,並且一些內核先前處於空閒狀態,因爲它們的部分主要是高度爲as的任務。 CPU利用率從100%開始,但逐漸下降到75〜50〜25%。我怎樣才能達到完整的CPU利用率?

+0

您是否嘗試過記錄執行順序以查看究竟是什麼問題? – svick

回答

0

很簡單自我回答:用Enumerable.Range(...).AsParallel()代替ParallelEnumerable.Range(0, 200000)就足以解決這個問題。看起來工作負載是在Enumerable.Range(...).AsParallel()中動態分配的。

+0

這不是一個很好的答案:它不能解釋爲什麼它工作得更快。在不知道的情況下使用某些東西會非常危險。 – svick