我有200,000个任务将并行运行以提高速度。我正在使用ParallelEnumerable.Range(0, 200000).Sum( a => /*do_something*/ )
。
当任务计数器从0到200,000时,所需的迭代次数减少。 a=0
的任务需要大多数迭代,而a>100,000
的任务完成一次迭代或没有迭代。
由于这个原因,我的四核机器在任务进展时没有达到最大CPU利用率峰值。似乎工作负载在启动时分配给所有4个核心,并且一些核心更早地处于空闲状态,因为它们的部分主要是具有高a
s的任务。 cpu利用率从100%开始,但逐渐下降到75~50~25%。如何从头到尾实现完整的cpu利用率?
答案 0 :(得分:0)
非常简单的自我回答:用ParallelEnumerable.Range(0, 200000)
替换Enumerable.Range(...).AsParallel()
足以解决此问题。似乎工作负载在Enumerable.Range(...).AsParallel()
中动态分配。